Cloudflare Zero TrustとAzure Entra IDを連携する。

Cloudflare Zero TrustとAzure Entra IDを連携する。

Cloudflare Zero Trustのユーザー認証にAzure Entra IDを連携した設定記録です。

2024年4月18日

CloudflareゼロトラストAzureEntraID

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のアクセス許可へ移動します。

APIのアクセス許可

公式ページを参考にして、次にあげる7つのアクセス権にチェックを付け、アクセス許可の更新ボタンを押します。

  • email
  • offline_access
  • openid
  • profile
  • User.Read
  • Directory.Read.All
  • GroupMember.Read.All

APIのアクセス詳細

付与するアクセス許可一覧を再度確認して、管理者の同意リンクボタンを押します。画像ではセキュリティのため一部を黒塗りにしています。押したあとで、再度確認ダイアログが表示されるので同意します。

管理者の同意

Cloudflare側の設定

Zero Trustチーム全体の設定

CloudflareでもAzure Entra IDで設定したアプリケーションIDやシークレットを入力して、認証を連携できるようにします。 まずは、チーム全体でEntra IDで認証できるように、Cloudflareの管理ページSetting > Authenticationへ移動します。

Zero Trust 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から利用できるので、特定のグループに属しているユーザーを許可するできるようなります。

アプリケーションIDなどの入力

最後にTestボタンを押してアプリケーションID等の入力が正しいか確認し、正常に動作している場合は画像のようなページが表示されます。

Entra ID連携のテスト

Cloudflare Accessの設定

Cloudflare Accessの各アプリケーションにアクセスポリシーがあり、その設定ページでアクセスを許可するユーザーの認証方法を指定します。デフォルトで用意されているメールによるワンタイムパスワードに加えて、Azure GroupsAzure OICD Claimsが新たに追加されています。OICD ClaimsはアプリケーションIDなどを入力する際のオプションで無効になっているため、使えませんがグループによる認証は機能しました。

ただし、認証するグループの指定は値にAzure Entra ID内部のオブジェクトIDで指定する必要があります。

Azure Entra Groupの登録

グループのオブジェクトIDはAzure Entra IDでグループの概要ページから確認できるアルファベットと数字30文字くらいの文字列です。

Azure Entra Groupの登録

ここまででようやくCloudflare Accessの認証ページにAzure Entra IDのオプションが表示されるようになりました。 Entra IDでの認証を選択すると、マイクロソフトの認証ページに移動されて、認証後に戻される動きになります。

Cloudflare Accessの認証ページ

まとめ

ID連携の設定はやや大変ですが、メールを使ったワンタイムパスワードより認証プロセスは格段に楽です。とくに常時Entra IDにログインしているのであれば、シームレスにアプリケーションにアクセスできます。 CloudflareとAzureを行ったり来たりすることになりましたが、Cloudflareの管理ページの方が格段にすっきりしていて、分かりやすいですね。