AWS IAM Identity CenterとMicrosoft Entra IDを統合させてみる

この記事は[BeeX Advent Calendar 2023](https://qiita.com/advent-calendar/2023/beex)の24日目の記事です。
※AWSアップデートのことについて書こうとしてましたが、思ったよりも検証に時間がかかりそうだったので急遽ネタ変更しました。

# はじめに
タイトル通り、AWS IAM Identity CenterとMicrosoft Entra IDを統合させてみましたので、記録として残しておきます。

手順としては以下を参考にしました。

https://learn.microsoft.com/ja-jp/entra/identity/saas-apps/aws-single-sign-on-tutorial

尚、検証用のEntra IDは以下の方法で準備しました。

https://www.softbanktech.co.jp/special/blog/cloud_blog/2022/0120/

# 作業内容
## 前提条件
ドキュメントには以下の2つが前提条件として記載されていました。

- Microsoft Entra サブスクリプション。 
- AWS IAM Identity Center が有効なサブスクリプション。

今回はどちらも事前に準備済みでしたので、説明は省略します。

## Microsoft側作業
### Microsoft Entra ID側でアプリケーションを追加する
Entra IDとIdentity Centerを統合するには、Entra ID側でエンタープライズアプリケーションを追加する必要があります。

Entra IDのポータルから「エンタープライズアプリケーション」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/73d87b87-596f-60b1-ff79-325f50f8af0c.png)

「新しいアプリケーション」画面で"AWS IAM Identity Center"を検索し、出てきたアプリを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/d02de268-743d-fa5a-a78c-296dbbc5ff85.png)

以下のような画面が表示されるので、何も変更せずに作成ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/77623875-6deb-d8ef-b9bf-a0743372384f.png)

少し待つとアプリが追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/24bb40b7-c219-e941-a073-ad080ef1fcca.png)


### Microsoft Entra SSOを有効にする
同じ画面の左ペインからシングルアサインオンを選択し、表示されたシングルサインオン方式からSAMLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/21ff97f3-5bde-72d7-cb6d-9a5f9943898d.png)

セットアップ画面に遷移するので、基本的なSAML構成の編集ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/708cfc81-fad3-ce78-6328-57d0dfe1e791.png)

ここではSAML構成を設定します。必須となっている識別子と応答URLの2つを追加する必要があります。
具体的なその2つの設定値は、本記事下部の「AWS IAM Identity CenterのSSOを有効にする」の手順で確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/5b24a66e-1c92-b82b-744d-8b2a492a403f.png)

以下のように設定して、Entra ID側の設定ができたら左上の保存ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/3e06a4b5-1595-ecb1-e20b-f06d99d07000.png)

あまりよくわかっていないですが、アプリケーションを構成する時は「IDP Initiatedモード」と「 SP開始モード」の2種類があり、「SP開始モード」で構成したい場合はサインオンURLに以下の形式でURLを設定する必要があるようです。
- [https://portal.sso.<REGION>.amazonaws.com/saml/assertion/<ID>]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/05cc98c9-0f65-05e3-b62c-c001afc281ca.png)

以下を見た限りだと、「IDP Initiatedモード」だとAzure ADのサインイン画面、「SP開始モード」だとAWSのサインイン画面が表示されるようです。
どちらの認証情報でログインするかによって選択する感じでしょうか。
今回はMicrosoft Entra IDの認証情報でサインインしたいので、「IDP Initiatedモード」で設定してみます。

https://qiita.com/Shinya-Yamaguchi/items/434fab8c39e806e69a88

「SAML証明書」設定内の「証明書（Base64）」と「フェデレーション メタデータXML」をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/0417c372-778a-92a9-eefd-2c0461afff1b.png)

「AWS IAM Identity Center (successor to AWS Single Sign-On) のセットアップ」設定内のURLや識別子をコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/eaf388c7-0159-f7ad-9665-1d6ee4a1b445.png)

ここまでできたらAWS側の設定に移ります

