AWS SSOを利用してAzure ADのユーザ情報でAWSアカウントへのサインインを試してみる

Azure AD のエンタープライズアプリケーションに AWS SSO と連携するためのギャラリーが追加されていたため、Azure AD のユーザ情報を用いて AWS マネジメントコンソールにサインインする環境の構築を試してみました。
2022.01.12

Azure AD のユーザ情報を用いて AWS マネジメントコンソールにサインインする方法はいくつかありますが、本ブログでは AWS SSO を用いて AWS アカウントへのアクセス権を管理している環境において、AWS SSO と Azure AD を SAML により連携する方法を紹介します。

2021 年 1 月に同じ手順を記載したブログが公開されていますが、Azure AD のエンタープライズアプリケーションに AWS SSO と連携するためのギャラリーが追加されていたため、改めて試してみました。

構成と全体の流れ

設定する構成と作業の流れを示します。

ユーザ/グループの属性情報の同期は SCIM による自動同期を採用しています。

構成図

全体の流れ

  1. SAML の信頼関係の構築
    • AWS SSO の有効化、設定
    • Azure AD のエンタープライズアプリケーションの作成、設定
    • Azure AD と AWS SSO 間で SAML メタデータの交換
  2. ユーザ/グループ属性情報の同期設定
    • Azure AD において同期するユーザ/グループの選択
    • Azure AD と AWS SSO 間の自動同期の設定
  3. AWS アカウントへのアクセス権の設定
    • アクセス権限セットの作成
    • AWS アカウントとユーザ/グループ、アクセス権限セットの紐付け

構成図中の AWS SSO と AWS アカウント間の SAML の信頼関係の構築は「3. AWS アカウントへのアクセス権の設定」において AWS SSO が自動的に行うため括弧書きとしています。

設定

SAML の信頼関係の構築

今回は、はじめに AWS SSO 側の設定から行ってみます。

はじめに AWS SSO を有効化します。この際に、有効化するリージョンが合っているか注意します。

有効化後に ID ソースの「設定」から変更を行います。

「外部 ID プロバイダー」を選択して、AWS SSO SAML メタデータをダウンロードします。ダウンロードしたメタデータは Azure AD の設定に利用します。

「IdP SAML メタデータ」は Azure AD から取得したメタデータをアップロードするため、現在は設定できません。Azure AD の設定後にアップロードします。

次に、Azure AD の設定を行います。

「Azure Active Directory」で検索して Azure AD の設定画面に移動します。

Azure AD の「エンタープライズアプリケーション」を選択します。

AWS SSO 用のアプリケーションを作成するため「新しいアプリケーション」を選択します。

「AWS Single Sign-on」を検索してギャラリーから「AWS Single Sign-on」を選択します。

「名前」を入力して「作成」します。「名前」は Azure AD マイアプリポータル上に表示される名前となります(後から変更できます)

しばらくするとアプリケーションが作成されますので「シングル サインオン」の設定を選択します

方式の選択では「SAML」を選択します。

「メタデータ ファイルをアップロードする」を選択して AWS SSO からダウンロードしたメタデータをアップロードして「追加」します。

基本的な SAML 構成が自動的に入力されるため「保存」します。「保存」後は × マークから設定画面を閉じます。

設定後にシングルサインオンをテストするか問われますが、まだ AWS SSO 側の設定をしていないためテストをしても失敗します。そのため、「いいえ、後で test します」を選択します。

「属性とクレーム」の設定がありますが、本ブログでは既定の設定とします。AWS 側で ABAC (Attribute-Based Access Control) を行う際に属性情報を定義することがあります。

次に「SAML 署名証明書」から AWS SSO にアップロードするフェデレーション メタデータ XML をダウンロードします。

AWS SSO の設定に戻ります。

先ほど、Azure AD にアップロードしたメタデータをダウンロードした設定画面から、今後は Azure AD のメタデータをアップロードします。 アップロード後、「次:確認」を選択します。

注意文を確認して問題なければ「ACCEPT」を入力して「ID ソースを変更」します。

正常に設定が完了しました。

設定後は、ID ソースが「外部 ID プロバイダー」になっています。

以上で信頼関係の構築は完了です。

今回は AWS SSO の設定を手動で行いましたが、Azure AD 側でブラウザ拡張機能の「My Apps Secure Sign-in」を利用する設定を実施することで、AWS SSO の設定を自動化することもできます。

ユーザ/グループ属性情報の同期設定

ユーザ/グループ情報のプロビジョニングを行います。Azure ADは自動で属性情報を同期するプロトコルである SCIM に対応しているため、SCIM の設定を行います。

AWS SSO の設定画面から「自動プロビジョニングを有効化」を選択します

有効化後に「SCIM エンドポイント」と「アクセストークン」が表示されるため、メモします。後で Azure AD に設定します。

自動プロビジョニングを有効化後はプロビジョニングの設定が「SCIM」になります。

次に、Azure AD 側でもプロビジョニングの設定を行い、ユーザ情報を同期させます。

Azure AD で作成したエンタープライズアプリケーションから「プロビジョニング」を選択して「作業の開始」を行います。

プロビジョニングモードは「自動」を選択して、先ほど、AWS SSO でメモした「SCIM エンドポイント」を「テナントの URL」に、「アクセストークン」を「シークレット トークン」に入力します。

「テスト接続」を行い、プロビジョニングを有効にする権限があることを確認できれば、「保存」します。

保存後に新しく「マッピング」と「設定」の項目が追加されます。

「設定」では、SCIM による同期が失敗した際に指定したメールアドレスに通知の設定を行うことができます。

