Azure ADとAWSアカウントの認証連携方法まとめ

Azure AD と AWS Single Sign-On を認証連携させる方法と Azure AD と AWS アカウントを直接連携させる方法の違いをまとめました。
2022.05.02

Azure AD と AWS 間における SAML 2.0 を用いた認証連携にはいくつかの方法があり、混乱することがありましたので、私自身の備忘録も兼ねて Azure AD と AWS Single Sign-On を連携させる方法と Azure AD と AWS アカウントを直接連携させる方法 2 種類の合計 3 つの方法の違いをまとめました。


まとめ

Azure AD と AWS の主な認証連携方法である次の 3 パターンの構成イメージと比較表を記載します。各方式には本ブログ限りの名称を付けています。

1. AWS SSO 連携方式

Azure AD と AWS Single Sign-On (以下、AWS SSO) を連携させ、AWS SSO で各 AWS アカウントを管理する方式です。AWS 側では AWS SSO を利用するために AWS Organizations を利用している必要があります。

なお、AWS SSO についての基本的な内容は次のブログにまとめています。

2. AWS アカウント 1 対 1 連携方式

Azure AD と AWS アカウントを直接連携させ、Azure AD のエンタープライズアプリケーションと AWS アカウントを 1 対 1 で紐付ける方式です。AWS 側で AWS Organizations は必須ではありません。

3. AWS アカウント 1 対多連携方式

Azure AD と AWS アカウントを直接連携させ、Azure AD の 1 つのエンタープライズアプリケーションに複数の AWS アカウントを紐付ける案です。AWS 側で AWS Organizations は必須ではありません。

方式の比較表

3 つの方式の比較表です。いくつかの項目については追加の説明を後述します。

大項目 小項目 AWS SSO 連携方式 AWS アカウント 1 対 1 連携方式 AWS アカウント 1 対多連携方式
方式 方式概要 Azure AD の 1 つのエンタープライズアプリケーションに対して AWS SSO を連携 Azure AD の 1 つのエンタープライズアプリケーションに対して 1 つの AWS アカウントを連携 Azure AD の 1 つのエンタープライズアプリケーションに対して復数の AWS アカウントを連携
AWS マネジメントコンソールまでの遷移 Azure AD マイアプリポータルからのアクセス、および、AWS SSO ユーザーポータルからのアクセス Azure AD マイアプリポータルからのアクセス Azure AD マイアプリポータルからのアクセス
ユーザー情報と権限の関連付け設定箇所 AWS SSO Azure AD Azure AD
Azure AD エンタープライズアプリケーションの数 1 復数 1
エンタープライズアプリケーションの対応ギャラリー AWS Single Sign-on AWS Single-Account Access AWS Single-Account Access
条件付きアクセス AWS SSO に対して 1 つのポリシー適用 AWS アカウント毎にポリシー適用 すべての AWS アカウントに対して 1 つのポリシー適用
証明書更新時の影響 AWS SSO で更新対応 各 AWS アカウント毎に更新対応 各 AWS アカウント毎に更新対応(同時に更新が必要)
AWS SSO AWS Organizations の必要有無 必要(AWS SSO 利用に必要) 不要 不要
AWS アカウント追加時の連携設定 Azure AD の設定 設定無し エンタープライズアプリケーションの新規作成・設定 エンタープライズアプリケーションの設定変更(Microsoft Graph の利用が必要)
AWS SSO の設定 アクセス許可セットの設定 - -
AWS アカウントの設定 設定作業無し(AWS SSO が自動設定) IAM ID プロバイダ、IAM ロールの設定 IAM ID プロバイダ、IAM ロールの設定
備考 備考 AWS SSO から AWS Organizations の組織外の AWS アカウントへのアクセス設定も可能 派生案として、Azure AD との連携は AWS の Jump アカウントのみと行い、Jump アカウントから各 AWS アカウントにスイッチロールする案がある Azure AD のドキュメントでは非推奨の方式
参考ドキュメント チュートリアル: Azure AD SSO と AWS Single Sign-on の統合 チュートリアル: Azure AD SSO と AWS Single-Account Access の統合 チュートリアル: Azure Active Directory とアマゾン ウェブ サービスを統合して複数のアカウントを接続する


