🌀

AWS IAM Identity Center(AWS SSO)の認証にOkta連携したCloudflare Zero Trustを使う

2023/03/01に公開

Cloudflare Zero Trust

CloudflareのZero TrustにはSSO Integrationと呼ばれる機能があり、CloudflareがIdPプロキシのように振る舞うことで複数のIdPを統合できる機能があります。これに、同じくZero TrustのAccess (ZTNA: Zero Trust Network Access)を組み合わせると、SaaSやアプリはCloudflareとSSO連携するだけで、実際の認証はCloudflareに登録しておいた様々なIdPを利用するといったことができるようになります。グダグダ書くより、下記の図を見ていただくのが早いと思います。

やったこと

今回は下図の通り、CloudflareにOktaを登録して、CloudflareをAWS IAM Identity Center(旧AWS SSO)のアインデンティソースとして使用するように設定してみました。IAM Identity Centerでログインしようとすると、Cloudflare経由でOktaに遷移し、ユーザ認証が行われる形になります。
Overview
IAM Identity Centerは3種類のアイデンティティソース(Identity Centerディレクトリ、Active Directory、外部IdP)をサポートしていますが、ひとつしか選択できません。IAM Identity CenterはAWS Organizationsで管理しているアカウント全てに影響することもあり、面倒ですが検証用に別アカウントを用意して挑みました。

やりたかったこと

別垢まで用意してやるモチベーションは、AWS IAM Identity CenterやSSOできればIdPがOktaでなくてもよいアプリ・SaaSをCloudflareに移して、Oktaでアクティブにできるアプリケーションを増やそうというセコイ話です。
Okta Developer Editionは開発用途であればほぼ全ての機能を無料で使える素晴らしいプランなのですが、MAUやレートリミット等のクオータ系の制限があります。開発や通常の検証でこれらがネックになることはあまりないのですが、アクティブにできるアプリケーションが最大5個までという制限があり、色々検証してると5個なんてあっと言う間なんですよね…。とはいえ、無効化したアプリケーション数の制限に遭遇したことはなく、アプリケーションを削除して再設定しなくても有効・無効を切り替えてやりくりできるので良心的ではあります。ちなみに、Cloudflareのfreeプランは利用できるユーザ数が50人等の制限はありますが、ざっと調べた感じでは連携可能数に関する記載は見当たらず上限不明です。

設定手順

Step #1: Oktaの設定 - Cloudfalre用App連携の作成

  1. OktaのAdmin Consoleにログインして、メニューから"Applications"を選択します。登録済のApplicationの一覧が表示されるので、"Create App Integration"を選択します。
    Okta - Applications

  2. Sign-in methodはCloudflareのデフォルトがOpenID Connect (OIDC) だったので、今回は"OIDC - OpenID Connect"を選択します。Application typeは"Web Application"を選択します。
    Okta - Create a new app integration

  3. "App integration name"に好きな名前を、"Sign-in redirect URIs"にhttps://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callbackを設定します。"Grant type"は"Authorization Code"のみでOKです。"Assignments"は全員や特定のグループのみにアクセスを許可することもできますし、"Skip group assignmnet for now"を選んで後で設定することも可能です。特定のユーザにだけアクセスを許可したい場合も後で設定しましょう。
    Okta - New Web App Integration 1

  4. "Save"を押すと、新しいApp連携が作成されます。

  5. PKCEを利用するように設定しておきましょう。この画面から表示・コピペできるClient IDとSecretは後でCloudflareに登録します。
    Okta - New Web App Integration 2

  6. "Sign On"タブを選択して、"OpenID Connect ID Token"セクションの"Edit"を選択します。

  7. "Groups claim filter"を"Matches regex"、.*に変更します。
    Okta - OpenID Connect ID Token

