Azure AD SAML 認証で SSL-VPN 接続する

#はじめに
FortiGate の SSL-VPN 機能を利用するときは、FortiClient という VPN クライアントソフトを使います。
ForitGate と FortiClient が v6.4.0 で SAML 認証に対応したので、Azure AD を IdP として利用する際の設定手順をまとめまてみました。

とりえあず動かすための最小限の設定をまとめてますので、SAML の詳しい説明など知りたい方は適当にググってください。
以下の記事は要点がコンパクトにまとまっててわかりやすかったので、参考までにリンクを貼っておきます。
[便利なSaaSをもっと安全に使うには？(番外編：SAML解説) - NetOne 匠コラム](https://www.netone.co.jp/knowledge-center/blog-column/knowledge_takumi_199/)

#設定の流れ
1. Azure AD (IdP) に FortiGate (SP) を登録
2. Azure AD 設定
3. FortiGate 設定
4. FortiClient 設定

##1. Azure AD (IdP) に FortiGate (SP) を登録
Azure Portal で Azure Active Directory > Enterprise applications にアクセスし、アプリケーションを追加します。
"＋New Application" をクリックして検索窓に fortigate と入力し "FortiGate SSL VPN" を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/bf3a7c79-8143-c6ed-36a8-110f48770336.png)

すると以下のように表示されるので Create で作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/019bbf87-b536-3074-f48c-5620b69129a1.png)

##2. Azure AD 設定
次に FortiGate SSL VPN アプリを設定していきます。
まず 1. Assign users and groups をクリックして SSL-VPN で認証するユーザーを登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/be744973-69b4-8049-44af-bb8ee1c575d3.png)

"Users and groups" より "＋Add user/group" をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/6aaee0ce-537a-f7cb-2319-6fa7d8f06b20.png)

SSL-VPN で認証させたいユーザーを登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/8d603329-dde8-41a6-65e2-5524f0f961b1.png)

登録されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/203f0c75-99c4-d2ed-6b94-a99728635ca3.png)

次に SSO を設定していきます。
Single sign-on から SAML を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/0a32b1c6-acec-e6ec-9348-c1c961764fa5.png)

設定するのは次の2か所です。どちらも Edit をクリックして編集します。
**1. Basic SAML Configuration**
**2. User Attributes & Claims**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/a702f4df-8c79-9df6-94dc-974cb3e0b9e6.png)

"Basic SAML Configuration" の設定は以下のとおりです。
`<ip:port>` には FortiGate の SSL-VPN 接続先を指定します。

```
Identifier	http://<ip:port>/remote/saml/metadata
Reply URL	https://<ip:port>/remote/saml/login/
Sign on URL	https://<ip:port>/remote/login
Logout Url	https://<ip:port>/remote/saml/logout/
```
"User Attributes & Claims" には 以下の値を追加します。

```
Name: username
Source: Attribute
Source attribute: user.principalname
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/962224b3-cf3e-883f-6ba3-7c57ba5c8295.png)

最後に FortiGate に設定する情報を取得します。
**3. SAML Signing Certificate**
Certificate(Base64)をダウンロード

**4. Set up FortiGate SSL VPN**
Login URL, Azure AD Identifier, Logout URL の値を記録する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/6fceae2a-ba15-b40e-cc46-3369391ef2c0.png)

以上で Azure Portal での作業は完了です。

##3. FortiGate 設定
まず Azure Portal からダウンロードした証明書をインポートします。
System > Cerfiticate > Import > Remote Certificate
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/d1335706-669a-3d39-ff5f-ae22c3da4c5c.png)

インポートした証明書は "REMOTE_Cert_1" のような前になっているので、必要に応じてわかりやすい名前に変更します。

```
config vpn certificate remote
   rename REMOTE_Cert_1 to azuresso.cert
end
```
次に SAML ユーザーを作成します。
SAML ユーザーは CLI から設定します。
`?` を入力する際は `Ctrl-v` を押してから `?` とします。

```
config user saml
    edit "user01-aad"
        set cert "Fortinet_Factory"
        set entity-id "http://<ip:port>/remote/saml/metadata"
        set single-sign-on-url "https://<ip:port>/remote/saml/login/"     
        set single-logout-url "https://<ip:port>/remote/saml/logout/"     
        set idp-entity-id "https://sts.windows.net/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/"
        set idp-single-sign-on-url "https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/saml2"
        set idp-single-logout-url "https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0"
        set idp-cert "azuresso.cert"
        set user-name "username"
    next
end
```
次にユーザーグループを作成します。

```
config user group
    edit "aad-saml-group"
        set member "user01-aad"
    next
end
```

SSL-VPN 設定に SAML ユーザーを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/51fa8542-d122-3e8b-8ba3-341185b8e9c6.png)

SSL-VPN アクセス用の Firewall Policy にSAMLユーザーを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/693a8418-cb83-bcbd-673c-39781a492739.png)

以上で FortiGate の設定は完了です。

##4. FortiClient 設定
まず FortiClient v6.4.2 をインストールします。
https://www.forticlient.com/downloads

インストールしたら FortiClient Console を開いて VPN 設定を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/533a199c-edbe-de83-6bec-38cd9a1c7fe6.png)

IP, Port など設定して "Enable Single Sign On (SSO) for VPN Tunnel" にチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/57354a6b-a0d9-ca19-a45f-113166fadedf.png)

SAML Login を押して SSL-VPN 接続を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/3e2d3e22-752e-b2d9-642d-3536c997c178.png)

認証ポータルがポップアップしてくるので、Azure AD ユーザーでログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075599/766a0b47-4957-db6f-c61e-9304b1e1cc25.png)

#まとめ
IDaaS と連携した SAML 認証 というと設定がややこしそうに聞こえますが、意外と簡単に設定できます。
また SAML なので Azure AD 以外の IDaaS (Okta, G Suite など) も使えます。
Office 365 や G Suite を利用している環境では IDM を一元化できますし MFA も容易に実装できますから、メリットが大きいです。
ぜひ一度お試しいただければと思います。