各項目の補足説明

比較表のいくつかの項目に対して補足します。

AWS マネジメントコンソールまでの遷移

方式毎に AWS アカウントに遷移するまでの手順が変わります。

AWS SSO 連携方式では、Azure AD マイアプリポータルもしくは AWS SSO ユーザーポータルを起点として AWS アカウントにアクセスできます。AWS SSO において AWS アカウントと権限(アクセス許可セット)を選択します。

AWS アカウント 1 対 1 連携方式では、Azure AD マイアプリポータルから AWS アカウントにアクセスします。マイアプリポータルでは AWS アカウント単位でアプリケーションが表示されるため、その中からアクセスしたい AWS アカウントを選択した後に利用する IAM ロールを選択します。利用できる IAM ロールが 1 つのみの場合は IAM ロール選択画面が表示されないこともあります。

AWS アカウント 1 対多連携方式では、Azure AD マイアプリポータルから AWS アカウントにサインインします。エンタープライズアプリケーションは 1 つのみであり、アプリケーションを選択後に AWS アカウントと IAM ロールを選択します。

ユーザー情報と権限の関連付け設定箇所

AWS SSO 連携方式は AWS SSO にてユーザーと AWS アカウントの権限の紐付けを行い、AWS アカウント 1 対 1 連携方式とAWS アカウント 1 対多連携方式は Azure AD のエンタープライズアプリケーションの設定でユーザーと AWS アカウントの権限の紐付けを行います。

AWS SSO 連携方式では、Azure AD ユーザーの属性情報(名前、所属、メールアドレスなど)を AWS SSO にプロビジョニング(同期)し、その属性情報を用いて AWS アカウントで利用できるポリシーとなる「アクセス許可セット」を割り当てます。

以下は、自動プロビジョニングでユーザーの同期を行っている場合のイメージです。同期したユーザー情報に対してアクセス許可セットを関連付ける設定を行うことで、AWS アカウント側で IAM ロールが作成され、そのロールを利用して AWS アカウントで操作をします。なお、具体的な設定内容については後述している参考手順を参照ください。

AWS アカウント 1 対 1 連携方式とAWS アカウント 1 対多連携方式では、Azure AD のエンタープライズアプリケーションの「ユーザーとグループ」の設定から Azure AD のグループまたはユーザーと AWS アカウント側の IAM ロールである「割り当てられたロール」との紐付けを設定します。

AWS アカウント 1 対多連携方式の場合は「割り当てられたロール」の名前にアカウント名をいれておくと区別しやすくなります(上図ではアカウント名を含めていません)

エンタープライズアプリケーションの対応ギャラリー

AWS SSO 連携方式では、ギャラリーの中から「AWS Single Sign-on」を利用します。エンタープライズアプリケーションの作成は最初の 1 回だけです。

AWS アカウント 1 対 1 連携方式とAWS アカウント 1 対多連携方式では、ギャラリーの中から「AWS Single-Account Access」を利用します。AWS アカウント 1 対多連携方式の場合はエンタープライズアプリケーションの作成は最初の 1 回だけですが、AWS アカウント 1 対 1 連携方式の場合は AWS アカウントの追加の度にエンタープライズアプリケーションを追加する必要があります。

余談となりますが、「AWS Console Sign-In」というギャラリーもあります。このギャラリーは、単純に AWS のサインインページへのリンクを登録するだけの内容になっており、Azure AD マイアプリポータルからアプリを選択した場合にサインインページにアクセスさせることができます。Azure AD のユーザー情報で AWS の認証を行うわけではありません。

「AWS Console Sign-In」の AWS サインイン URL の設定画面です。

条件付きアクセス

Azure AD の 条件付きアクセス はエンタープライズアプリケーション毎に設定できるため、各方式に違いがでます。

エンタープライズアプリケーションを 1 つしか作成しないAWS SSO 連携方式とAWS アカウント 1 対多連携方式では、すべての AWS アカウントに対して一律の条件付きアクセスポリシーとなります。

