AWS Organizationsを0から始める -実践編-
1. 目的
AWSとMicrosoft Entra IDを連携してAWSアカウントへのシングルサインオン環境を構築します。

上図は現在のAWS Organizationsの構成です。
現状はAWS Organizations Consolidated Billing(一括請求)アカウントに自社やその他組織アカウントが所属する状態で、IAMユーザはそれぞれ自社やその他組織のアカウントで管理しています。
この状態からOrganizationsやIDプロバイダーで一元管理可能な環境まで移行することが今回の目的です。
現状のIAMユーザ管理
- 管理者は個々のIAMを発行する工数が、ユーザはパスワードを管理する手間がある
- 今後メンバーが増減する見込みがある
-> 個別管理からの脱却
- Azureで管理している社員のIDでAWSのシングルサインオンを実現
- AWSのIAMユーザーを極力使わない構成への移行
2. 実現方法とゴール
Microsoft Entra ID認証からSSOを実現する
- Microsoft Entra ID からSAMLトークンを使用してAWS Organizationsにサインインするフェデレーション認証を実装
- AWS Identity CenterとOrganizations機能を利用してSSO環境を構築
AWS IAM Identity Centerとは?
AWS Organizations組織に属している複数のAWSアカウントへのシングルサインオンを可能にし、各アカウントへの権限を一元管理できるサービスです。
IAM Identity Center | クラスメソッド株式会社
アイデンティティソースとしてAWS以外のサードパーティアプリケーション(Oktaなど)を利用したり、AzureやAWSのActive Directoryを利用が可能です。
今回はAzureのADサービスであるMicrosoft Entra IDとの連携を構築します。
3. ターゲット
このドキュメントは下記のユーザー向けに作成しています。
- SSO環境を構築するために必要な準備を知りたい方
- マルチクラウドの環境構築について知りたい方
4. 作業手順
事前準備
まずは移行計画を考えます。
Phase 1
移行対象アカウントの一部をSSO認証に移行しその他アカウントは既存の運用のままにする

Phase 2
新規アカウントはOrganizationsに参加させ、Organizationsで運用するアカウントを増やしていく

Phase 3
すべてのアカウントを1つのOrganizationsアカウントで管理する

Microsoft Entra IDの設定
IAM Identity Centerと連携するために、まずはAzureのEntra IDにエンタープライズアプリケーションを設定します。
エンタープライズアプリケーションはSaaSアプリケーションとのテナント結合に利用するサービスです。
前提条件
- Microsoft Entraユーザーアカウントを発行していること
- 操作者に グローバル管理者ロール、クラウド アプリケーション管理者ロール、アプリケーション管理者ロールのいずれかが割り当てられていること
エンタープライズアプリケーションの追加
ホーム画面 > Azure サービス > Microsoft Entra ID を選択します。
左ペインのエンタープライズアプリケーションを選択します。

左ペインから[ すべてのアプリケーション ]を選択します。
[ 新しいアプリケーション ]を選択

[Microsoft Entra ギャラリーを参照する]に遷移するので検索窓にAWSと入力すると

AWS IAM Identity Centerがあるので選択して[作成]を押下します。

すべてのアプリケーション画面に戻るとAWS IAM Identity Centerが追加されています。

1~4までの設定手順があり、今回は3.のユーザーアカウントのプロビジョニングまで実施します。

1. ユーザーとグループの割り当て
ユーザーまたはグループの追加を選択します。

割り当てするグループまたはユーザーを選択します。

選択して[ 割り当て ]を押下するとこのように追加されています。

2. シングルサインオンの設定
SAML によるシングル サインオンのセットアップの項目③からフェデレーションメタデータXMLをダウンロードします。

ここからはシングルサインオン先のAWS Identity CenterIdentity Centerで操作します。
コンソール画面より、IAM Identity Center > 設定 に移動
[ アイデンティティソースを変更 ]を押下

今回は外部IDプロバイダーを選択、次へを押下。

