Cloudflare Zero Trust と Gluegent Gate を SAML で SSO 連携する

# 目的
Cloudflare Zero Trust と Gluegent Gate を SAML で SSO 連携します。

```mermaid:
%%{init: {'themeCSS': 'img {width: 48px; height:48px;}'}}%%

graph RL

subgraph Cloudflare [Cloudflare Zero Trust]
    subgraph Auth [Settings > Authentication]
        SAML[Generic SAML 2.0 Provider]
    end
end

subgraph GG [Gluegent Gate]
    subgraph シングルサインオン
        CloudflareSSO[Cloudflare]
    end
    subgraph ユーザー
        Test[<img src='https://cf-icons.pages.dev/user.svg' width='48' height='48'><br>saml-test]
    end
    subgraph 認証
        ID[ID/パスワード認証]
    end
end

Cloudflare --> |SAMLサービスプロバイダーとして登録|CloudflareSSO
GG --- hidden:::hidden --> |証明書をダウンロード<br>+<br>IdP として登録|SAML
Test --> |認証ルール|ID
Test --> |アクセス権限|CloudflareSSO

classDef hidden display: none;
```

# Gluegent Gate とは
国産 IDaaS ソリューションです。

https://www.gluegent.com/service/gate/

>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/afcd75b7-e636-1ac7-2bf0-1ea951d2b9c7.png)


# Gluegent Gate から証明書をダウンロード

Gluegent Gate 管理画面「システム」－「idP証明書」にて、「使用中」となっている証明書をダウンロードします。
次のステップで使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/214ac287-d471-4a3b-e269-60456f81f932.png)

# Cloudflare (SP) 側で Gluegent Gate (IdP) を登録
以下の手順に沿って進めます。

https://developers.cloudflare.com/cloudflare-one/identity/idp-integration/generic-saml/

Gluegent Gate (IdP) 側 SAML 情報は、以下からパラメータを参考にします。