一方、AWS アカウント 1 対 1 連携方式では、AWS アカウント毎にエンタープライズアプリケーションを作成することから、AWS アカウント毎に条件付きアクセスのポリシーを分けることができ、他方式と比べたメリットになります。例えば、AWS アカウント A には送信元 IP アドレス制限を設けて、AWS アカウント B には送信元 IP アドレス制限を設けない、といった設定が可能となります。

なお、エンタープライズアプリケーションで条件付きアクセスを設定した場合は、Azure AD マイアプリポータルから AWS SSO や AWS アカウントのアプリを選択した際にアクセスが失敗します。

Azure AD の証明書更新時の影響

Azure AD と AWS との認証連携では、Azure AD の証明書更新作業が必要となります。

AWS SSO 連携方式では、AWS SSO において証明書の更新対応が必要になります。

AWS アカウント 1 対 1 連携方式とAWS アカウント 1 対多連携方式では、AWS アカウントにおいて証明書の更新対応が必要になります。AWS アカウント 1 対 1 連携方式では各 AWS アカウントの更新を別々のタイミングで行うことができますが、AWS アカウント 1 対多連携方式では全ての AWS アカウントを同時に更新する必要なため注意が必要です。

Azure AD の証明書の更新については次のドキュメントが参考になります。

チュートリアル: フェデレーション証明書の管理 - Azure AD | Microsoft Docs

また、AWS SSO 連携方式の証明書の更新方法については次のブログで紹介しています。

AWS アカウント追加時の連携設定

AWS SSO 連携方式では、AWS Organizations の組織内の AWS アカウントは AWS SSO サービスからも認識できるようになっており、アクセス許可セットを関連付けることで AWS アカウント側の IAM 設定が自動的に行われます。Azure AD 側での設定追加はありません。

AWS アカウント 1 対 1 連携方式では、Azure AD で新しいエンタープライズアプリケーションの作成と AWS アカウントにおける IAM プロバイダと IAM ロールの作成が必要となります。

AWS アカウント 1 対多連携方式では、Microsoft Graph を用いた Azure AD の既存エンタープライズアプリケーションの設定変更と AWS アカウントにおける IAM プロバイダと IAM ロールの作成が必要となります。Microsoft Graph とは、Microsoft のクラウドサービスのリソースにアクセスできる RESTful Web API です。

各方式の設定方法については後述する参考設定手順を参照ください。

備考

AWS SSO 連携方式の備考

AWS SSO で管理されている AWS アカウントは AWS Organizations の組織内のアカウントとなりますが、AWS SSO では組織外のアカウントにアクセスする設定も可能です。この場合は AWS アカウント側で IAM の自動設定は行われず、ユーザーが設定する必要があります。

AWS アカウント 1 対 1 連携方式の備考

派生案として、Azure AD と連携する AWS アカウントは 1 つのアカウントのみとして、そのアカウントから他のアカウントにスイッチロールする方法があります。つまり、AWS の Jump アカウントのみ Azure AD と連携する方法です。

本方式については次のブログでも述べられています。

AWS アカウント 1 対多連携方式の備考

本方式は Azure AD に関する次のドキュメントで非推奨とされていることから利用には注意が必要です。

チュートリアル: Azure Active Directory とアマゾン ウェブ サービスを統合して複数のアカウントを接続する | Microsoft Docs

以下、非推奨な利用の抜粋です。