## AWS側作業
### AWS IAM Identity CenterのSSOを有効にする
個人所有のAWSアカウントでIdentity Centerを有効化しているので、Identity Center画面の設定から「アイデンティティソースを変更」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/59d90c5c-3b18-1904-369b-6b0eab34cf27.png)

外部IDプロバイダーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/9b2b9cf5-78d4-5977-ce77-f49c46c3f1b1.png)

サービスプロバイダーのメタデータが表示されるので、この値をMicrosoft Entra ID側で設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/81822bc9-cf30-59b2-8788-376b473734db.png)

「アイデンティティプロバイダーのメタデータ」設定では、Microsoft側の手順でダウンロードした2つのファイルをそれぞれ選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/d2d8d584-6cfd-7815-5f19-9e4b2a064a53.png)

確認画面が表示されるので、問題なければ"承諾"を入力し、ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/b1b12d07-cebc-cbc7-2099-c7babf27a53b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/46519163-ecee-270a-527b-7331e40cd87b.png)

アイデンティティソースや認証方法が変更されていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/cd09d30c-a5b6-6dc4-b14f-3cf95b9bbe91.png)

## テストユーザー作成
ここまでできたらSSO設定が双方できたので、テスト用のユーザーを作成して試してみます。

### Entra ID側作業
Entra IDのユーザー画面から新しいユーザーを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/5eca82c7-3c59-98de-e9e0-2a9f610cfcc9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/4f87a787-1ca8-3ebb-6f39-0b37f0c0f429.png)

作成したユーザーをEntra IDの「AWS IAM Identity Center」アプリケーション側でユーザーの割り当てを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/cd298576-ef18-b023-fc7e-4e9b6f259dcc.png)

作成したテストユーザーを選択して割り当てします。ロールは既定のままにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/f568ee8b-02ad-dd1b-19c5-a607e9e9e5db.png)

無事割り当てできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/a55bbd7f-5c08-2607-96c6-5b15ca6d2582.png)

### AWS側作業
AWS側でも同じようにテストユーザーを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/9ed2c375-60b1-533b-2498-8884660d15c1.png)

プライマリ情報を入力します。ユーザー名とEメールアドレスはMicrosoft側で作成したテストユーザーと一致させます。
※後述していますが、ユーザー名を「testuser」にするとうまくいかなかったため、Entra IDのユーザープリンシパル名である「testuser@xxxxxxxx.onmicrosoft.com」を設定してみてください。
※もしくは自動でEntra ID割り当てユーザー→Identity Centerユーザーにプロビジョニングしたい時は、本作業とテスト実行(1回目)の作業をスキップして、その次のトラブルシュート作業の自動プロビジョニング設定の手順に移ってください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/32e37c9c-35cc-4c64-64e1-533428d07b93.png)

AWSユーザー側の権限は事前に作成したグループに追加することで割り当てます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/8fca1247-d62b-c49b-bacc-d60ac702bde4.png)

ユーザーが作成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/a68d6cdd-a883-eb77-1607-1a6ba8d5951d.png)

## テスト実行(1回目)
SSO構成の構築とテストユーザーの作成・割り当てができたので、Microsoft側からテストを実施してみます。
作成したテストユーザーを使用して、Azureポータルにログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/0516cd6b-907f-cf07-fa66-9216e48594a4.png)

Entra IDのエンタープライズアプリケーションから「AWS IAM Identity Center」アプリケーションを表示し、シングルサインオン画面下部にテストボタンがあるので、これを押下してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/b3321313-6e95-d058-7ed0-a94f6a5c270c.png)

以下の画面が表示されるので、「サインインのテスト」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/47fc881a-2a61-479c-72ab-5ed3c7a20182.png)

認証情報を聞かれるので、必要な情報を入力してログインしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/664acc9e-9d85-9c63-8e4c-b3adf750f5e5.png)

「このコードは使用できません。もう一度試してください。」というエラーが発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/81acbbaf-5254-7e8d-8988-b31afc498fd0.png)