- [SAML(汎用SAML for SP) - 2. 連携情報の交換 – クラウドコンシェルジュ](https://support.gluegent.com/hc/ja/articles/900006951703-SAML-%E6%B1%8E%E7%94%A8SAML-for-SP-2-%E9%80%A3%E6%90%BA%E6%83%85%E5%A0%B1%E3%81%AE%E4%BA%A4%E6%8F%9B)

:::note info
Gluegent Gate のユーザーグループは `groups` として SAML attribute を登録することで、Cloudflare Gateway ポリシーの `User Group` セレクタで利用できます。

>[グループの管理 – クラウドコンシェルジュ](https://support.gluegent.com/hc/ja/articles/900006703003-%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E7%AE%A1%E7%90%86)
>
>**ユーザーグループ**
このグループは Gluegent Gate のアクセス制御に利用できる他、連携するクラウドサービス (Google Workspace、Microsoft 365 など) のグループとしても同期されます。

:::

| フィールド | 値 |
|:-:|:-:|
| Single sign-on URL | `https://auth.gluegent.net/saml/saml2/idp/SSOService.php?tenant=<テナント ID>` |
| IdP Entity ID or Issuer URL | `https://slink.secioss.com/<テナントID>` |
| Signing certificate | ダウンロードした証明書の中身 |
| Email attribute name | `email` |
| SAML attributes (Optional) | `email`<br>`seciossSystemId`<br>`uid`<br>`employeeNumber`<br>`surName`<br>`givenName`<br>`displayName`<br>`department`<br>`seciossLocaleCode`<br>`preferredLanguage`<br>~~`seciossGroup`~~ --> `groups`<br>`seciossSecurityGroup`<br>`seciossBusinessRole` など  |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/0b982839-2ed6-e341-3841-21f848081e45.png)

# Gluegent Gate (IdP) 側で SAML SP (Cloudflare) を登録
以下リンク先の `SP 側の情報` の手順に沿って進めます。

- [SAML(汎用SAML for SP) - 2. 連携情報の交換 – クラウドコンシェルジュ](https://support.gluegent.com/hc/ja/articles/900006951703-SAML-%E6%B1%8E%E7%94%A8SAML-for-SP-2-%E9%80%A3%E6%90%BA%E6%83%85%E5%A0%B1%E3%81%AE%E4%BA%A4%E6%8F%9B)

パラメータは以下の通りにします。

- [Generic SAML 2.0 · Cloudflare Zero Trust docs](https://developers.cloudflare.com/cloudflare-one/identity/idp-integration/generic-saml/)
    - `1. Create an application in your identity provider`

または「メタデータ > URL」から `https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/saml-metadata` を「読み込む」ことで以下の情報が自動で入力されます。

| フィールド | 値 |
|:-:|:-:|
| エンティティID | `https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback` |
| Assertion Consumer Service | `https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback` |
| ログアウトURL | `https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/logout` |
| IDの属性 | `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress` |
| ユーザーIDの属性 | メールアドレス |
| SP証明書 | `https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/certs` の `public_certs.cert` から取得できる値 |

また、「送信する属性」は Cloudflare で設定した SAML attributes と一致させることでメタデータとして Cloudflare Zero Trust ポリシーに活用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/be3c8e72-004e-f0a5-a5e0-14240d6427f5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/e715cf38-343d-20e3-e449-a2d61e7e2a3a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f1c03920-ef64-ea8a-a3ac-52fbba2e2102.png)

# Gluegent Gateで「ユーザー」の新規登録
SSO 連携をテストするためのユーザーを作成します。
許可するサービスで「Cloudflare Zero Trust」をチェックします。

- [ユーザーの管理 - 1. ユーザーの作成 – クラウドコンシェルジュ](https://support.gluegent.com/hc/ja/articles/900005367466-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%AE%A1%E7%90%86-1-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/97af01bb-9e56-fa09-712a-1f0a9d79cd59.png)

# Gluegent Gateで「認証」の設定
通常の「ID/パスワード認証」でのユーザーログインを許可する認証ルールを作成します。

- [認証・アクセス権限 - 2. 認証ルールの作成 – クラウドコンシェルジュ](https://support.gluegent.com/hc/ja/articles/900006794923-%E8%AA%8D%E8%A8%BC-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%A8%A9%E9%99%90-2-%E8%AA%8D%E8%A8%BC%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/4e1ae767-63fe-52f1-a139-2ddba2f9fb57.png)

# Gluegent Gateで「アクセス権限」の設定
アクセス権限ルールで、認証に成功した接続に対し、Cloudflare Zero Trust サービスへの認可（アクセス権）を付与します。

- [認証・アクセス権限 - 7. アクセス権限ルールの作成 – クラウドコンシェルジュ](https://support.gluegent.com/hc/ja/articles/900005844406-%E8%AA%8D%E8%A8%BC-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%A8%A9%E9%99%90-7-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%A8%A9%E9%99%90%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/36d4060f-171d-6368-a321-0753c1d3969b.png)

# シングルサインオン (SSO) でのログイン確認
以上の準備が整ったら、Cloudflare Zero Trust の Settings > Authentication から Gluegent Gate の SSO 連携をテストします。

Gluegent Gate の ID/パスワード認証画面に飛ばされてログインした後に以下のような画面となれば連携に成功しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f7e05671-dc69-c4ac-6e17-02f7d9549c0c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/8455edea-48a0-97cc-11e3-6efc6f3e2534.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/3a4a3e95-1352-17ff-4dd7-234c6496ddb4.png)

# Gateway ポリシーにおけるグループ設定確認
以下のように `User Group Names` セレクタ選択時に、リストとして表示されることが確認できます。

:::note info
Gluegent Gate のユーザーグループは `groups` として SAML attribute を登録することで、Cloudflare Gateway ポリシーの `User Group` セレクタで利用できます。

>[グループの管理 – クラウドコンシェルジュ](https://support.gluegent.com/hc/ja/articles/900006703003-%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E7%AE%A1%E7%90%86)
>
>**ユーザーグループ**
このグループは Gluegent Gate のアクセス制御に利用できる他、連携するクラウドサービス (Google Workspace、Microsoft 365 など) のグループとしても同期されます。

:::

https://developers.cloudflare.com/cloudflare-one/policies/gateway/identity-selectors/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/c6e6df99-9e34-551b-8d1f-88515bcaaf83.png)

# まとめ

一般的な SSO 連携方式である SAML 2.0 に対応している IdP であれば、Cloudflare Zero Trust と簡単に連携できることが確認できました。

Gluegent Gate を主な IdP としている日本企業も安心して Cloudflare Zero Trust を利用できます。