以下の理由から、1 つの AWS アプリを自分のすべての AWS アカウントに接続 "しない" ことをお勧めします。

  • AWS アカウントやそれに含まれるロールの数が増えてもこのモデルを拡張できないことが原因で、AWS アカウントとロールの数を少なくしている場合にのみ、このアプローチを使用してください。 このアプローチでは、Azure AD ユーザー プロビジョニングを使用した AWS ロールのインポート機能が使用されないため、ロールを手動で追加、更新、削除する必要があります。
  • アプリにすべてのロールを適用するには、Microsoft Graph エクスプローラーを使用する必要があります。 マニフェスト ファイル アプローチの使用はお勧めしません。
  • お客様からは、1 つの AWS アプリに対して約 1,200 のアプリ ロールを追加した後、そのアプリでさらに操作を行うと、サイズに関連したエラーがスローされるようになるという報告が寄せられています。 アプリケーション オブジェクトには厳密なサイズ制限があります。
  • ロールは、アカウントのいずれかに追加されたときに、手動で更新する必要があります。 残念ながら、これは "追加" アプローチではなく、"置換" アプローチとなります。 また、アカウント数が増加している場合、これはアカウントとロールの n × n の関係になります。
  • すべての AWS アカウントでは、同じフェデレーション メタデータ XML ファイルが使用されます。 証明書をロールオーバーする際、すべての AWS アカウントの証明書を同時に更新することは膨大な作業となる可能性があります。


参考となる設定手順

各方式の設定手順の参考となるブログ、ドキュメントを記載します。

AWS SSO 連携方式の参考手順

AWS SSO の設定画面の UI が変わっている点に注意が必要ですが、次のブログで紹介しています。

また、Azure AD 側のドキュメントにも手順の説明があり、参考になります。

チュートリアル: Azure AD SSO と AWS Single Sign-on の統合 | Microsoft Docs

AWS アカウント 1 対 1 連携方式の参考手順

次のブログが参考となります。

2 アカウント目以降の追加の場合は、Azure AD のエンタープライズアプリケーションのシングルサインオン設定において、AWS SSO を一意な識別子 (エンティティ ID) とするため、最後に#X のように番号を付与する必要がある点に注意が必要になります。

https://signin.aws.amazon.com/saml#2

Azure AD のドキュメントに識別子の設定例があります。

チュートリアル: Azure AD SSO と AWS Single-Account Access の統合 | Microsoft Docs

AWS アカウント 1 対多連携方式の参考手順

1 つの AWS アカウントの設定はAWS アカウント 1 対 1 連携方式と同様ですが、2 つ目以降の AWS アカウントとの連携設定の場合は Azure ポータルだけでは設定できず、Microsoft Graph を用いて設定する必要があります。

チュートリアル: Azure Active Directory とアマゾン ウェブ サービスを統合して複数のアカウントを接続する | Microsoft Docs

下記の例は、エンタープライズアプリケーションの設定の一部であり、後半部分が 2 つ目の AWS アカウントの IAM ロールを追加した設定です。

        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "Accunt1-AdministratorAccess",
            "displayName": "Accunt1-AdministratorAccess,AzureAD",
            "id": "47edd624-f264-4e22-8bc2-xxxxxxxxxxxxxx",
            "isEnabled": true,
            "origin": "ServicePrincipal",
            "value": "arn:aws:iam::111122223333:role/Accunt1-AdministratorAccess,arn:aws:iam::111122223333:saml-provider/AzureAD"
        },
        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "Accunt2-AdministratorAccess",
            "displayName": "Accunt2-AdministratorAccess,AzureAD",
            "id": "31f5dfe5-c9b3-471e-b83c-xxxxxxxxxxxxxx",
            "isEnabled": true,
            "origin": "ServicePrincipal",
            "value": "arn:aws:iam::444455556666:role/Accunt2-AdministratorAccess,arn:aws:iam::444455556666:saml-provider/AzureAD"
        }


さいごに

Azure AD と AWS の主な認証連携方法である次の 3 パターンの違いをまとめました。AWS の利用状況に応じた適切な認証連携方法を検討する際のご参考になれば幸いです。

  • AWS SSO 連携方式
  • AWS アカウント 1 対 1 連携方式
  • AWS アカウント 1 対多連携方式

AWS Organizations を利用しており、Azure AD の条件付きアクセスのポリシーを AWS アカウント毎に分けたい要件がない場合は、AWS アカウント追加時や証明書更新の手間が少ないAWS SSO 連携方式が個人的には推奨となります。

また、Azure AD に限らないマルチアカウント環境のアクセス方法の比較も次のブログで紹介されていますので、ぜひご参照ください。