たれながし.info

とあるITエンジニアの備忘録

FortiGateのSSL-VPNにAzureADのSAML認証で接続する

FortiGateのSSL-VPNSAML認証します。IdpはAzureADを使います。

f:id:tarenagashi_info:20201129042523p:plain

はじめに

目的

FortiGateのSSL-VPNSAML認証に対応しているので、AzureADのSAML認証で接続してみます。
FortiGateはv6.2.0から、FortiClientはv6.4.0からSSL-VPNSAML認証に対応したらしいです。(ちなみに、FortiGateのWeb管理画面のSAML認証もv6.2.0から対応)

検証構成

f:id:tarenagashi_info:20201129042523p:plain

  • FortiGate:Azure上に構築したVM版のv6.4.3
  • AzureAD:デフォルトの「onmicrosoft.com」ドメイン
  • クライアント:Windows10 Home + FortiClientv6.4.1

※オンプレのFortiGateを持っていないので、Azure上に構築したVM版のFortiGateを使っています。
 AzureへのFortiGate-VMの構築方法は「AzureにFortiGate-VM構築してみた」を参照してください。

AzureADの設定

エンタープライズアプリケーションの追加

AzureADへ「エンタープライズアプリケーション」を追加します。

AzureポータルでAzureADを開き、エンタープライズアプリケーションをクリック
f:id:tarenagashi_info:20201129045604p:plain

新しいアプリケーションをクリック
f:id:tarenagashi_info:20201129045643p:plain

「fortigate」を検索し「FortiGate SSL VPN」「作成」をクリック
f:id:tarenagashi_info:20201129045733p:plain

SAMLの設定

AzureADに追加したSaaSアプリにSAMLの設定をします。

シングルサインオンの設定をクリック
f:id:tarenagashi_info:20201129052333p:plain

SAMLをクリック
f:id:tarenagashi_info:20201129052413p:plain

基本的なSAML構成を編集する
f:id:tarenagashi_info:20201129052529p:plain

項目 URL
[識別子] https://[FQDN]/remote/saml/metadata
[応答URL] https://[FQDN]/remote/saml/login
[サインオンURL] https://[FQDN]/remote/login
[ログアウトURL] https://[FQDN]/remote/saml/logout

※[FQDN]は、SSL-VPNで使うFortiGateのFQDN or グローバルIP
 SSL-VPNに443以外を使う場合は適宜ポート番号を付けてください

ユーザー属性とクレームの「編集」をクリック
f:id:tarenagashi_info:20201129052624p:plain

「新しいクレームの追加」から「username」を追加する
f:id:tarenagashi_info:20201129054541p:plain

名前 ソース属性
username user.userprincipalname

既存設定の「users.group[SecurityGroup]」をクリックする
「グループ要求の名前をカスタマイズする」をチェックし名前を「group」に設定し「保存」する
f:id:tarenagashi_info:20201129054714p:plain

「username」「group」があることを確認します。
この2つ以外は不要なので消しても良いみたいです。
f:id:tarenagashi_info:20201129055446p:plain

証明書 (Base64)をダウンロードする
「FortiGate SSL VPNのセットアップ」に表示される3つのURLをメモする
f:id:tarenagashi_info:20201129055700p:plain

ユーザーの作成とアプリの割り当て

接続に使用するユーザを作成し、アプリを割り当てます。
グループに対してアプリを割り当てることも可能ですが、AzureAD Premium(有料ライセンス)が必要になります。

ユーザーの作成

AzureADにユーザーを作成する
f:id:tarenagashi_info:20201129062742p:plain

アプリの割り当て

Azureポータルで「エンタープライズアプリケーション」の「FortiGate SSL VPN」をクリック
f:id:tarenagashi_info:20201129062050p:plain

「ユーザーとグループの割り当て」をクリックする
f:id:tarenagashi_info:20201129062241p:plain

「ユーザーの追加」から追加する
f:id:tarenagashi_info:20201129062344p:plain

セキュリティグループの作成

ユーザー認証に使用するセキュリティグループ「FortiGateAccess」を作成し、ユーザーを追加します。
作成したグループの「オブジェクト ID 」を後ほどFortiGateへ設定します。

AzureADでセキュリティグループ「FortiGateAccess」を作成する
FortiGateの設定に使うので「オブジェクトID」をメモしておきます。
f:id:tarenagashi_info:20201129062935p:plain

作成したグループにユーザーを追加する
f:id:tarenagashi_info:20201129063020p:plain

FortiGateの設定

証明書のインポート

システム > 証明書 > インポート > リモートから「Base64 SAML 証明書」をインポートする
証明書の名前「REMOTE_Cert_1」をメモしておきます。
f:id:tarenagashi_info:20201129063517p:plain

SAMLの設定

FortiGateにSSH接続し、下記コマンドを実行します。

config user saml
 edit azure
  set entity-id [SP 識別子]
  set single-sign-on-url [SP 応答URL]
  set single-logout-url [SP ログアウトURL]
  set idp-single-sign-on-url [IdP ログインURL]
  set idp-entity-id [IdP AzureAD識別子]
  set idp-single-logout-url [IdP ログアウトURL]
  set idp-cert [Base64 SAML 証明書名]
  set user-name username
  set group-name group
end

[SP...][IdP...]は「AzureADの設定」でメモしたものに置き換えます。

注意点
[IdP ログアウトURL]は「https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0」となり、「?」を含みます。「?」はFortiGateで特別な文字として扱われるので、そのままでは入力できません。よって、「?」の直前まで入力した後、一度「Ctrl+V」を押します。すると「?」を入力できます。
f:id:tarenagashi_info:20201129064031p:plain

グループ設定

AzureADで作成したグループ「FortiGateAccess」をFortiGateに設定します。

config user group
 edit FortiGateAccess
  set member azure
  config match
   edit 1
    set server-name azure
    set group-name [オブジェクトID]
   next
  end
 next
end

SSL-VPN設定

SSL-VPNを443で提供したいので、Web管理画面のポート番号を10443に変えます。
f:id:tarenagashi_info:20201129064156p:plain

SSL-VPNの設定を行います。 ※とりあえずSSL-VPNが繋がる設定だけする
f:id:tarenagashi_info:20201129064312p:plain
f:id:tarenagashi_info:20201129064323p:plain

ポリシーを作成します。
f:id:tarenagashi_info:20201129064408p:plain

動作確認

SAML認証の動作確認

SSL-VPNを許可したユーザーでアプリパネルにアクセスする
「FortiGate SSL VPN」をクリックする
f:id:tarenagashi_info:20201129064832p:plain

FortiGateの「SSL-VPN Portal」にアクセスできたら成功です。
f:id:tarenagashi_info:20201129065021p:plain

FortiClientでの動作確認

公式サイトから、最新のFortiClientVPNをDLしてインストールします。
f:id:tarenagashi_info:20201129044951p:plain

起動し、VPN接続設定をします。
「Enable Single Sign On(SSO) for VPN Tunnel」をチェックします。
f:id:tarenagashi_info:20201129044129p:plain

VPNに接続します。
f:id:tarenagashi_info:20201129044143p:plain

証明書のエラーが表示されるので「OK」します。
f:id:tarenagashi_info:20201129044334p:plain

AzureADの認証画面が表示されるのでサインインします。
f:id:tarenagashi_info:20201129044441p:plain

SSL-VPN接続完了です。
f:id:tarenagashi_info:20201129044518p:plain

※接続途中にステータスが40%程度で停止した場合、FortiClientに隠れて証明書の確認ダイアログが表示されている場合があります。その場合、ダイアログを前面に表示し「OK」を押します。(初回のみ表示されると思われます。)