LoginSignup
1
1

Cloudflare Zero Trust の ID 認証先に Amazon Cognito を OIDC で連携する

Last updated at Posted at 2024-04-12

目的

例えば、セルフホストアプリに対して認証をかけたいときに、Cloudflare に登録された公開ドメインを使って、以下のような構成を組むことができます。
Cloudflare Zero Trust では ID 認証先に OIDC や SAML 2.0 で複数登録し、アプリごとに使い分けたり、IP コンテキストやデバイスポスチャ等の他の要素を組み合わせて、アクセスポリシーを制御できます。
今回はこのようなユースケースを想定し、Cloudflare Zero Trust の ID 認証先に Amazon Cognito を OIDC で連携します。

Amazon Cognito ユーザープール作成

以下の流れで Amazon Cognito ユーザープールを作成します。

image.png

ユーザープールでの認証を使用します。

image.png

image.png

セキュリティ要件は適当に設定します。

image.png
image.png

サインアップ体験は「Enable self-registration」を無効にして、管理者がユーザー作成する形式にします。

image.png
image.png
image.png

メール配信設定は「Send email with Cognito」にします。

image.png

「Use the Cognito Hosted UI」をチェックします。
ドメインタイプは「Use a Cognito domain」を選択し、任意の「Cognito domain」を指定します。

image.png

アプリクライアント設定では「Confidential client」とし、「Generate a client secret」でシークレット生成します。
「Allowed callback URLs」は https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback を設定します。

  • What’s a team domain/team name? · Cloudflare Zero Trust docs
    チームドメインは、Cloudflareアカウントに割り当てられた一意のサブドメインです。例えば、<your-team-name>.cloudflareaccess.com のようになります。チームドメインの設定は、Zero Trustの設定において不可欠なステップです。ここでユーザはCloudflare Zero Trustで保護されたアプリを見つけ(App Launcherに表示されます)、それらにログイン要求することができます。チームドメインのカスタマイズ可能な部分はチーム名と呼ばれます。チーム名とチームドメインは、Zero TrustのSettings(設定)> Custom Pages(カスタムページ)で確認できます。
team name team domain
your-team-name <your-team-name>.cloudflareaccess.com

image.png

「Advanced app client settings」で OpenID Connect scopes 設定を OpenIDEmailProfile を設定します。
「Allowed sign-out URLs」は https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/logout を設定します。

image.png
image.png

これで AWS Cognito ユーザープール作成は完了です。

Cognito ユーザープールでユーザー作成

テストログインに使う適当なユーザーを作成します。

image.png

Cloudflare Zero Trust の ID 認証先に Amazon Cognito を OIDC で連携

以下のリファレンスと設定画面を参照し、必要な情報を集めます。

Cloudflare Zero Trust
での設定項目
App (Client) ID 4u2loooooooooo
Client Secret xxxxxxxxxxxxxxxx
Auth URL https://<Your user pool domain>/oauth2/authorize
Token URL https://<Your user pool domain>/oauth2/token
Certificate (key) URL https://cognito-idp.<Region>.amazonaws.com/<your user pool ID>/.well-known/jwks.json

生成された App (Client) ID と Client Secret は以下の画面から確認できます。

image.png

Certificate (key) URL は以下の画面からも確認できます。

image.png

集めた情報を Cloudflare Zero Trust で設定します。

Settings > Authentication > Login methods >Add new > OpenID Connect から Amazon Cognito を OIDC 連携先として追加します。

image.png

接続テスト

以下の画面から「Test」をクリックすると、ログインフローをテストできます。

image.png

ユーザープール内に作成したユーザーの認証情報を使ってサインインします。

image.png

管理者でユーザー作成したため、初回ログイン時はユーザー側でパスワード変更を求められます。

image.png

これで問題なく Cloudflare Zero Trust の ID 認証先に AWS Cognito を OIDC で連携できました。

image.png

Custom Claims を使ったユーザー属性情報の連携

上記の単純な連携設定だと ID トークン内の email 属性情報のみが連携されて、ポリシー評価に使用できる形です。
他にも以下の ID トークンに含まれる属性情報をフィールドを指定して引っ張ってくることで、Cloudflare Zero Trust でのポリシー評価に使用できます。

  • sub
    • 認証されたユーザーの固有識別子 (UID) または件名。ユーザー名はユーザープール内で一意ではない可能性があります。sub クレームは、特定のユーザーを識別する最良の方法です。
  • cognito:groups
    • ユーザーをメンバーとするユーザープールグループの名前の配列。グループは、アプリに提示する識別子として使用したり、アイデンティティプールへの優先 IAM ロールのリクエストの生成に使用したりできます。
  • cognito:username
    • ユーザープール内のユーザーのユーザー名。

ユーザーに標準属性を追加

例えば「Edit user > Add attribute」から標準属性 name を追加できます。

image.png

ユーザーをグループに追加

ユーザープールにグループを作成します。

image.png

その後、ユーザーをグループメンバーに追加します。

image.png
image.png

Cloudflare Zero Trust で Custom Claims を設定

Cloudflare Zero Trust で先ほど OIDC 連携した AWS Cognito の認証先情報でオプション設定を追加します。

OIDCクレーム
OIDC統合はカスタムOIDCクレームの使用をサポートします。カスタムOIDCクレームはアクセスポリシーで参照することができ、特定の属性に基づいてユーザーアクセスを制御する手段を提供します。カスタムOIDCクレームは、現在ゲートウェイポリシーではサポートされていません。

image.png

「Save」した後、「Test」します。
先ほどと比べて新しく oidc_fields として Custom Claims で指定した属性情報を取得できました。

image.png

この情報は Access ポリシーの OIDC Claim セレクタで使用できます。

image.png

2024年4月現在、カスタムOIDCクレームは、Gateway ポリシーではサポートされていません。

【参考】セルフホストアプリへのアクセス

以下の手順で、Cloudflare に登録された公開ドメインを使ったセルフホストアプリに対して、Amazon Cognito を ID 認証先としたアクセスポリシー制御をかけることができます。

image.png

image.png

セルフホストアプリのオリジンには、以下のような Cookie やトークン情報がヘッダとして送られ、トークン検証等に活用することができます。

image.png

まとめ

手軽にユーザープールを作って、外部向けサイトに認証機構をかける組み合わせとしては、よく使われる可能性があるかなと思います。

外部 ID プールも連携できるため、様々な連携方式が考えられるとともに、Cloudflare Zero Trust の機能も活用できると幅広い ID コンテキストに対してゼロトラストなセキュリティを構成できるため、これだけ使いやすい Cloudflare もおすすめです。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1