IAM Identity Centerを使って複数アカウント管理する。（その３：外部AWSアカウントへのSAML）

# はじめに
前回までで自組織に対する`IAM Identity Center`でのアクセスについて試してみたため、今回は自組織とは異なる外部AWSアカウントに対して`IAM Identity Center`からSAML接続を行う方法について試してみようと思います。

- 【前】[IAM Identity Centerを使って複数アカウント管理する。（その２：CLIでのアクセスと管理の委任）](https://qiita.com/sakai00kou/items/bed60d0bd428590ed8b5)
- 【次】[IAM Identity Centerを使って複数アカウント管理する。（その４：GHECへのSAML）](https://qiita.com/sakai00kou/items/2a35a58b5dada7e5f285)

# IAM Identity CenterからのSAML接続について
`IAM Identity Center`はSAML2.0を使用したIDフェデレーションがサポートされているため、SAMLがサポートされている様々なサービスプロバイダとの接続連携が行なえます。

`IAM Identity Center`と連携を行うことで、`IAM Identity Center`のポータル画面から`IAM Identity Center`の認証情報を使用して外部のサービスプロバイダに接続することができます。

`IAM Identity Center`も様々なサービスプロバイダがサポートされておりますが、今回は組織外となるAWSアカウントに対して`IAM Identity Center`からSAML接続を行ってみようと思います。

# 接続構成
組織外のAWSアカウントへの接続を試してみようにも、組織外となるAWSアカウントを持っていないため、今回はメンバーアカウントを組織外AWSアカウントとみなし、ルートアカウントからSAML接続してみようと思います。

尚、前回までの記事の設定でルートアカウント、メンバーアカウント共に`IAM Identity Center`から接続できるようになっているため、メンバーアカウントは`IAM Identity Center`から接続できないよう許可セットを外し、併せて委任設定もルートアカウント側に戻してあります。

また、今回の設定は自組織側となる`IAM Identity Center`の設定と外部AWSアカウント側の設定とを交互に設定していくため、自組織側作業は（**自組織**）、外部AWSアカウント側作業は（**外部組織**）と表記します。

- [アプリケーションの追加（自組織）](#アプリケーションの追加自組織)
- [IDプロバイダの追加（外部組織）](#idプロバイダの追加外部組織)
- [IAMロールの作成（外部組織）](#iamロールの作成外部組織)
- [属性マッピングの設定（自組織）](#属性マッピングの設定自組織)
- [IAM Identity Centerからのログイン（自組織）](#iam-identity-centerからのログイン自組織)

## アプリケーションの追加（自組織）
`IAM Identity Center`に外部組織用のアプリケーションを追加するため、「**IAM Identity Center**」→「**アプリケーション割り当て**」→「**アプリケーション**」から「**アプリケーションを追加**」を選択して設定していきます。

![Monosnap_20230315_190110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/06c36664-7201-8ed7-1b53-1a90c2e93090.png)

「**カスタムアプリケーション**」と「**事前統合アプリケーション**」があるので、「**事前統合アプリケーション**」から「**External AWS Account**」を選択して「**次**」に進みます。

![Monosnap_20230315_190249.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/8fe9f378-3473-80db-f217-a8ad3be7314b.png)

任意のアプリケーションの表示名を指定します。

また、「**ステップバイステップの手順を表示**」を選択すると、設定手順が表示されるため、設定時に開いておくと良いかと思います。

![Monosnap_20230315_190647.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/5c1dacce-3077-4304-77c8-318551517515.png)

「**IAM Identity Centerメタデータ**」の項目より、後ほど外部組織側設定で使用する「**IAM Identity Center SAMLメタデータファイル**」をダウンロードしておきます。

![Monosnap_20230315_190722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/ad717a3d-fc14-efb9-513d-a4a31ec3cf05.png)

「**アプリケーションのプロパティ**」と「**アプリケーションメタデータ**」は今回の場合、デフォルトで問題ないので、そのまま「**送信**」を選択します。

![Monosnap_20230315_190859.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/4e40dc51-c40e-a4f4-3c08-8d1807c6d42e.png)

「**ユーザーを割り当て**」を選択して、外部組織にアクセスさせたいユーザ・グループを選択します。

![Monosnap_20230315_191428.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/552ec729-8d9d-e923-b79a-9a7866cc6907.png)

![Monosnap_20230315_191459.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f73bde65-73d2-2c80-db1f-0cc51cdf3273.png)

## IDプロバイダの追加（外部組織）
外部組織側のアカウントに移り、`IAM Identity Center`からの認証を受け付けるIDプロバイダの設定を行っていきます。

「**IAM**」→「**アクセス管理**」→「**IDプロバイダ**」の「**プロバイダを追加**」より設定を行っていきます。

![Monosnap_20230315_191854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/c55b7cf9-8cb6-f1ef-138b-11907d20dc16.png)

以下表、図のように設定を行い、「**プロバイダを追加**」を選択。

|項目|設定|
|:--|:--|
|プロバイダのタイプ|SAML|
|プロバイダ名|任意（今回はIdentityCenterSAML）
|メタデータドキュメント|先程ダウンロードしたメタデータドキュメントを選択|

![Monosnap_20230315_192040.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/59b2ed2b-7a5d-5417-947c-cc11f44f37b3.png)

以下のように概要画面が表示されるため、後ほど`IAM Identity Center`側作業で必要となるARNを控えて「**ロールの割り当て**」でIDプロバイダと結びつけるIAMロールを作成します。

![Monosnap_20230315_192243.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f4e82234-8b67-c32f-6317-9d78fdbb718c.png)

## IAMロールの作成（外部組織）
前手順に引き続き、設定を行っていきます。

「**新しいロールを作成**」を選択し、「**次へ**」進みます。

![Monosnap_20230315_192423.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/6b45bd6b-c0b6-bf22-90f6-53a16850b337.png)

以下表、図のように設定を行い、「**次のステップ：アクセス権限**」を選択。

|項目|設定|
|:--|:--|
|信頼されたエンティティの種類を選択|SAML 2.0 フェデレーション|
|SAMLプロバイダー|IdentityCenterSAML（先程作成したIDプロバイダ）|
||プログラムによるアクセスとAWSマネジメントコンソールによるアクセスを許可する|
|属性|SAML:aud|
|値|https://signin.aws.amazon.com/saml|
|条件|なし|

![Monosnap_20230315_192514.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/07f37d57-0e03-cf9e-10f9-4ccfba10f0a4.png)

`IAM Identity Center`からのアクセス時に適用したいポリシーを選択して「**次のステップ：タグ**」を選択。

![Monosnap_20230315_192613.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/092fd2b0-b1f0-54bf-2437-524e4c3a086a.png)

タグ設定は今回は特に設定せず次へ進み、ロール名の指定を行い、「**ロールの作成**」で作成します。

![Monosnap_20230315_192711.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/adc04d61-bdb7-e694-099e-976cf567f65f.png)

作成後、`IAM Identity Center`側の設定で必要となるIAMロールのARNを控えておきます。

![Monosnap_20230315_204531.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/5c63a195-3f46-e081-8813-ee50f1bd1d6d.png)

## 属性マッピングの設定（自組織）
再度、`IAM Identity Center`の設定画面に戻り、「**IAM Identity Center**」→「**アプリケーション割り当て**」→「**アプリケーション**」の「**設定済み**」タブから先程作成したアプリケーション名を選択します。

![Monosnap_20230315_205135.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/d2a54f1f-baf8-e7f5-7af6-7e6ae51a72cd.png)

「**アクション**」から「**属性マッピングを編集**」を選択します。

![Monosnap_20230315_205445.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/e6ef3a64-953f-aac7-1d01-7ef216daf1df.png)

下記の図の１行目と２行目はデフォルトで記載されているため、新たに３行目を追加し、以下のように設定します。

また、以下表２列目のValue値の書式については`arn:aws:iam::[ACCOUNTID]:saml-provider/[SAMLPROVIDERNAME],arn:aws:iam:: [ACCOUNTID]:role/[ROLENAME]`となり、先程控えたIDプロバイダのARNとIAMロールのARNを結合したものを記載します。

|アプリケーションのユーザー属性|この文字列値またはIAM Identity Centerのユーザー属性にマッピング|形式|備考|
|:--|:--|:--|:--|
|Subject|${user:email}|persistent|デフォルトで入力済み|
|https://aws.amazon.com/SAML/Attributes/RoleSessionName|${user:email}|unspecified|デフォルトで入力済み|
|https://aws.amazon.com/SAML/Attributes/Role|arn:aws:iam::xxxxxxxxxxxx:saml-provider/IdentityCenterSAML,<br>arn:aws:iam::xxxxxxxxxxxx:role/IdentityCenterSAML-Role|unspecified|ステップバイステップ手順に書式記載あり|

![Monosnap_20230315_194116.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/c5da12f9-d93d-7aa8-917d-270f5f5948c7.png)

## IAM Identity Centerからのログイン（自組織）
上記までの手順を実施することで、`IAM Identity Center`のポータル画面に外部組織へログインするためのアプリケーションが表示されるようになっているため、表示されているアプリケーションを選択することで外部組織のAWSアカウントにログインできるようになります。

![Monosnap_20230315_194419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/6cc84085-61f5-e0c0-6180-1aa742949418.png)

# おわりに
今回は`IAM Identity Center`に外部組織のAWSアカウントに接続するためのアプリケーションを追加し、シングルサインオンで接続できるようにしました。

今回は外部のAWSアカウントの設定を行いましたが、同じように設定を行うことで、他のサービスプロバイダへの接続も行えるようになります。

アプリケーション作成時に表示される「**ステップバイステップの手順を表示**」と、各サービスプロバイダのマニュアルを見れば、今回と同様にSAMLによるシングルサインオンができるはずなので、認証を`IAM Identity Center`にまとめてしまうのも良いかもしれません。

次回は`GitHub Enterprise Cloud`に対して`IAM Identity Center`からSAMLアクセスを行う方法について試してみようと思います。