Amazon Web Services ブログ

Google Workspace を用いて AWS へのフェデレーティッド シングルサインオンをセットアップする方法

この記事は How to set up federated single sign-on to AWS using Google Workspace (2022 年 3 月 16 日更新版) を訳したものです。

外部の ID プロバイダー (IdP) と AWS とをフェデレーションすることは、ベストプラクティスです。AWS にフェデレーションをするための最もシンプルな方法は AWS Single Sign-On (AWS SSO) を利用することです。AWS SSO では、一度フェデレーションを構成すれば、すべての AWS アカウントへのアクセスを一元管理することができます。AWS SSO における外部 IdP として Google Workspace を設定する手順については、こちらのブログ記事をご覧ください。以前は、お客様は AWS Identity and Access Management (IAM) を使用してフェデレーションを構成していましたが、その方法では各 AWS アカウントで SAML ID プロバイダーを構成する必要がありました。本ブログ記事では、AWS IAM フェデレーションを使用している場合に、Google Workspace でフェデレーションを構成する方法を紹介します。

ソリューション概要

このソリューションでは、Google Workspace ユーザーが AWS マネジメントコンソールにアクセスできるようにするために、IAM で SAML ID プロバイダーを作成し、Google IdP とユーザー認証情報をセキュアにやり取りできる信頼された通信チャネルを確立します。AWS 管理者は、信頼できる IdP (この場合は Google Workspace) にユーザー認証の責任を委譲します。Google Workspace は SAML 2.0 メッセージを使用して、Google と AWS アカウントの間でユーザーの認証情報をやり取りします。SAML 2.0 メッセージに含まれる情報により、IAM ロールは、フェデレーティッドユーザーが AWS マネジメントコンソールにサインインして AWS リソースにアクセスするための権限を付与することができます。選択したロールにアタッチされている IAM ポリシーにより、フェデレーティッドユーザーがコンソールでどのような権限を持つかが決まります。

図 1: IAM フェデレーションのログイン処理

図 1: IAM フェデレーションのログイン処理

図 1 は、IAM フェデレーションにおけるログイン処理を示したものです。フェデレーティッドユーザーの視点では、この処理は透過的に行われます : ユーザーはまず Google Workspace ポータルにアクセスし、最終的に AWS マネジメントコンソールに到達しますが、その際に別のユーザー名とパスワードを入力する必要はありません。

  1. ポータルは、組織におけるユーザーのアイデンティティを検証します。ユーザーは、組織のポータルを閲覧し、AWS マネジメントコンソールに移動する選択肢を選びます。組織において、ポータルは通常、組織と AWS 間で信頼の交換を取り扱う IdP の機能を提供します。Google Workspace では、https://myaccount.google.com/ に移動し、画面右上にある 9 つのドットのアイコンを選択します。すると、アプリのリストが表示され、そのうちの 1 つで AWS にログインすることができます。本ブログ記事では、このカスタムアプリを設定する方法を紹介します。
    図 2: Google アカウントページ

    図 2: Google アカウントページ

  2. ポータルは、組織におけるユーザーのアイデンティティを検証します。
  3. ポータルは、SAML 認証応答を生成します。これはユーザーを識別するものであり、ユーザーに関する属性を含んでいます。ポータルは、この応答をクライアントブラウザに送信します。ここでは説明しませんが、 SessionDuration という SAML アサーションの属性を含むよう IdP を設定し、AWS マネジメントコンソールにおけるセッションの有効期間を指定することもできます。また、セッションタグとして属性を受け渡すよう IdP を設定することもできます。
  4. クライアントブラウザは、AWS Single Sign-On エンドポイントにリダイレクトされ、SAML アサーションを POST します。
  5. エンドポイントは、ユーザーに代わって一時的なセキュリティクレデンシャルを要求し、それらクレデンシャルを用いたコンソールへのサインイン URL を作成します。
  6. AWS SSO はクライアントにリダイレクトの形でサインイン URL を送り返します。
  7. クライアントブラウザは、AWS マネジメントコンソールにリダイレクトされます。SAML 認証応答に含まれる属性が複数の IAM ロールにマッピングされている場合、ユーザーは、まずコンソールにアクセスする際のロールを選択するよう促されます。

セットアップ

