Microsoft Entra ID(旧称 Azure Active Directory)を Cloudflare One に連携し、ユーザー ID とグループ所属に基づくポリシーを作成できます。ユーザーは Entra ID の資格情報で Cloudflare One に認証します。
連携の設定には、次の Entra ID の値が必要です。
- Application (client) ID
- Directory (tenant) ID
- Client secret
これらの値を取得するには:
-
Microsoft Entra admin center ↗ にログインします。
-
Applications > Enterprise applications を開きます。
-
New application を選び、Create your own application を選択します。
-
アプリケーションに名前を付けます。
-
Register an application to integrate with Microsoft Entra ID (App you're developing) を選択します。ギャラリーアプリの選択肢が出ても選びません。Create を選択します。
-
Redirect URI で Web プラットフォームを選び、次の URL を入力します。
https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callbackチーム名は、Cloudflare ダッシュボード ↗ の Settings > Team name and domain > Team name で確認できます。
-
Register を選択します。
-
次に Microsoft Entra ID に戻り、Applications > App registrations を開きます。
-
All applications を開き、作成したアプリを選択します。Application (client) ID と Directory (tenant) ID をコピーします。ステップ 3 で Entra ID をアイデンティティプロバイダーとして追加する ときに使います。
-
同じページの Client credentials で Add a certificate or secret を開きます。New client secret を選択します。
-
クライアントシークレットに名前を付け、有効期限を選びます。
-
クライアントシークレットを作成したら、Value をコピーします。作成直後にしか表示されないため、安全な場所に保管します。ステップ 3 で Entra ID をアイデンティティプロバイダーとして追加する ときに、このクライアントシークレットの値が必要です。
-
App registrations > All applications を開き、対象のアプリケーションを選び、API permissions を開きます。
-
Add a permission を選択します。
-
Microsoft Graph を選択します。
-
Delegated permissions を選び、次の 権限 ↗ を有効にします。
emailoffline_accessopenidprofileUser.ReadDirectory.Read.AllGroupMember.Read.All
-
7 つの権限をすべて有効にしたら、Add permissions を選択します。
-
Grant admin consent を選択します。
-
Cloudflare ダッシュボード ↗ で Zero Trust > Integrations > Identity providers を開きます。
-
Your identity providers で Add new identity provider を選択します。
-
Azure AD を選択します。
-
Microsoft Entra ID で取得した Application (client) ID、Client secret、Directory (tenant) ID を入力します。
-
Save を選択します。
-
接続を テスト するには、Test を選択します。
-
(任意)次の設定を行います。
- Proof Key for Code Exchange: すべてのログイン試行で PKCE ↗ を実行します。
- Support Groups: Cloudflare がユーザーの Entra ID グループ所属を読み取れるようにします。
- Entra ID Policy Sync: Entra ID Conditional Access のチュートリアル を参照してください。
- Enable SCIM: ユーザーとグループを同期する を参照してください。
- Email claim: ユーザー識別に使う Entra ID のクレームを入力します(例:
preferred_username)。 - OIDC Claims: ユーザーの ID に追加したい カスタム OIDC クレーム を入力します。
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": "Entra ID example",
"type": "azureAD",
"config": {
"client_id": "<your client id>",
"client_secret": "<your client secret>",
"directory_id": "<your azure directory uuid>",
"support_groups": true
}
}'-
cloudflare_api_token↗ に次の権限を追加します。Access: Organizations, Identity Providers, and Groups Write
-
cloudflare_zero_trust_access_identity_provider↗ リソースを設定します。resource "cloudflare_zero_trust_access_identity_provider" "microsoft_entra_id" { account_id = var.cloudflare_account_id name = "Entra ID example" type = "azureAD" config = { client_id = var.entra_id_client_id client_secret = var.entra_id_client_secret directory_id = var.entra_id_directory_id support_groups = true } }
組織の UPN とユーザーのメールアドレスが一致しない場合は、メール用のカスタムクレームを追加する必要があります。たとえば、メール形式が user@domain.com で UPN が u908080@domain.com の場合、メールベースのポリシーを設定するならメールクレームを作成します。
デフォルトでは、Cloudflare はまず、メールを表すために Cloudflare One で作成・設定した一意のクレーム名(例: email_identifier)を id_token の JSON レスポンスから探します。一意のクレーム名を設定していない場合は、次に email クレームを探します。どちらもなければ、最後に UPN クレームを探します。
Microsoft Entra の id_token でメールクレームを受け取るには:
-
Microsoft Entra admin center ↗ で Application > App registration > All applications を開き、対象のアプリケーションを選択します。
-
Manage で Token configuration を選択します。
-
メール用のクレームを追加します。
上の例には UPN クレームとメールクレームの両方があります。Microsoft Entra の設定でメールクレームを作成したため、Cloudflare は JSON レスポンス内の
emailキーと値のペアを探します。 -
メールクレームに
email以外の名前を付けた場合は、Cloudflare One の設定も更新します。a. Cloudflare ダッシュボード ↗ で Zero Trust > Integrations > Identity providers > Azure AD > Edit を開きます。
b. Optional configurations > Email claim に、組織のメールアドレスを表すクレーム名を入力します。
ユーザーのメールや UPN が変わる可能性がある場合は、Microsoft Entra のユーザー Object ID(oid)を Cloudflare Access に渡せます。Access が Object ID を受け取る設定は、カスタム OIDC クレーム を参照してください。Microsoft Entra 側の追加設定は不要です。
Microsoft Entra ID 連携では、SCIM を使って IdP グループを同期し、ユーザーを自動デプロビジョニングできます。
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 を使います。
- Microsoft Entra ID P1 または P2 ライセンス
-
Cloudflare ダッシュボード ↗ で Zero Trust > Integrations > Identity providers を開きます。
-
Entra ID 連携を探し、Edit を選択します。
-
Enable SCIM と Support groups をオンにします。
-
(任意)次の設定を行います。
- Enable user deprovisioning: Entra ID の SCIM アプリケーションからユーザーが削除されたときに、ユーザーのアクティブセッションを取り消します。アクティブな Access セッションはすべて無効になり、Cloudflare One Client のセッションポリシー では再認証が求められます。
- Remove user seat on deprovision: Entra ID の SCIM アプリケーションからユーザーが削除されたときに、Cloudflare One アカウントから ユーザーのシートを削除します。
- SCIM identity update behavior: Entra ID でユーザーの ID が更新されたときの、Cloudflare One 側の動作を選びます。
- Automatic identity updates: Entra ID が SCIM 経由で更新された ID またはグループ所属を送ると、User Registry の ID を自動更新します。この ID は Gateway ポリシーと Cloudflare One Client の デバイスプロファイル に使われます。Access は再認証時に更新後の ID を読み取ります。
- Group membership change reauthentication: Entra ID でグループ所属が変わったときに、ユーザーのアクティブセッションを取り消します。アクティブな Access セッションはすべて無効になり、Cloudflare One Client のセッションポリシー では再認証が求められます。Access は再認証時に更新後のグループ所属を読み取ります。
- No action: 次回、Access または Cloudflare One Client に再認証したときにユーザーの ID を更新します。
-
Regenerate Secret を選択します。SCIM Endpoint と SCIM Secret をコピーします。これらの値を Entra ID に入力します。
-
Save を選択します。
SCIM シークレットに有効期限はありません。ただし、いつでも手動で再生成できます。
-
Microsoft Entra ID のメニューで Enterprise applications を開きます。
-
New application > Create your own application を選択します。
-
アプリケーションに名前を付けます(例:
Cloudflare Access SCIM)。 -
Integrate any other application you don't find in the gallery (Non-gallery) を選択します。ギャラリーアプリの選択肢が出ても選びません。Create を選択します。
-
アプリケーション作成後、Provisioning を開き、New Configuration を選択します。
-
Tenant URL に、前のステップ で Cloudflare One の Entra ID 連携から取得した SCIM Endpoint を入力します。
-
Secret token に、前のステップ で Cloudflare One の Entra ID 連携から取得した SCIM Secret を入力します。
-
Test Connection を選び、資格情報が正しく入力されていることを確認します。テストが失敗した場合は、Cloudflare One の Entra ID 連携で Regenerate Secret を選び、Save したうえで、新しい SCIM Secret を Secret token に入力します。
-
Create を選択します。
-
SCIM アプリケーションを作成したら、アプリケーションにユーザーとグループを割り当てます ↗。
-
Provisioning を開き、Start provisioning を選択します。
-
Provisioning Mode は、Microsoft 側のデフォルトで Automatic になっているはずです。
-
Entra ID の Overview ページで、同期ステータスを確認できます。
同期されたユーザーとグループを確認するには、Provisioning logs を選択します。
Cloudflare One でユーザー ID が更新されたかを確認するには、SCIM プロビジョニングログ を表示します。
Cloudflare Access と Microsoft Entra ID の間でやり取りされる ID 情報を監視するには、Cloudflare ダッシュボード ↗ > Zero Trust > Insights > Logs > SCIM provisioning logs を開き、SCIM アクティビティログ を確認します。
プロビジョニング属性は、Entra ID が Cloudflare Access と同期するユーザープロパティを定義します。プロビジョニング属性を変更するには、Attribute mapping を開き、Provision Microsoft Entra ID Users を選択します。
未設定の場合は、次のユーザー属性マッピングを有効にすることをおすすめします。
| customappsso Attribute | Entra ID Attribute | 推奨 |
|---|---|---|
userName |
userPrincipalName または mail |
必須。Cloudflare One 上のユーザーのメールアドレスと一致させてください。 |
emails[type eq "work"].value |
mail |
必須。Cloudflare One 上のユーザーのメールアドレスと一致させてください。 |
name.givenName |
givenName |
推奨 |
name.familyName |
surname |
推奨 |
SCIM 同期が有効 な場合、Entra グループ名が Access と Gateway のポリシービルダーに自動表示されます。
Access ポリシーを作る場合は、Azure Groups セレクターを選びます。

