Cloudflare Zero Trustの認証にAWS IAM Identity Center(AWS SSO)を使う

2023/02/15に公開

はじめに

AWS IAM Identity Center(旧称:AWS SSO)をCloudflare Zero Trustのユーザ認証に設定しました。今回はAWSをIdPとしてCloudflare側にログインをしていますが、設定次第ではCloudflare側をIdPとしてAWSにログインなんかもできます。
n番煎じかつ旬を過ぎたネタですが、AWS IAM Identity Centerは情報も少なかったり、いまいち使いづらかったりするのでメモがてら。結局一番少ない設定で通ったのであまり複雑なこともありません。

AWS IAM Identity Center(旧称:AWS SSO)

AWS IAM Identity Centerを利用することでOrganizations内のAWSアカウント環境へのログインやアプリケーションの割り当ての設定を行うことでSAMLでのSSOを行うことができます。
なお、OpenID Connectを利用したい場合にはAWS IAM Identity Centerではできないので、Cognitoを併用する必要があります。

AWSによって準備されている事前統合アプリケーションに使いたいアプリケーションが簡単に設定ができるかもしれませんが、今回のCloudflare Zero Trustはリストにはありませんでした。SAMLに必要なパラメータをAWS・Cloudflareの両方に設定する必要があります。

AWS IAM Identity Center での作業1

アプリケーションを追加

AWS IAM Identity Center/アプリケーションを開き、アプリケーションを追加する。
アプリケーション

カスタムSAML2.0アプリケーションを追加

カスタムSAML2.0アプリケーションを選択して次へ
アプリケーションを追加

アプリケーションを設定から表示名と説明を入力する
ここで入力された名前がIAM Identity Centerのログイン画面で表示される
アプリケーションを設定

IAM Identity Center メタデータに1つのメタデータファイルと3つのURL、証明書のpemファイルがCloudflare側に設定するメタデータになります。
Cloudflare Zero Trustではメタデータファイル(XMLファイル)
IAM Identity Center メタデータ

アプリケーションメタデータはIAM Identity Centerに登録する、Cloudflare Zero Trustの情報になります。平行作業で互いの情報を入力することになりますが、ここではいったん仮の値を入力します。
※次の属性マッピングを先に確認しておいたほうが、Cloudflare Zero Trust側の作業がやりやすいので。
アプリケーションメタデータ

詳細の右側のアクションから属性マッピングを確認します。
属性マッピング

属性マッピングにより、IAM Identity Centerで保持しているユーザー情報をアプリケーションに渡すことができます。
IAM Identity Centerのユーザーのメールアドレスは${user:email}となります。Cloudflare側はSubjectでメールアドレス情報を受け取ります。
ほかの属性マッピングは公式ドキュメントを参照。
ここでいろいろ試したのですが、結局画像の通りのパターンでしかTestを通過することができませんでした。。

属性マッピング

続いて、このアプリケーションを利用できるユーザーを割り当てます。
ユーザーかグループから対象を選択してアプリケーションを割り当てます。
私の場合は、このAWS環境を一人で利用しているので、ざっくりSAML用のExternalApplicationグループを一つ作成し、アプリケーションはこれを登録するようにしています。
ユーザーを割り当て

Cloudflare Zero Trust での作業1

Cloudflare Zero TrustのダッシュボードからSettingsの中にあるAuthenticationを開き、Login methodsからAdd newで新しい認証設定を行います。
Authentication

Select an identity providerよりSAMLを選択
Select an identity provider

ここでIAM Identity Centerからダウンロードしたメタデータファイルを点線で囲われた場所にドラッグ&ドロップするとファイルから情報を読み取って必要な情報を埋めてくれます。
Add SAML1

Emailの属性はIAM Identity Centerの属性マッピングで確認した通り、Subjectに入っています。
Sign SAML authentication requestはSAMLの検証をしてくれるような機能に見えるのですが、AWS側では特に設定がないため動いているのかどうかが不明です。お守り代わりにEnabledにしています。
Add SAML2

いったんSaveして、今度はAWS側に投入するCloudflare側の情報を確認します。

設定画面右側の1. Create an application in your identity providerにIdP側に登録する情報が記載されています。
Cloudflare Zero Trustの場合は、Entity/Issuer IDSingle sign-on URLhttps://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callbackとなっています。
1. Create an application in your identity provider

AWS IAM Identity Center での作業2

各入力欄に自身のチーム名に差し替えたhttps://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callbackを入力します。
アプリケーションメタデータ

Cloudflare Zero Trust での作業2

再度、Cloudflareに戻り、Testボタンを押すことで確認ができます。
emailに自身のメールアドレスがはいっていることを確認してください。いろいろいじってたときに何も情報がはいってないのに認証が成功していることになっていたことがありました。

Add SAML2

Test

AWS IAM Identity Centerの情報でCloudflare Zero Trustにログインできるようになりました!

おわりに

Cloudflare Zero TrustへのログインにAWS IAM Identity Centerを利用してみました。
IdPであるOktaに比べ、操作感や設定できる項目が少ないのである程度の試行錯誤が必要だと思います。
OktaなどのIdPを契約したほうが困ることは少ないと思いますが、無料で利用できるIdPの選択肢の一つとして利用できるかと思います。
(本当は別のIdPを利用してCloudflare Zero Trustにログイン、そこからAWSにSAMLログインなんかが実現したかった。)

Discussion