Cloudflare Zero Trustの認証にAWS IAM Identity Center(AWS SSO)を使う
はじめに
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に登録する、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で新しい認証設定を行います。
Select an identity providerよりSAMLを選択
ここでIAM Identity Centerからダウンロードしたメタデータファイルを点線で囲われた場所にドラッグ&ドロップするとファイルから情報を読み取って必要な情報を埋めてくれます。
Emailの属性はIAM Identity Centerの属性マッピングで確認した通り、Subject
に入っています。
Sign SAML authentication requestはSAMLの検証をしてくれるような機能に見えるのですが、AWS側では特に設定がないため動いているのかどうかが不明です。お守り代わりにEnabledにしています。
いったんSave
して、今度はAWS側に投入するCloudflare側の情報を確認します。
設定画面右側の1. Create an application in your identity providerにIdP側に登録する情報が記載されています。
Cloudflare Zero Trustの場合は、Entity/Issuer IDとSingle sign-on URLがhttps://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback
となっています。
AWS IAM Identity Center での作業2
各入力欄に自身のチーム名に差し替えたhttps://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback
を入力します。
Cloudflare Zero Trust での作業2
再度、Cloudflareに戻り、Testボタンを押すことで確認ができます。
emailに自身のメールアドレスがはいっていることを確認してください。いろいろいじってたときに何も情報がはいってないのに認証が成功していることになっていたことがありました。
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