Step #2: Cloudflareの設定 - Oktaの登録

  1. Cloudflareのダッシュボードにログインして、メニューから"Zero Trust"を選択します。Zero Trustのダッシュボードが開くので、"Settings"→"Authentication"と進んで、"Login methods"セクションの"Add new"を選択します。
    Cloudflare - Authentication
  2. 追加可能なlogin methodの一覧が表示されます。SAMLやOpenID Connect (OIDC) を選んで設定することも可能ですが、Oktaがサポートされているので"Okta"を選択します。
    Cloudflare - Add a login method
  3. Okta連携の設定画面が開きます。詳しいインストラクションが一緒に表示されるのでそれに従うだけですが、先ほどOktaに登録したCloudflare用App連携の情報を登録します。連携プロトコルはデフォルトのOIDCにしましたがSAMLも利用可能です。OIDCの場合は"App ID"にClient IDを指定します。PKCEも有効化しましょう。SCIMを使ったプロビジョニングもできるようですがBetaということなので今回は対象外にしました。
    Cloudflare - Add Okta

Step #3: AWS IAM Identity Centerの設定 - アインデンティソースにCloudflareを設定 その1

  1. AWSのマネコンにログインしてIAM Identity Centerのダッシュボードを開きます。
  2. メニューから"Settings"を選択し、"Identity source"セクションの"Actions"から"Change identity source"を選択します。
    AWS - Identity source 1
  3. "External identity provider"を選択します。
  4. ここまできたら、"Service provider metadata"セクションの情報をもとにCloudflareで設定を行います。Step #5でまた戻ってきて"Identity provider metadata"セクションの設定を再開するのでマネコンは開いたままにしておきましょう。
    AWS - Identity source 2

Step #4: Cloudflareの設定 - AWS IAM Identity Centerの登録

  1. Zero Trustのダッシュボードに戻って、"Access"→"Applications"と進み、"Add an application"を選択します。

  2. "SaaS"を選択します。
    Cloudflare - Add an application 1

  3. "Application"は"Amazon aws"を選択します。ここで先ほどマネコンで確認した"Service provider metadata"セクションの情報を使用します。"Entity ID"に"IAM Identity Center issuer URL"を、"Assertion Consumer Service URL"に"IAM Identity Center Assertion Consumer Service (ACS) URL"を設定します。IAM Identitfy Centerはemailアドレスしかサポートしていないとのことなので、"Name ID Format"は"Email"を選択します。
    Cloudflare - Add an application 2

  4. AWS IAM Identity Centerを利用可否を決定するためのポリシーを作成します。"Policy name"に好きな名前を設定します。アクセスルールはOkta経由でログインした場合に許可としました。
    Cloudflare - Add an application 3

  5. "SSO endpoint"のURLをメモしたら、"Done"を選択して設定内容を保存します。
    Cloudflare - Add an application 4

  6. "SSO endpoint"の末尾に/saml-metadataをつけたアドレスをブラウザで開くと、XML形式のメタデータが取得できるのでファイルに保存しておきます。メタデータが参照できるようになるまで少しかかることがあるようです。

Step #5: AWS IAM Identity Centerの設定 - アインデンティソースにCloudflareを設定 その2

  1. "Identity provider metadata"セクションの"IdP SAML metadata"に先ほど保存したファイルを指定します。

動作確認

動作確認にあたって、AWS IAM Identity Centerにユーザが登録されている必要があります。外部IdPを使用している場合はユーザやグループを自動的にプロビジョニングすることもできるようですが、今回は手動で登録しました。IAM Identity Centerの"Username"は、IdPに登録しているemailアドレスと一致する必要があるのでご注意ください。
AWS access portal URLにアクセスして、Cloudflareに遷移することを確認できました。ここでOktaを選択すると、Oktaに遷移してユーザ認証が行われ、AWSのマネコンにログインできました。

  1. AWS access portal URLにアクセス
    Demo 1
  2. Cloudflareに遷移
    Demo 2
  3. Oktaを選択してOktaにログイン
    Demo 3
  4. ログイン完了
    Demo 4

まとめ

AWS IAM Identity CenterにOkta連携したCloudflare経由でログインできるようにしてみました。Cloudflare Zero TrustはGoogle Workspace accountやFacebook等とも連携可能なので、SSOでの認証手段の選択肢が広がりそうですね。Zero Trustは他にも面白い機能がありそうなのでまた試してみたいと思います。
ちなみに、今回私がやったのと逆パターン?のOktaの代わりにAWS IAM Identity CenterをCloudflare Zero TrustのIdPに利用するパターンはこちらで紹介されていました。

Discussion