以下の大枠でのステップに従って、Google Apps を使用した AWS リソースへのフェデレーティッド シングルサインオンをセットアップしていきます。

  1. Google ID プロバイダー (IdP) の情報をダウンロード
  2. AWS アカウントで IAM SAML ID プロバイダーを作成
  3. サードパーティーの ID プロバイダー向けのロールを作成
  4. Google Workspace でユーザーのロールを割り当て
  5. AWS の SAML ID プロバイダー (IdP) として Google Workspace を設定
  6. Google Workspace と AWS IAM の統合をテスト
  7. より広いユーザーベースへのロールアウト

各ステップの詳細な手順は、このブログ記事の残りの部分で説明します。

Step 1. Google ID プロバイダー (IdP) の情報をダウンロード

まず、AWS アカウントが IdP を認証し、必要な通信エンドポイントの場所を特定するために欠かせない情報を含む SAML メタデータを取得します。

  1. Google Workspace 管理コンソール にログインします。
  2. 管理コンソールのホームページから、[Security] > [Settings] > [Set up single sign-on (SSO) with Google as SAML Identity Provider (IdP)] を選択します。
    図 3: 「Set up single sign-on (SSO) for SAML applications」 設定にアクセス

    図 3: 「Set up single sign-on (SSO) for SAML applications」 設定にアクセス

  3. [IdP metadata] の下にある [DOWNLOAD METADATA] を選択します。
    図4:「SSO with Google as SAML IdP」ページ

    図4:「SSO with Google as SAML IdP」ページ

Step 2. AWS アカウントで IAM SAML ID プロバイダーを作成