Gateway ポリシーを作る場合は、User Group Names セレクターを選びます。
SCIM で同期していないグループでも、Access と Gateway のポリシーを作成できます。Entra ID はディレクトリグループを、Name とは別のランダムな文字列である Object Id の形式で公開します。
-
Cloudflare One で Microsoft Entra ID を設定するときに、Support groups を有効にします。
-
Microsoft Entra ダッシュボードで、対象の Entra グループの
Object Idを控えます。次の例では、Admins というグループの ID は61503835-b6fe-4630-af88-de551dd59a2です。
-
Access ポリシーを作る場合は Azure Groups セレクターを選びます。Gateway ポリシーを作る場合は User Group IDs セレクターを選びます。
-
Value に、Entra グループの
Object Idを入力します。
Entra グループ向けの Access および Gateway ポリシーは、すべての 入れ子グループ ↗ にも適用されます。たとえば、ユーザーが US devs に所属し、US devs がより広いグループ Devs の一部である場合、そのユーザーは Devs 向けに作成したすべてのポリシーで許可またはブロックされます。
SCIM プロビジョニングでは、入れ子グループはサポートされません ↗。Microsoft Entra ID の SCIM 実装は、入れ子グループの所属情報を Cloudflare に送りません。明示的に割り当てたグループの直接メンバーだけがプロビジョニングされます。グループ所属を正しく同期するには、プロビジョニングしたいグループにユーザーを直接割り当てて、Entra ID 側でグループをフラット化してください。
Microsoft からの SCIM リクエストに入れ子グループの情報が含まれないため、Cloudflare も Microsoft も、入れ子グループが同期されていないことを通知できません。
ユーザーが Cloudflare One Client のセッションを再認証する たびに、Entra ID への資格情報の再入力を必須にできます。この設定をするには:
-
Identity Providers エンドポイント に
GETリクエストを送り、Entra ID アイデンティティプロバイダーのレスポンスをコピーします。
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups WriteAccess: Organizations, Identity Providers, and Groups Read
Get an Access identity providerbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/identity_providers/$IDENTITY_PROVIDER_ID" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" -
PUTリクエストで Entra ID アイデンティティプロバイダーを更新 します。リクエスト本文には既存の設定をすべて含め、promptパラメーターをloginまたはselect_accountに設定します。例:
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups Write
Update an Access identity providerbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/identity_providers/$IDENTITY_PROVIDER_ID" \ --request PUT \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415", "type": "azureAD", "uid": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415", "name": "Entra ID", "version": "31e74e9b4f033e16b604552091a72295", "config": { "azure_cloud": "default", "client_id": "<CLIENT_ID>", "conditional_access_enabled": false, "directory_id": "<AZURE_DIRECTORY_ID>", "redirect_url": "https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/callback", "prompt": "login", "support_groups": true }, "scim_config": { "enabled": true, "user_deprovision": true, "seat_deprovision": false, "group_member_deprovision": false, "identity_update_behavior": "automatic" }, "scim_base_url": "https://<TEAM_NAME>.cloudflareaccess.com/populations/f174e90a-fafe-4643-bbbc-4a0ed4fc8415/scim/v2" }'