IdP フェデレーションを使うと、複数の Cloudflare アカウントを持つ組織が、1 つのアイデンティティプロバイダー(IdP)設定をアカウント横断で利用できます。同じ IdP(たとえば Okta や Entra ID)をアカウントごとに個別設定する代わりに、ソースアカウントで一度設定し、組織内のほかのアカウントと共有します。
各受信側アカウントには読み取り専用の IdP 接続が作られます。認証は、ソースアカウント内の隠しアプリケーションであるブリッジ経由でソースアカウントに戻ります。エンドユーザーは既存の IdP 認証情報でサインインします。各アカウントの Access ポリシーは、ほかの IdP ログインと同様に、得られた ID を評価します。
IdP フェデレーションの設定は、次の 2 ステップです。
- フェデレーショングラントを作成します。 グラントは、IdP をアカウント横断で共有することを許可します。グラントを作成すると、ソースアカウントに隠しブリッジアプリケーションもプロビジョニングされます。
- グラントを共有します。 特定のアカウント、または組織全体にグラントを配布します。各受信側アカウントには、ブリッジを指す読み取り専用の IdP 接続が自動でプロビジョニングされます。
受信側アカウントのユーザーが認証すると、リクエストはブリッジ経由でソース IdP に送られます。ソース IdP が認証を処理し、得られた ID クレームが受信側アカウントの Access ポリシーに渡されます。
- ソースアカウントで、ソース IdP を編集する権限が必要です。
- Cloudflare Organization のメンバーである必要があります。
- ソースアカウントは、Cloudflare Organization に所属している必要があります。
ダッシュボードでは、グラントの作成と共有を 1 つのフローにまとめています。その IdP にフェデレーショングラントがすでにある場合は再利用します。ない場合は自動で作成します。
- Cloudflare ダッシュボード ↗ で Zero Trust > Integrations > Identity providers を開きます。
- 共有する IdP を探し、三点メニューを選択します。
- Share を選択します。
- IdP を共有する受信側アカウントを選択します。
- 共有設定を確認し、Confirm を選択します。
IdP は、選択したアカウントへ自動で共有されます。各受信側アカウントには、ソースアカウントのブリッジを指す読み取り専用の IdP 接続が作られます。
API で IdP を共有する手順は 2 ステップです。フェデレーショングラントを作成し、特定のアカウントまたは組織全体と共有します。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/idp_federation_grants" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"idp_id": "<IDP_UUID>"
}'応答にはグラントの id が含まれます。次のステップで使います。アカウント内のフェデレーショングラントを一覧するには、次を実行します。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/idp_federation_grants" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"グラントは、特定のアカウント、または Cloudflare Organization 全体と共有できます。recipients 配列では、各受信側を次のいずれかのフィールドで指定します。
recipient_account_id: IdP を 1 つのアカウントと共有します。追加するアカウントごとに、このフィールドを繰り返します。organization_id: Cloudflare Organization 内のすべてのアカウントと IdP を共有します。
受信側ごとに、これらのフィールドはどちらか一方だけを指定します。どちらも指定しない場合、グラントはデフォルトで Organization 全体と共有されます。
特定の 1 つ以上のアカウントとグラントを共有するには、次を実行します。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/shares" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Identity provider: OpenID Connect",
"recipients": [
{
"recipient_account_id": "<RECIPIENT_ACCOUNT_ID>"
}
],
"resources": [
{
"resource_account_id": "<SOURCE_ACCOUNT_ID>",
"resource_id": "<GRANT_ID>",
"resource_type": "idp-federation-grant",
"meta": {}
}
]
}'Organization 内のすべてのアカウントとグラントを共有するには、recipients 配列を Organization ID に置き換えます。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/shares" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Identity provider: OpenID Connect",
"recipients": [
{
"organization_id": "<ORGANIZATION_ID>"
}
],
"resources": [
{
"resource_account_id": "<SOURCE_ACCOUNT_ID>",
"resource_id": "<GRANT_ID>",
"resource_type": "idp-federation-grant",
"meta": {}
}
]
}'各受信側アカウントには、ブリッジを指す読み取り専用の IdP 接続が自動でプロビジョニングされます。Organization と共有すると、Organization 内のすべてのアカウントがこの接続を受け取ります。
IdP の共有を停止するには、フェデレーショングラントと共有(share)の両方を削除します。
ダッシュボードでは、グラントと共有の削除を 1 つのフローで処理します。
- Cloudflare ダッシュボード ↗ で Zero Trust > Integrations > Identity providers を開きます。
- 共有中の IdP を探し、三点メニューを選択します。
- Unshare を選択します。
- 操作を確認します。
API で IdP のフェデレーションを解除する手順は 2 ステップです。グラントを削除すると共有が止まり、受信側アカウントから読み取り専用 IdP が削除されます。その後、共有レコードを任意でクリーンアップできます。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/idp_federation_grants/$GRANT_ID" \
--request DELETE \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/shares/$SHARE_ID" \
--request DELETE \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"- 1 つのアカウントがソースとしてフェデレーションできる IdP は、最大 1 つです。
- フェデレーショングラントが関連付けられているソース IdP は削除できません。先にグラントを削除してください。