Google Workspace と AWS アカウント間の信頼関係を確立するために、Google Workspace 用の IAM ID プロバイダー を作成します。作成する IAM ID プロバイダー はAWS アカウントのエンティティであり、IAM ロールを引き受ける設定を行うユーザーをもつ外部 IdP サービスを記述するものです。

  1. AWS マネジメントコンソールにサインインし、IAM コンソール (https://console.thinkwithwp.com/iam/) を開きます。
  2. ナビゲーションペインで、[Identity providers] (ID プロバイダー) を選択し、[Add provider] (プロバイダーを追加) を選択します。
  3. [Configure provider] (プロバイダーの設定) で、SAML を選択します。
  4. ID プロバイダーの名前(Google Workspace など)を入力します。
  5. [Metadata document]で [Choose file] (ファイルを選択) を押下し、Step 1-c でダウンロードした SAML メタデータドキュメントを指定します。
  6. 提供した情報を検証する。完了したら [Add provider] (プロバイダーを追加) を選択します。
    図 5: ID プロバイダーの追加

    図 5: ID プロバイダーの追加

  7. ステップ f で作成したばかりの ID プロバイダーを確認し、その Amazon Resource Name (ARN) をメモしてください。ARN は以下のような形式です:

    arn:aws:iam::123456789012:saml-provider/GoogleWorkspace

Step 3. サードパーティーの ID プロバイダー向けのロールを作成

AWS マネジメントコンソールにアクセスするユーザーの場合、そのユーザーが引き受ける IAM ロールで、AWS アカウント内のリソースにアクセスすることができます。ロールは、フェデレーティッドユーザーがサインインした後に何をしてよいかを定義する場所です。

  1. IAM ロールを作成するには、AWS IAM コンソールにアクセスします。[Roles] (ロール) > [Create role] (ロールを作成) を選択します。
  2. [SAML 2.0 federation] のロールタイプを選択します。
  3. [SAML Provider] として、Step 2 で作成したプロバイダーを選択します。
  4. [Allow programmatic and AWS Management Console access] (プログラムと AWS マネジメントコンソールへのアクセスを許可する) を選択し、プログラムおよび AWS マネジメントコンソールから引き受けられるロールを作成します。
  5. SAML 2.0 の信頼情報を確認し、「次へ」を選択します。
    図 6: SAML 2.0 信頼情報のレビュー

    図 6: SAML 2.0 信頼情報のレビュー

GoogleSAMLPowerUserRole

  1. このウォークスルーでは、SAML 2.0 フェデレーションによって引き受ける 2 つのロールを作成します。[GoogleSAMLPowerUserRole] では、[PowerUserAccess] という AWS 管理ポリシーをアタッチします。このポリシーは、AWS サービスとリソースへのフルアクセスを提供しますが、ユーザーとグループの管理は許可されません。[Filter policies] を選択し、ドロップダウンから [AWS managed – job function] (AWS 管理 – ジョブ機能) を選択します。これにより、特定のジョブ機能を中心に設計されたAWSマネージドポリシーのリストが表示されます。
    図 7: AWS 管理 ジョブ機能の選択

    図 7: AWS 管理 ジョブ機能の選択

  2. ポリシーをアタッチするために、[PowerUserAccess] を選択します。 次に [Next: Tags] を選択し、さらに [Next: Review] に進みます。
    図 8: PowerUserAccess ポリシーをロールにアタッチ

    図 8: PowerUserAccess ポリシーをロールにアタッチ

  3. 最後に、[Create role] (ロールの作成) を選択し、ロール作成を完了します。
    図 9: ロール作成

    図 9: ロール作成

GoogleSAMLViewOnlyRole

a から g のステップを [GoogleSAMLViewOnlyRole] を対象に繰り返し、AWS 管理ポリシーの [ViewOnlyAccess] をアタッチします。

図 10: GoogleSAMLViewOnlyRole の作成

図 10: GoogleSAMLViewOnlyRole の作成

 

図 11: ViewOnlyAccess 許可ポリシーのアタッチ

図 11: ViewOnlyAccess 許可ポリシーのアタッチ

  1. 両方のロールの ARN をメモしておきます。ARN は次のような形式です。

    arn:aws:iam::123456789012:role/GoogleSAMLPowerUserRole および

    arn:aws:iam::123456789012:role/GoogleSAMLViewOnlyAccessRole

Step 4. Google Workspace でユーザーのロールを割り当て

ここでは、ユーザーが AWS で引き受けることができる 1 つまたは複数のロールを指定します。

  1. Google Workspace 管理コンソール にログインします。
  2. 管理コンソールの [Home] から、[Directory] > [Users] と移動します。[More] ドロップダウンから [Manage custom attributes] を選択し、 [Add Custom Attribute] を選択します。
  3. カスタム属性は次のように設定します :
    Category: AWS
    Description: Amazon Web Services Role Mapping
    カスタムフィールドには次を入力します:

    Name: AssumeRoleWithSaml
    Info type: Text
    Visibility: Visible to user and admin
    InNo. of values: Multi-value
  4. [Add] を選択します。[Manage user attributes] ページに新しいカテゴリが出現します。
    図 12: カスタム属性の追加

    図 12: カスタム属性の追加

  5. [Users] に移動し、AWS へのフェデレーションを許可するユーザーを探します。ユーザー名を選択してアカウントページを開き、[User Information] (ユーザー情報) を選択します。
  6. 先程作成したカスタム属性 (AWS という名称) を選択します。[AssumeRoleWithSaml] の各行には、以下の形式で、先程メモした値を含む 2 行を追加します。

    1 行目:
    arn:aws:iam::123456789012:role/GoogleSAMLPowerUserRole,arn:aws:iam:: 123456789012:saml-provider/GoogleWorkspace

    2 行目:
    arn:aws:iam::123456789012:role/GoogleSAMLViewOnlyAccessRole,arn:aws:iam:: 123456789012:saml-provider/GoogleWorkspace

    [AssumeRoleWithSaml] の形式は RoleARN(Step 3-h) + “,”+ ID プロバイダーの ARN (Step 2-g) であり、SAML 属性の値 https://thinkwithwp.com/SAML/Attributes/Role として受け渡されます。最終結果は以下のようになります :

    図 13: ユーザーが引き受けるロールの追加

    図 13: ユーザーが引き受けるロールの追加

Step 5. AWS の SAML ID プロバイダー (IdP) として Google Workspace を設定

ここで、Google Workspace のアカウントに SAML アプリをセットアップします。セットアップでは SAML ベースの認証のために AWS マネジメントコンソールが期待する SAML 属性の追加も行います。

Google Workspace 管理コンソール にログインします。

    1. 管理コンソールのホームページから、[App] > [Web and mobile apps] に移動します。
    2. [Add App] ドロップダウンリストから [Add custom SAML app] を 選択します。
    3. [App name] に [AWS Single-Account Access] を入力し、オプションで SAML アプリケーションを識別するための [App icon] をアップロードし、[Continue] を選択します。
      図 14: カスタム SAML app のネーミングとアイコン設定

      図 14: カスタム SAML app のネーミングとアイコン設定

    4. 次の値を入力します :
      ACS URL: https://signin.thinkwithwp.com/saml
      Entity ID: urn:amazon:webservices
      Name ID format: EMAIL
      Name ID: Basic Information > Primary email
      備考: プライマリ E メールアドレスが AWSのロールセッション名として使われます。
    5. [CONTINUE] を選択します。
      図 15: カスタム SAML アプリケーションの追加

      図 15: カスタム SAML アプリケーションの追加

    6. AWSは、IdP がいくつかの必須属性 (claims) を持つ SAML アサーションを発行することを要求します。AWS のドキュメントでは、SAML アサーションの構成方法が記載されており、端的に言うと、以下を持つアサーションを作成する必要があります。
      • 属性名 https://thinkwithwp.com/SAML/Attributes/Role この要素には、IdP によってユーザがマッピングされる IAM ID プロバイダーおよびロールを表す [AttributeValue] 要素が 1 つ以上含まれます。IAM ロールと IAM ID プロバイダーは、[RoleArn] と [PrincipalArn] パラメータと同じ形式の ARN をカンマ区切りで繋いだペアで指定され、STS の API である AssumeRoleWithSAML に受け渡されます。
      • 属性名 https://thinkwithwp.com/SAML/Attributes/RoleSessionName 文字列の値を指定します。これは、AWS におけるフェデレーティッドユーザーのロールセッション名です。(繰り返しますが、属性名は単なる型の定義であり、実際の URL ではありません。)
      • 名前識別子 ([NameId]) が SAML アサーションのサブジェクトの識別に用いられます。
        Google Directory attributes App attributes
        AWS > AssumeRoleWithSaml https://thinkwithwp.com/SAML/Attributes/Role
        Basic Information > Primary email https://thinkwithwp.com/SAML/Attributes/RoleSessionName
        図 16: Google Directory 属性と SAML 属性のマッピング

        図 16: Google Directory 属性と SAML 属性のマッピング

    7. [FINISH] を選択し、マッピングを保存します。

Step 6. Google Workspace と AWS IAM の統合をテスト

      1. Google Workspace 管理コンソール にログインします。
      2. 管理コンソールの [Home] から、[App] > [Web and mobile apps] に移動します。
      3. Step 5 で作成したアプリケーションを選択します。
      4. 左上の [TEST SAML LOGIN] を選択し、ポップアップボックスで [ALLOW ACCESS] を選択します。
        図 18: SAML ログインのテスト

        図 18: SAML ログインのテスト

      5. サービスステータスのセクションで [ON for everyone] を選択し、[SAVE] を選択します。すると、Google Workspaceのすべてのユーザーに SAML カスタムアプリが見えるようになります。
        図 19: カスタムアプリの設定保存

        図 19: カスタムアプリの設定保存

      6. そして、[Web and mobile apps] に遷移し、[TEST SAML LOGIN] を改めて選択します。AWS は別のタブを開いて2 つのロールを表示するので、選択します :
        図 20: SAML ログインの再テスト

        図 20: SAML ログインの再テスト

         

        図 21: コンソールへのアクセスのために引き受ける IAM ロールの選択

        図 21: コンソールへのアクセスのために引き受ける IAM ロールの選択

      7. 必要なロールを選択し、[Sign in] を選択します。
      8. AWS マネジメントコンソールのページにリダイレクトされます。
      9. Google workspace ユーザーがワークスペースから AWS アプリケーションに対してアクセスすることができるようになります。
        図 22: AWS カスタムアプリの見え方

        図 22: AWS カスタムアプリの見え方

結論

このブログ記事のステップに従うことで、Google Workspace ディレクトリと AWS アカウントを設定し、選択した Google Workspace ユーザーに対して SAML ベースのフェデレーティッドサインオンを可能にすることができます。これを IAM ユーザーの上で使用することで、ID 管理を一元化し、マルチアカウント戦略を採用しやすくすることができます。
この記事に関するフィードバックがある場合は、以下の「コメント」セクションにコメントを送信してください。この記事について質問がある場合は、AWS サポートにお問い合わせください。

翻訳はソリューションアーキテクト 勝原 が担当しました。原文はこちらです。