Okta→Fortigate SSL-VPNのSSO（SAML）の設定方法

# SSL-VPNのSSO（SAML）について
FortigateのSSL-VPNのログインをOktaで認証する方法を記述します。
これを行うことで、SSL-VPNでログインボタンをクリックすると、Oktaのダイアログが表示されOktaの認証を行うことでログインできるようになります。

## メリット
1. Oktaの多要素認証が使用できるようになりセキュアになります。
1. ユーザーはパスワードが不要になり操作が楽になります。
1. Fortigate側にVPN用のユーザーを登録する必要がなくなります。

# 前提
- Fortigate ファームウェアバージョン6.2以上であること

# Oktaにアプリケーションを作成する
※Fortigateのカタログはありません。
1. Create App Integration > SAML2.0 > 1.General Settingsで任意のアプリ名、ロゴを入力します。
1. 2.Configure SAMLでSingle sign on URLとAudience URI (SP Entity ID)を設定します。もちろんVPNのポートが443ではない場合はドメイン、IPの後ろに`:port`の形で入力します。
Single sign on URL：https://\<fortigateの公開ドメイン or IP\>/remote/saml/login/
Audience URI (SP Entity ID)：https://\<fortigateの公開ドメイン or IP\>/remote/saml/metadata/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/37c5b10f-6a98-99dc-be47-458b3e4708e3.png)
1. アプリの作成が終わったらアプリのSign Onタブのページに「View SAML setup instructions」というボタンがあるので押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/c596d6bf-a238-aac4-7bac-8f6fda0917fe.png)
1. 開いた画面にFortigate側に設定する上表が表示されます。`X.509 Certificate`（証明書）はダウンロードしておきます。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/2d8c6ec8-444f-f992-81c2-4f14e1df5c83.png)
:::note info
当然ですが、使用するユーザーをアプリにアサインしておいてください。
:::

# FortigateにSAML設置を行う
## 証明書の登録
Oktaでダウンロードした証明書をFortigateにアップロードします。
システム > 証明書 > インポート > リモート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/77ced82b-54b6-0897-50cc-3306bb8c2dcd.png)

## SAMLの設定
FortigateのCLIで以下を実行します。
```bash
config user saml
edit "okta-saml-sslvpn"
set cert "Fortinet_Factory"
set entity-id "https://<fortigateの公開ドメイン or IP>/remote/saml/metadata/"
set single-sign-on-url "https://<fortigateの公開ドメイン or IP>/remote/saml/login/"
set single-logout-url "https://<fortigateの公開ドメイン or IP>/remote/saml/logout/"
set idp-entity-id "http://www.okta.com/exk1zztym0xfjZG70697"
set idp-single-sign-on-url
"https://trial-7179599.okta.com/app/trial-7179599_sample_1/exk1zztym0xfjZG70697/sso/saml"
set idp-cert "REMOTE_Cert_1"
set user-name "username"
next
end

config user group
edit "ssl-saml-grp"
set member "okta-saml-sslvpn"
next
end
```
editの後の"okta-saml-sslvpn"はユーザー名です。任意の値で構いません。
certは固定で「Fortinet_Factory」です。
entity-id、single-sign-on-urlはOktaのアプリで設定した値と同じです。entity-idにはAudience Restriction、single-sign-on-urlにはSingle Sign On URLを設定します。
single-logout-urlはよくわかりませんが適当に設定しています。必要ないかもしれません。
idp-entity-id、idp-single-sign-on-urlはOktaの「How to Configure SAML 2.0」画面で表示された「Identity Provider Issuer」、「Identity Provider Single Sign-On URL」をそれぞれ設定します。
idp-certはアップロードした証明書のFortigate上の名前です。
user-nameは"username"とします。これはSAMLのXMLで渡すユーザー名の属性名になります。
作成したユーザーのグループを作成します。グループ名は任意で構いません。

## SSL-VPNに登録する
1. SSL-VPNの認証/ポータルマッピングにグループを追加します。
1. ファイアウォールのポリシーにグループを追加します。

登録方法はトラスト・ログインのサイトが詳しいです。[参考](https://qiita.com/drafts/83e68ded6fbdb9511144/edit#%E5%8F%82%E8%80%83)に記述しているリンクの「SSL-VPN設定を行います。」「ファイアウォールポリシーを設定します。」を参照してください。

# SSL-VPNクライアントに設定する
トラスト・ログインから画像を借りていますが、以下のように設定します。
接続名：任意
リモートGW：SSL-VPNのURL
ポートの編集：チェックしポートを設定
Enbale Single Sign On(SSO) for VPN Tunnel：チェック
Use external browser as user-agent for saml user authentication：チェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/4031a428-1200-56d5-b1fc-92d0c065fef5.png)
これで設定は終了です。

# 参考
以下のサイトはトラスト・ログインのページです設定することはほとんど同じです。
[FortiGate のSAML認証設定方法](https://support.trustlogin.com/hc/ja/articles/4406936476569-FortiGate-%E3%81%AESAML%E8%AA%8D%E8%A8%BC%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95)