Cloudflare Zero Trust と Microsoft Entra ID を SCIM 連携した場合のトラブルシューティング

# 目的

Cloudflare Zero Trust と Microsoft Entra ID を SCIM 連携した場合のトラブルシューティングについて、確認します。

SCIM については、以下のブログで簡潔にまとめられていてわかりやすいです。
（[RFC 7644 - System for Cross-domain Identity Management: Protocol](https://datatracker.ietf.org/doc/html/rfc7644)）
 
> - [SCIM連携ができるまで - Cybozu Inside Out | サイボウズエンジニアのブログ](https://blog.cybozu.io/entry/2023/08/21/080000)
>
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/6052b835-3872-a0e8-d47d-41e1524fa6c3.png)

# 前提情報
## Cloudflare Zero Trust の SCIM サポート
Cloudflare Zero Trust では、Microsoft Entra ID に限らず、SAML および OIDC ID プロバイダーに対して広く SCIM をサポートしています。

https://developers.cloudflare.com/cloudflare-one/identity/users/scim/

>**サポートされるIDプロバイダー**
Cloudflare Zero Trust は、SCIMバージョン2.0を使用するすべてのSAMLおよびOIDC IDプロバイダーのSCIMプロビジョニングをサポートしています。
>
>**Zero Trustポリシーのユーザーとグループの同期**
Cloudflare Zero Trust は、IDプロバイダーで無効化されたユーザーをZero Trustから自動的にデプロビジョニングし、AccessおよびGatewayポリシービルダーで同期されたグループ名を表示できます。ユーザーはまずWARPクライアントでデバイスを登録するか、Accessアプリケーションで認証する必要があります。

## Microsoft Entra ID との SSO / SCIM 連携
以下のドキュメントに記載の手順で設定できます。

https://developers.cloudflare.com/cloudflare-one/identity/idp-integration/entra-id/

```mermaid
graph LR

subgraph Cloudflare Zero Trust
    Team["`team-name`"]
subgraph Entra [Entra ID config]
    SCIMEnd[SCIM Endpoint]
    SCIMSec[SCIM Secret]
end
id[User Registry identity]
log[Audit logs]
end

subgraph Microsoft Entra ID
subgraph ug [ ]
User
Group
end
subgraph EntAppSCIM ["Enterprise App (SCIM)"]
subgraph Provisioning config
    TenantURL[Tenant URL]
    SecretToken[Secret Token]
end
Provisioning["Provisioning"]
log2[Provisioning logs]
end
subgraph EntAppSSO ["Enterprise App (SSO)"]
    Redirect[Redirect URI]
    AppID[Application ID]
    AppSec[Application secret]
    DirID[Directory ID]
end
EntAppSCIM & EntAppSSO <-.-> |Assign|ug
end

Team --> Redirect
Entra ~~~ AppID & AppSec & DirID --> Entra
AppID & AppSec & DirID ~~~ Entra

SCIMEnd ---> TenantURL
SCIMSec ---> SecretToken


id ~~~ Provisioning --> |Automatic<br>or<br>On demand|id
Provisioning ~~~ id

log ~~~ log2
```

# トラブルシューティングのためのチェックポイント
Microsoft Entra ID 側でユーザ・グループ情報を変更したのに `User Registry identity` に反映されない...という場合は以下の点について確認します。

## アプリケーションへのユーザーとグループの割り当てを確認する
SCIM 連携用の Enterprise Application に対象のユーザ・グループがアサインされているか確認してください。

SSO 連携用の Enterprise Application も同様のユーザ・グループがアサインされているか確認してください。

https://learn.microsoft.com/ja-jp/entra/identity/enterprise-apps/assign-user-or-group-access-portal?pivots=portal

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/32141af9-f5d5-7efd-f2a3-24f57c82358e.png)

## オンデマンドでプロビジョニングする
個別のユーザ・グループを対象に、手動でオンデマンドでプロビジョニングすることで情報がすぐに反映されるかを確認できます。

https://learn.microsoft.com/ja-jp/entra/identity/app-provisioning/provision-on-demand?pivots=app-provisioning

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/bd86adb3-4693-bde4-5cc1-002d1e10128a.png)

## プロビジョニングログを確認する
Microsoft Entra ID でプロビジョニングログを確認できます。

https://learn.microsoft.com/ja-jp/entra/identity/monitoring-health/concept-provisioning-logs?context=azure%2Factive-directory%2Fmanage-apps%2Fcontext%2Fmanage-apps-context

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/7ab509cd-d14f-4d6f-6c02-6979b5309386.png)

Cloudflare Zero Trust 側では、`Users > user's name > User Registry identity > Audit logs` のタブから以下のようなログが確認できます。

>- [User logs · Cloudflare Zero Trust docs](https://developers.cloudflare.com/cloudflare-one/insights/logs/users/)
>
>User Registry identity: Select the user's name to view their last seen identity. This identity is used to evaluate Gateway policies and WARP device profiles. A refresh occurs when the user re-authenticates WARP, logs into an Access application, or has their IdP group membership updated via SCIM provisioning. To track how the user's identity has changed over time, go to the Audit logs tab.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/1858a272-c6d0-c248-69ef-b1ea5498c029.png)

## 40分以上待つ
実は Microsoft Entra ID の場合、自動でプロビジョニングされるサイクルのインターバルが **40 分**で固定となっています。

そのため、反映に最大40分かかる仕様となっています。　自動で反映されるまで、40分以上待ちましょう。

> - [Provisioning interval(fixed): 40 minutes - can I change the time setting? - Microsoft Q&A](https://learn.microsoft.com/en-us/answers/questions/902409/provisioning-interval(fixed)-40-minutes-can-i-chan)
> 
> No, this is a fixed time and cannot be changed. Ran into this before and this was the answer provided by Microsoft Support. If you look carefully in the provisioning blade it also mentions this number is ‘fixed’.

> - [Enterprise Application Provisioning Interval (SCIM) to Realtime from 40 mins - Microsoft Q&A](https://learn.microsoft.com/en-us/answers/questions/969419/enterprise-application-provisioning-interval-(scim))
>
> Currently, it's not possible to reduce the provisioning interval from 40 mins.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/a7ec5bbe-e34e-644b-cf01-45523f34499e.png)


# まとめ
Cloudflare Zero Trust と Microsoft Entra ID を SCIM 連携した場合のトラブルシューティングについて、整理することができました。

Microsoft Entra ID との連携に関しては、以下の参考記事も載せておきます。

https://qiita.com/khayama/items/ee71031f366216e13257

https://qiita.com/khayama/items/c045723728e127e2874f