Cloudflare Access には Generic OpenID Connect(OIDC)コネクターがあり、Access に未登録の IdP を連携できます。
-
アイデンティティプロバイダーを開き、クライアント / アプリを作成します。
-
クライアント / アプリの作成時、IdP が authorized redirect URI を求める場合があります。次の URL を入力します。
https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callbackチーム名は、Cloudflare ダッシュボード ↗ の Settings > Team name and domain > Team name で確認できます。
-
次のフィールドの内容をコピーします。
- Client ID
- Client secret
- Auth URL: IdP の
authorization_endpointURL - Token URL: IdP の
token_endpointURL - Certificate URL: トークンへの署名を IdP の鍵に許可するための、IdP の
jwks_uriエンドポイント
これらの値は、アイデンティティプロバイダーの OIDC discovery endpoint で確認できます。プロバイダーによっては "well-known URL" と呼びます。
-
Cloudflare ダッシュボード ↗ で Zero Trust > Integrations > Identity providers を開きます。
-
Your identity providers で Add new identity provider を選択します。
-
OpenID Connect を選びます。
-
アイデンティティプロバイダーに名前を付け、IdP から取得した情報で必須フィールドを入力します。
-
(任意)IdP がプロトコルに対応している場合は Proof of Key Exchange(PKCE) ↗ を有効にします。有効にすると、すべてのログイン試行で PKCE が実行されます。
-
(任意)SCIM を有効にする場合は ユーザーとグループを同期する を参照してください。
-
(任意)Optional configurations で、ユーザーのアイデンティティに追加したい カスタム OIDC クレーム を入力します。この情報は user identity エンドポイント で利用できます。
-
Save を選択します。
Identity Providers エンドポイントへ POST リクエストを送ります。
Required API token permissions
At least one of the following token permissions is required:Access: Organizations, Identity Providers, and Groups Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/identity_providers" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Generic OIDC example",
"type": "oidc",
"config": {
"client_id": "<your client id>",
"client_secret": "<your client secret>",
"auth_url": "https://accounts.google.com/o/oauth2/auth",
"token_url": "https://accounts.google.com/o/oauth2/token",
"certs_url": "https://www.googleapis.com/oauth2/v3/certs",
"pkce_enabled": false,
"email_claim_name": "email",
"claims": [
"employeeID",
"groups"
],
"scopes": [
"openid",
"email",
"profile"
]
}
}'-
cloudflare_api_token↗ に次の権限を追加します。Access: Organizations, Identity Providers, and Groups Write
-
cloudflare_zero_trust_access_identity_provider↗ リソースを設定します。resource "cloudflare_zero_trust_access_identity_provider" "generic_oidc_example" { account_id = var.cloudflare_account_id name = "Generic OIDC example" type = "oidc" config = { client_id = "<your client id>" client_secret = "<your client secret>" auth_url = "https://accounts.google.com/o/oauth2/auth" token_url = "https://accounts.google.com/o/oauth2/token" certs_url = "https://www.googleapis.com/oauth2/v3/certs" pkce_enabled = false email_claim_name = "email" claims = ["employeeID", "groups"] scopes = ["openid", "email", "profile"] } }
接続が機能しているかを確認するには、Authentication > Login methods を開き、テストするログイン方法の横にある Test を選択します。成功すると、確認画面が表示されます。
Generic OIDC 連携では、SCIM を使ってユーザーグループの同期とユーザーの自動デプロビジョニングができます。
SCIM が Access と Gateway のポリシー評価に与える影響は異なります。
Access は、認証時にアイデンティティプロバイダーが返す SAML アサーションまたは OIDC トークンから、ユーザーの ID とグループ所属を評価します。SCIM は Access のポリシービルダーに読みやすいグループ名を提供しますが、Access はログイン評価に SCIM のグループ所属を使いません。Enable user deprovisioning をオンにすると、SCIM アプリケーションからユーザーを削除した時点で、そのユーザーのアクティブな Access セッションが取り消されます。グループ所属の変更後にセッションを取り消すよう、SCIM を設定することもできます。Access は、ユーザーが再度認証したときに、更新後のアイデンティティプロバイダーデータを評価します。
Gateway は、User Registry の ID に対してアイデンティティベースのポリシーを評価します。ユーザーまたはグループ所属が変わると、SCIM はこの ID を更新します。ユーザーの再認証を待つ必要はありません。Cloudflare One Client のデバイスプロファイルも、同じ同期済み ID を使います。
アイデンティティプロバイダーは SCIM バージョン 2.0 に対応している必要があります。
-
Cloudflare ダッシュボード ↗ で Zero Trust > Integrations > Identity providers を開きます。
-
IdP 連携を探し、Edit を選択します。
-
Enable SCIM をオンにします。
-
(任意)次の設定を行います。
- Enable user deprovisioning: IdP の SCIM アプリケーションからユーザーが削除されたときに、ユーザーのアクティブセッションを取り消します。アクティブな Access セッションはすべて無効になり、Cloudflare One Client のセッションポリシー では再認証が求められます。
- Remove user seat on deprovision: IdP の SCIM アプリケーションからユーザーが削除されたときに、Cloudflare One アカウントから ユーザーのシートを削除します。
- SCIM identity update behavior: IdP でユーザーの ID が更新されたときの、Cloudflare One 側の動作を選びます。
- Automatic identity updates: IdP が SCIM 経由で更新された ID またはグループ所属を送ると、User Registry の ID を自動更新します。この ID は Gateway ポリシーと Cloudflare One Client の デバイスプロファイル に使われます。Access は再認証時に更新後の ID を読み取ります。
- Group membership change reauthentication: IdP でグループ所属が変わったときに、ユーザーのアクティブセッションを取り消します。アクティブな Access セッションはすべて無効になり、Cloudflare One Client のセッションポリシー では再認証が求められます。Access は再認証時に更新後のグループ所属を読み取ります。
- No action: 次回、Access または Cloudflare One Client に再認証したときにユーザーの ID を更新します。
-
Regenerate Secret を選択します。SCIM Endpoint と SCIM Secret をコピーします。これらの値を IdP に入力します。
-
Save を選択します。
SCIM シークレットに有効期限はありません。ただし、いつでも手動で再生成できます。
設定手順はアイデンティティプロバイダーによって異なります。IdP では、元の SSO アプリケーション を編集するか、新しい SCIM アプリケーションを作成します。詳細は各アイデンティティプロバイダーのドキュメントを参照してください。手順の例は Okta または Jumpcloud のガイドを参照してください。
IdP グループに基づいてポリシーを作成する場合は、次を確認してください。
- IdP が
groupsフィールドを送ること。名前は完全一致である必要があります(大文字小文字は区別しません)。それ以外の値は OIDC クレームとして送られます。 - IdP が新しい SCIM アプリケーションを必要とする場合は、そのグループが 元の SSO アプリケーション のグループと一致すること。グループを一致させると、ユーザーが Access に認証したときに IdP が返すグループと、Gateway のアイデンティティが同期したままになります。
Cloudflare One でユーザー ID が更新されたかを確認するには、SCIM プロビジョニングログ を表示します。
すべての OIDC IdP 連携は、カスタム OIDC クレームに対応しています。設定すると、Access はオリジンサービスが利用できるように、そのクレームを Access JWT に追加します。カスタム OIDC クレームは Access ポリシー と Gateway ポリシー で参照できます。カスタムのアイデンティティ属性に基づいて、アプリケーションへのユーザーアクセスを制御できます。
IdP 連携にカスタム OIDC クレームを追加するには、次の手順を実行します。
-
アイデンティティプロバイダーで、カスタムクレームが OIDC ID トークンに含まれることを確認します。
-
Cloudflare ダッシュボード ↗ で Zero Trust > Integrations > Identity providers を開きます。
-
Your identity providers で対象のアイデンティティプロバイダーを探し、Edit を選択します。
-
OIDC Claims に、カスタムクレームの名前を入力します(例:
oid)。 -
Save を選択します。
-
Test を選択し、カスタムクレームが
oidc_fieldsに表示されることを確認します。例:"oidc_fields": { "oid": "54eb1ed2-7150-44e6-bbe4-ead24c132fd4" },
これで、OIDC Claim または IdP OIDC Claim セレクターを使い、カスタムクレーム向けの Access ポリシーを作成できます。カスタム OIDC クレームは Gateway ポリシーのアイデンティティベースセレクター としても使えます。カスタムクレームは、Access 背後のオリジンへ JWT で渡されます。
Access がユーザーのメールを識別するために使う、カスタムの Email claim 名を指定できます。IdP が OIDC ID トークンで標準の email クレームを返さない場合に便利です。
Cloudflare Access は、複数レコードの OIDC クレームにも対応しています。これらのクレームは解析され、ポリシーで個別に参照できます。アプリケーションでのきめ細かなアクセス制御と、正確なユーザー認可が可能になります。
Cloudflare Access は、OIDC クレーム値の部分参照と OIDC スコープには対応していません。
Cloudflare は、Generic OIDC トークンの検証に次のアルゴリズムをサポートします。
- RS512
- RS256
- PS512
- ES256
- ES384
- ES512