## トラブルシュート
プロビジョニングログを見ているとtestuserの作成でエラーが出ていることがわかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/fd5eb806-506b-a2df-8dc3-9c266c071533.png)

色々調べてみたところ、Entra ID側で作成したユーザーとIdentity Center側で作成したユーザーがうまくマッピングされていないことが原因じゃないかと思いました。
そのため、手動設定ではなくなってしまいますが、手動作成したIdentity Center側のユーザーを全て削除し、Entra ID→Identity Centerに自動プロビジョニングする設定を追加で行いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/4bc94abe-80a9-2672-130e-29898cc8702f.png)

以下の記事を参考にプロビジョニングを有効にしました。

https://ascii.jp/elem/000/004/138/4138746/

自動プロビジョニングを有効化し、Entra IDの「AWS IAM Identity Center」アプリケーション側から"プロビジョニングの再開"を押下しました。(必要かどうかはあまりわかってないです)
しばらく待つとプロビジョニングが成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/fdb42de6-97a0-0df6-e528-63dfc7e08909.png)

よく見たら「プロビジョニング間隔(固定)：40分」と表示されていたので、"プロビジョニングの再開"を押下しなくても反映されたのかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/ef9bb7d2-57d9-7c75-8e6e-81bcb2c0c2ec.png)

AWS IAM Identity Center側にも無事反映されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/46f61e3e-4dcc-cb8b-b8d4-ac1eb4b9fc74.png)

## テスト実行(2回目)
もう一度Entra IDのシングルサインオン画面からテストを実行すると、今度はエラーが出ずにAWS画面にアクセスできました。(権限設定はまだしていないので、ログイン先のAWSアカウントは何も表示されていません)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/ddd12441-03da-7eb9-99f7-cdb6163a1908.png)

権限を割り当てるために、Identity CenterのコンソールのAWSアカウントメニューから、割り当てするAWSアカウントを選択し、「ユーザーまたはグループを割り当て」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/5ee37942-9238-f15d-d2a1-1815f615827f.png)

権限を割り当てる対象と許可セットを選択し、設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/5172c6b5-02e5-b405-40ea-cf275e40d58a.png)

もう一度テストを実行すると、今度は許可したAWSアカウントが表示されていることを確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/83af752f-b1a9-3267-4c86-f28cac6c5959.png)

## AWS アクセスポータルの URLからログイン
最後にIdentity Center画面の「AWS アクセスポータルのURL」からアクセスしたときに想定通り認証が行われるか確認します。

Identity Center画面のURLはawsドメインですが、ブラウザからアクセスするとMicrosoftドメインのURLにリダイレクトされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/b9b09747-0549-f5e6-8310-6112212847a4.png)

認証情報を入力して、AWSアクセスポータルが表示されることも確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/551676a9-00eb-569b-3b2f-50d4fbc63e3b.png)

# 追記
後で気づきましたが、ドキュメントを見返すと以下の記載があったことに気が付きました。

>AWS IAM Identity Center に入力したユーザー名が、ユーザーの Microsoft Entra サインイン名と一致していることを確認します。 これにより、認証の問題を回避することができます。

https://learn.microsoft.com/ja-jp/entra/identity/saas-apps/aws-single-sign-on-tutorial

自動プロビジョニングした後のIdentity Center側のユーザー名を見ると「testuser@xxxxxxxx.onmicrosoft.com」となっておりました。
ドキュメント内の手順では「testuser」で良いと記載されていましたが、もしかしたら「testuser@xxxxxxxx.onmicrosoft.com」という名前でユーザーを作成しておけば自動プロビジョニングにしなくてもうまくいったのかもしれません。

# おわりに
設定できることは知っていましたが、やったことはなかったので試してみました。
また、自分が確認した限りはGoogle等を検索したときに出てくる統合検証記事は名前が変わる前(AzureAD)のものがほとんどで、名前が変わって(Entra ID)からの記事はなかったので、供給する意味合いでも書いてみました。

この記事がどなたかの参考になれば幸いです。