「マッピング」では、Azure AD のユーザの属性情報を AWS SSO のユーザの属性情報にどのようにマッピングするかを定義します。ユーザの属性情報を編集するため「Provision Azure Active Directory Users」を選択します。

有効化時点で定義済みであるため、一から作成する必要はありません。なのですが、AWS SSO において必須の属性となっている「ユーザー名」「表示名」「姓」「名」にマッピングされる Azure AD の属性のうち、「姓」「名」は任意の設定項目となっていることから、「姓」「名」が設定されていない場合に同期エラーが発生します。その対策として、Azure AD のユーザ情報に「姓(surname)」「名(givenName)」が入力されていない場合のデフォルト値を設定しておきます。

「givenName」を選択して「null の場合の既定値 (オプション)」の項目に任意の文字列を入力して OK」を選択します。今回の例では「null」としています。

「surname」も同様に「null の場合の既定値 (オプション)」を設定します。

変更後に「保存」を忘れずに行います。

これで属性マッピング設定は完了です。

AWS Single Sign-on のギャラリーが追加される前は、属性マッピングの設定において mailNickname のソース属性の修正等の作業が必要でしたが、不要になっていました。

また、新しい属性マッピングを追加することもできます。AWS 側で ABAC に利用したい属性がない場合は追加を検討します。ABAC に使用する属性の伝達には SAML アサーションを利用する方法もあります。

次に、Azure AD 側で AWS SSO に同期するユーザ/グループを選択する設定を行います。今回は事前に以下のユーザ/グループを作成済みです。

  • グループ:test-group-admin
    • ユーザ:Test Admin
  • グループ:test-group-readonly
    • ユーザ:Test Readonly1
    • ユーザ:Test Readonly2

AWS Single Sign-on を構成しているエンタープライズアプリケーションから「ユーザーとグループ」を選択します。

「ユーザーまたはグループの追加」から同期するユーザ/グループを選択します。

今回の例では、同期したいユーザは全てグループに所属しているため、グループのみを選択して「割り当て」を行います。

以上で同期するユーザ/グループの選択は完了です。

同期するユーザ/グループを選択しましたが、プロビジョニングの設定で Azure AD のすべてのユーザ/グループを同期する設定を行うことも可能です。

同期するユーザ/グループの設定が完了した後は、再度「プロビジョニング」の設定画面を開きます。「プロビジョニングの開始」を選択して同期処理を開始します。

プロビジョニングの完了を待ちます。プロビジョニングの同期間隔は 40 分となります。同期が完了した後は同期したユーザ/グループ数が表示されるようになります。

AWS SSO 側でも同期したユーザ/グループを確認できます。

AWS アカウントへのアクセス権の設定

AWS SSO では、まずアクセス権限セットを作成し、AWS アカウント毎にアクセス権限セットと対象ユーザ/グループの割り当てを行います。下記ブログがイメージを把握するために役立ちます。

今回は権限として「AdministratorAccess」権限を持つアクセス権限セットと「ReadOnlyAccess」権限を持つアクセス権限セットを作成し、グループに割り当てます。

「AWSアカウント」メニューから「アクセス権限セットを作成」を選択します。

AWS 管理ポリシーをアタッチするため「カスタムアクセス権限セットを作成」を選択します。

AdministratorAccess 権限をアタッチして次に進みます。今回は設定しませんが、リレーステートを設定することでマネジメントコンソールにサインインしたときに始めに表示するサービスを変更できます。

必要に応じてタグの設定を行い、確認後に作成します。

同様の手順で AWS 管理ポリシー「ReadOnlyAccess」を割り当てたアクセス権限セットも作成します。

次に AWS アカウントに権限を割り当てます。

「AWS アカウント」メニューから権限を割り当てたい AWS アカウントを選択して「ユーザーの割り当て」を選択します。

まずはグループを選択します。

次に割り当てるアクセス権限セットを選択して「完了」します。

同様の手順で、グループ「test-group-readonly」にアクセス権限セット「ReadOnlyAccess」を割り当てます。

割り当てた権限は「AWS アカウント」メニューから確認することができます。

以上で AWS アカウントへのアクセス権の設定は完了です。設定を行った際に AWS SSO と AWS アカウントの IAM 間において SAML の信頼関係も自動的に構築されています。

AWS マネジメントコンソールへのサインイン

AWS マネジメントコンソールへのサインインは、Azure AD マイアプリポータルから AWS SSO 経由でサインインする方法と直接 AWS SSO ユーザーポータルにサインインしてからマネジメントコンソールへサインインする方法があります。

まずは、Azure AD マイアプリポータルから試してみます。

サインイン後に、作成したエンタープライズアプリケーション「AWS Single Sign-on」を選択します。

AWS SSO の画面に遷移するため、サインインしたい AWS アカウントの権限を選択します。

AWS マネジメントコンソールにフェデレーティッドユーザーとしてサインインしていることを確認できます。

直接 AWS SSO ユーザーポータルにサインインする場合は、AWS SSO ユーザーポータルにサインインするときに Microsoft アカウントの認証画面にリダイレクトされるため、Azure AD のユーザ情報で認証します。

後は Azure AD マイアプリポータルからサインインする場合と同様です。

おわりに

Azure AD のユーザ情報を用いて AWS アカウントのマネジメントコンソールにサインインする方法の中でも、AWS SSO と連携する方法を紹介しました。

今回は設定しませんでしたが、ABAC (Attribute-Based Access Control) によるアクセス制御を設定することも可能なため、試してみてブログ化してきたいと思います。

参考情報

チュートリアル: Azure AD SSO と AWS Single Sign-on の統合 | Microsoft Docs AWS Single Sign-On の次の進化 | Amazon Web Services ブログ