エンタープライズクラウド部の松田です。こんにちは。
タイトル長いですが短くするのは諦めました。
Cloud Identity(Google WorkspaceのIdP機能だけを抜き出したようなもの。無償で使えます。)とAWS IAM Identity Center(旧: AWS Single Sign-On)を使ったシングルサインオンのセットアップを行う機会がありましたのでブログにまとめてみます。初めて触れるサービスでしたので(そもそもシングルサインオン自体馴染みがありませんでしたが)、そもそものサービス概要についても掘り下げていきます。
AWS IAM Identity Centerとは
ひとことで言うと、AWSアカウントに対するシングルサインオン(以下、SSOと記載します)機能を提供するサービスです。特に複数のAWSアカウントを運用している場合に高い効果を発揮するサービスで、煩雑になりがちな認証・認可の管理をシンプルにしてくれます。
AWS利用におけるSSO設計については以下の資料が非常に分かりやすいので、ぜひご一読ください。IAM Identity Centerに限らないSSO設計における基本的な考え方にも言及されており、私自身も大変勉強になりました。
何ができるのか
IAM Identity Centerは取り得る構成が多岐に渡るため、イメージが少々掴みにくいかもしれません。なので初歩の初歩ではありますが、まずはユーザー目線で図解してみました。これだけ単純化すると、私のような認証認可初心者でもスッと理解できるかなと思います。
実際のアクセスについても説明しますと、図中の①はよくあるログインで、IDとパスワードの入力を求められます(設定していればMFAも)。一方②では求められず、ページ遷移だけでAWSアカウントに出入りすることができるようになります。
「AWSアクセスポータル」の実際の画面も貼っておきます。ここからアクセスしたいAWSアカウントを選択すると、マネジメントコンソールにアクセスできます。通常のスイッチロールと異なり、アカウントIDなどを覚えておく必要が無いのは嬉しいポイントです。
外部IdP連携パターンもざっくり説明
先ほど「①ではIDとパスワードの入力を求められます」と書きましたが、外部IdPと連携することでここもスキップできる(外部IdPの認証に集約できる)ようになります。例えばGoogle WorkspaceとIAM Identity Centerを連携させると、以下のようなログインが可能になります(下図②の矢印は正確ではありませんが、ここではユーザー目線での単純化ということでこのように描いています)。
②のアクセスは、以下の画像を見てもらうと具体的にイメージできるかと思います。例えばGmailなどのGoogleサービスにアクセスするのと同じ感覚で、アイコンをクリックするだけで、AWSアクセスポータルにアクセスできるようになります。
ユーザー目線での説明はこんな感じです。私が不慣れということもありますが、これを理解するだけでてこずってしまったので、備忘の意味も込めて書き起こしてみました。
Cloud Identity(Google Workspace代替)との連携
ここからは、SSOを実際に設定する手順を記載していきます。
Google Workspaceは用意するのが何かと大変ですので、代わりに Cloud Identity Free Edition を利用します。これはGoogle WorkspaceからIDaaSの機能だけを抜き出したようなサービスで、Free Editionであれば無料で利用できます(事前にドメインの取得は必要ですので、そちらの料金は発生します)。今回のような検証用途には非常に適しているかと思います。
作業の流れ
作業の流れとしては大きく4ステップです。
- ドメイン取得
- Cloud Identityの登録
- IAM Identity Centerと連携
- IAM Identity Centerでユーザーを作成
それぞれ解説していきます。
1. ドメイン取得
ドメインの取得方法は色々ありますが、AWSを利用していればAmazon Route 53で取得するのが簡単です。以下のブログに詳細な手順がありますので、よろしければご参照ください。
ちなみにgTLDを .ninja
にするか .link
にするかで悩みましたが、安さ重視で .link
にしました。
2. Cloud Identityの登録
以下のリンクから登録を行います。基本的にはウィザードに従ってやれば大丈夫です。
① 各項目を入力して「次へ」
② 各項目を入力して「次へ」
③ 先の手順で取得したドメイン名を入力して「次へ」
④ ドメイン名に誤りが無いか確認して「次へ」
⑤ 任意で選択
⑥ 任意で選択
⑦ 各項目を入力して「同意して続行」
⑧ Cloud Identityの登録は完了ですが、このまま初期セットアップをするので「設定を続行」
⑨ Googleアカウントにログイン(⑦で作成したアカウントでログインします)
⑩ 内容を確認し、「理解しました」
⑪ 初期セットアップを進めるので「次へ」
⑫ ドメインを保護するので「保護」をクリック
⑬ 内容を確認して「ドメインを保護」
⑭ ドメイン保護の手順が表示されるので、内容に従ってRoute 53の設定を行い、「ドメインを保護」
以上で設定は完了です。
3. IAM Identity Centerと連携
先ほど準備したCloud IdentityをIAM Identity Centerに接続します。なお本手順は、IAM Identity Centerが既に有効化されている状態からの開始となりますのでご留意ください。IAM Identity Centerの有効化については、以下の公式ドキュメントをご参照ください。
① IAM Identity Centerコンソールで「Settings」→「Actions」→「Change identity source」
② 「External identity provider」を選択して「Next」
③ 「Download metadata file」でファイルをダウンロードし、以下の値を控えておく。
- AWS access portal sign-in URL
- IAM Identity Center Assertion Consumer Service (ACS) URL
- IAM Identity Center issuer URL
※AWSコンソールの作業は一旦ここまで。ここからCloud Identityでの作業に切り替わる。
④ Cloud Identityの管理コンソールで「アプリ」→「ウェブアプリとモバイルアプリ」
⑤ 「アプリを追加」→「カスタムSAMLアプリの追加」
⑥ 各項目を入力して「続行」
※値は任意でOK
⑦ 「メタデータをダウンロード」でファイルをダウンロードし、「続行」
⑧ 以下の通り入力し、「続行」
- ACSのURL:
- IAM Identity Centerコンソール記載の
IAM Identity Center Assertion Consumer Service (ACS) URL
- IAM Identity Centerコンソール記載の
- エンティティID:
- IAM Identity Centerコンソール記載の
IAM Identity Center issuer URL
- IAM Identity Centerコンソール記載の
- 開始URL: blank とします
- 署名付き応答: blank とします
- 名前IDの形式:
EMAIL
- 名前ID:
Basic Information
>Primary email
⑨ 何も変更せず、「完了」
⑩ 「ユーザーアクセス」→「サービスのステータス」を「オン(すべてのユーザー)」に変更して「保存」
※検証目的なのでひとまず「オン」で設定。
※Cloud Identityでの作業は一旦ここまで。ここからAWSコンソールでの作業に切り替わる。
⑪ ③の画面に戻り、「IdP SAML metadata」に⑦でダウンロードしたCloud Identity Freeのメタデータファイルをアップロードして「Next」
⑫ 「Change identity source」で設定を保存
※見切れていますがご容赦ください
以上でIAM Identity CenterとCloud Identityの連携は完了です。
4. IAM Identity Centerでユーザーを作成
GoogleアカウントがAWSアクセスポータルにアクセスするためには、IAM Identity Centerで同名のユーザーを作成する必要があります。IAM Identity CenterはSCIMに対応していますので自動化することもできますがが、今回はSSOの動作確認を優先したいので手動で作ってしまいます。
① IAM Identity Centerの「Users」で「Add user」
② 各項目を入力し、「Next」
※ Username
はGoogleアカウントのメールアドレスと同じにしてください。
③ この時点ではグループには所属させず、そのまま「Next」
④ 内容を確認して「Add user」
以上でSSOの準備が整いました。
動作確認
まずはGoogleアカウントからAWSアクセスポータルにSSOできるか確認します。
Googleアカウントにログインし、アプリ一覧から「AWS Single-Account Access」を開きます。
AWSアクセスポータルに入れました!
ただIAM Identity Centerユーザーはどのグループにも所属していない(=どのAWSアカウントとも関連付いていない)ため、何も表示されません。
試しに、IAM Identity Centerで AWSLogArchiveViewers
グループに追加してみます。
AWSアクセスポータルを「Sign out」→「Sign in」でサインインし直すと、アカウントのアイコンが表示されるようになりました! AWSLogArchiveViewers
グループに関連付けられている2つのアカウントが表示されています。
試しに LogArchive
アカウントに ReadOnlyAccess
でコンソールアクセスをしてみます。
フェデレ―テッドユーザーとしてアカウントにアクセスできました。
まとめ
ということで、Cloud Identityを使ったGoogleアカウントからのSSOについてまとめてみました。SCIMはじめ、今回書ききれなかったもう少し実用的な話についても、別の機会にまとめてみたいと思います。
最後までお付き合いいただき、ありがとうございました。
参考記事
松田 渓(記事一覧)
2021年10月入社。散歩が得意です。