IdPを設定するためのメタデータをダウンロードします。

AzureでダウンロードしたフェデレーションメタデータXMLをインポートして次へを押下

承諾してアイデンティティソースを変更します。
再びAzureコンソール画面に戻り、IAM Identity Centerで取得したメタデータファイルをアップロードします。


追加を押下します。

テストを促すポップアップが表示されます。
この時点でテストをせず、ユーザのプロビジョニング後にテストします。
AWSコンソール画面で 設定 > 認証を選択します

3. ユーザーアカウントのプロビジョニング
アイデンティティソース変更が完了するとAWSコンソール画面に自動プロビジョニングのメッセージが表示されています。

[ 有効にする ]を押下します。
アクセストークンが表示されるのでメモします。

プロビジョニングの画面に遷移します

管理 > プロビジョニングを選択

管理者資格情報を選択

メモしたシークレットトークンを入力して[ 保存 ]を押下
Provision Microsoft Entra ID Usersを選択

name.givenName, name.familyNameの項目に下記の通り設定します。
nullの場合の規定値: null

この後は特に設定をせずに一定の間隔自動でプロビジョニングが開始されます。
SSO先のアカウントを割り当て
ここからはAWS側のコンソール画面に戻ります。
まずはアカウントにSSOする際の許可を設定します。
IAM Identity Center > 許可セット > 許可セットを作成
ここでは、AWSの管理者を割り当てるグループにAdministratorAccessの許可を付与します。

次へを押下します。
セッション時間はデフォルトで1時間です。8時間に変更します。

次へを押下して、確認画面が表示されますので問題なければ作成します。
マルチアカウント許可 > AWSアカウント
参加させたいアカウントを選択してユーザーまたはグループを割り当てします。

割り当てるユーザーまたはグループを選択して次へを押下します。

先ほど作成した許可セットを選択して次へを押下します。
確認画面が表示されますので、問題がなければ送信を押下します。

以上でEntra IDからフェデレーションしたIDをIAM Identity Centerに同期させる設定は完了です。
同期は40分間隔で実施されるようなのでひとまず作業を中断し1時間後に確認します。
1時間後、追加したユーザーアカウントでMS365のコンソール画面からアプリを確認します。

無事同期が完了したようです。
IAM Identity Centerのアプリを選択するとAWS側のサインイン画面が表示されます。

アカウントを選択するとAdministratorAccessの権限でサインイン可能な状態でした。

以上で今回の設定は完了です。
Entra ID と IAM Identity Centerを連携した後は、下記の手順を繰り返して組織のメンバーがSSOできる環境を増やしていきます。
- AWSアカウントをOrganizationsに参加させる
- MS365からフェデレーション認証が可能なグループを増やす
5. 今後の課題
IDフェデレーション認証でサインインするユーザーはIAMなしでAWSアカウントにSSO可能になります。
当初のIAMの管理コストを減らすという目的は達成しましたが、今回の方法では下記のような問題が発生します。
- EntraIDからフェデレーション認証する方式ではMFAデバイスを設定できない
- IAMユーザーのようにアクセスキーがない(従来の方法でローカルからAWS CLIを利用できない)
弊社のケースでは、MFAについてはAzure側でサインインにMFAを採用していることもあり、AWS側では特に不要となりました。
また、CLIについてはSSOを使用して認証を使用することになりました。
こちらはまた別の機会に記事として作成する予定です。
- AWSの認証情報プロファイルを利用し、ロールベースのアクセス権限を一時的に取得することで対応
AWS CLI で IAM ロールを使用する - AWS Command Line Interface
6. まとめ
- 認証方法をSSOに変更することで、AWS Organizationsをより有意に利用できます。
- IDソリューションがすでに用意されている場合、AWS Identity Centerで簡単に認証を設定できます。
- IAM Identity CenterはAzure以外のフェデレーション認証もサポートしていますので、様々なIDからサインインすることができます。
Discussion