Cloudflare Zero TrustとAzure Entra IDを連携する。
Cloudflare Zero Trustのユーザー認証にAzure Entra IDを連携した設定記録です。
2024年4月18日
Cloudflareのユーザー認証を使いやすくする。
Cloudflare Accessはインターネットに公開したアプリケーションへのアクセス前に認証をかけることができます。標準だとメールアドレス認証が用意されていますが、私はMicrosoft 365 Business Standardのライセンスを持っているので、Azure Entra ID(Azure Active Directory)と連携したシングルサインオン(SSO)を導入して、もっと素早くユーザー認証したいと思いました。
手順はCloudflareの公式ページを参考にすすめました。
Azure側のメニューが公式ドキュメントと変わっている部分があるため、少し迷いましたが30分くらいで動作確認できました。ライセンスがある方はぜひお試しください。
Azure Entra ID側の設定
エンタープライズアプリケーション
まずはAzure Entra ID側からの設定です。Azure Entra IDへアクセスして、管理メニューのエンタープライズアプリケーション
に移動します。
続いて、新しいアプリケーションの作成
をクリックします。
ページ切り替わった後でギャラリーを参照する
と表示され、Cloudflareを連携するテンプレートが使えるような選択肢が表示されます。試してみたのですがこちらは機能せず、公式ドキュメント通りに独自のアプリケーションの作成
をクリックして進めるのが正解のようです。操作方法が悪いのかもしれませんが、軽いトラップでした。
次のページでもギャラリーからテンプレートの選択を勧めてきましたが、無視して進みます。アプリの名前は任意にわかりやすい名前を決めて、アプリケーションを登録して、Microsoft Entra IDと統合します
を選択して作成
を押します。
続いて、アプリケーションの登録
ページが表示されます。アプリの表示名は任意に設定できて、Cloudflareの認証ページに表示される文字列になります。
小規模な利用であればこの組織ディレクトリのみに含まれるアカウント
を選択して、リダイレクトURLはまず、Web
を選びます。リダイレクト先URLは画像だと一部を伏せていますが、公式ページの案内では次のようになります。
https://<Zero Trustのチーム名>.cloudflareaccess.com/cdn-cgi/access/callback
ここまで、エンタープライズアプリケーション
メニュー以下の設定は終了です。
アプリの登録
Azure Entra IDの左側メニューからアプリの登録
へ移動します。
すべてのアプリケーション
タブに切り替えると、先ほど作成したエンタープライズアプリケーションが、任意に設定した名前(今回はCloudflare)で表示されます。
表示されたアプリを選択して、次に進みます。
概要ページが表示されると、アプリケーション(クライアント)ID
とディレクトリ(テナント)ID
が確認できます。画像ではセキュリティのため黒塗りにしていますが、本来はアルファベットと数字の文字列が表示されています。こちらをあとでCloudflareに入力するので控えておきます。
そして証明書またはシークレットの作成
リンクを押します。
クライアントシークレット
タブを選択して、新しいクライアントシークレット
を押します。
作成するシークレットの説明と有効期限を決めます。有効期限は3ヵ月から2年まであるようですが、今回は長めにしました。利用環境のセキュリティポリシーに沿って決めてください。
シークレットが作成されると画像のように表示されます。セキュリティののため黒塗りしていますが、値に表示されている文字列をあとでCloudflareに入力するので、これも控えてください。
アプリの権限
作成したアプリにアクセス権を付与します。管理ページのメニューからAPIのアクセス許可
へ移動します。
公式ページを参考にして、次にあげる7つのアクセス権にチェックを付け、アクセス許可の更新
ボタンを押します。
- offline_access
- openid
- profile
- User.Read
- Directory.Read.All
- GroupMember.Read.All
付与するアクセス許可一覧を再度確認して、管理者の同意
リンクボタンを押します。画像ではセキュリティのため一部を黒塗りにしています。押したあとで、再度確認ダイアログが表示されるので同意します。
Cloudflare側の設定
Zero Trustチーム全体の設定
CloudflareでもAzure Entra IDで設定したアプリケーションIDやシークレットを入力して、認証を連携できるようにします。
まずは、チーム全体でEntra IDで認証できるように、Cloudflareの管理ページSetting > Authentication
へ移動します。
移動した後のページで項目Login Methods
があり、すでにOne-time PINが登録されています。右上のAdd New
ボタンを押します。
ページが切り替わって、ID連携先(IdP)一覧が表示されているのでAzure AD
を選択します。
Azure Entra IDの設定で控えた概要ページが表示されると、アプリケーション(クライアント)ID
、ディレクトリ(テナント)ID
そしてクライアントシークレット
を登録するテキストボックスが出てきますので、それぞれ入力します。
その他、オプションでProof Key for Code Exchange(PKCE)
やSystem for Cross-domain Identity Management(SCIM)
を有効にできますが、ここではSupport Group
のみ有効にします。
こちらを有効にするとAzure Entraのグループ情報をCloudflareから利用できるので、特定のグループに属しているユーザーを許可するできるようなります。
最後にTest
ボタンを押してアプリケーションID等の入力が正しいか確認し、正常に動作している場合は画像のようなページが表示されます。
Cloudflare Accessの設定
Cloudflare Accessの各アプリケーションにアクセスポリシーがあり、その設定ページでアクセスを許可するユーザーの認証方法を指定します。デフォルトで用意されているメールによるワンタイムパスワードに加えて、Azure Groups
とAzure OICD Claims
が新たに追加されています。OICD ClaimsはアプリケーションIDなどを入力する際のオプションで無効になっているため、使えませんがグループによる認証は機能しました。
ただし、認証するグループの指定は値にAzure Entra ID内部のオブジェクトIDで指定する必要があります。
グループのオブジェクトIDはAzure Entra IDでグループの概要ページから確認できるアルファベットと数字30文字くらいの文字列です。
ここまででようやくCloudflare Accessの認証ページにAzure Entra IDのオプションが表示されるようになりました。 Entra IDでの認証を選択すると、マイクロソフトの認証ページに移動されて、認証後に戻される動きになります。
まとめ
ID連携の設定はやや大変ですが、メールを使ったワンタイムパスワードより認証プロセスは格段に楽です。とくに常時Entra IDにログインしているのであれば、シームレスにアプリケーションにアクセスできます。 CloudflareとAzureを行ったり来たりすることになりましたが、Cloudflareの管理ページの方が格段にすっきりしていて、分かりやすいですね。