【AWS】IAM vs IAM Identity Center：違いとベストプラクティスガイド

### はじめに
今更、となりますが。。
IAMコンソールからIAMユーザを作ろうとすると以下の選択が表示れます。
* **Identity Centerでユーザを指定する- 推奨**
* **IAMユーザを作成します**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/a3ea1612-485c-e56a-7405-693d206aaf94.png)

そこで、以下について分かりやすく解説してみます。

* IAMとIAM Identity Centerの違い
* IAM Identity Centerのベストプラクティス

### IAMとIAM Identity Centerの違い

IAMとIAM Identity Centerでユーザやグループを作成するときの違いをみていきます。

#### IAMの場合
IAMでIAMユーザやIAMグループを作成する場合は以下のイメージ。
* AWSアカウントの中で、IAMグループとIAMユーザを作成する。
* IAMユーザまたはIAMグループにIAMロールを割り当てる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/f7433eb2-d6e1-4109-1cf7-46f15c97bb3b.png)

ログインイメージは以下の感じ。
* IAMユーザでログインするとAWSコンソール画面が表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/89372116-985d-4846-eb7f-2434de8c46bc.png)

#### IAM Identity Centerの場合
IAM Identity Centerでユーザやグループを作成する場合は以下のイメージ。
* 複数のAWSアカウントを管理する。
* 作成したユーザとグループはAWSアカウントに割り当てる。
* ユーザまたはグループに権限セットを割り当てる。権限セットはIAMロールの集まり。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/caaa05ae-eed0-2005-c7fc-a5068d807ea7.png)

ログインイメージは以下。
* ユーザでログインすると権限セット選択画面が表示される。
* 選択した権限セットでのAWSコンソール画面が表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/81d8f67e-76ab-a471-53cf-93a456c233a4.png)

ポイントとしては、IAMで作成するIAMユーザやIAMグループと、IAM Identity Centerで作成するユーザとグループは別物です。
振る舞いとして、権限をもってAWSサービスを使うことに変わりはありませんが、IAM Identity Centerの方が概念が大きいです。

:::note warn
IAMで作成したユーザやグループは**IAMユーザ**、**IAMグループ**と表記しています。
IAM Identity Centerで作成したユーザやグループは、単に、**ユーザ**、**グループ**と表記しています。
:::

もちろん、IAM Identity Centerで割り当てたAWSアカウントの中でもIAMは利用できるので、IAMユーザやIAMグループを作成することができます。

ただ、過去にIAMでIAMユーザやIAMグループを作成している場合、それをそのままIAM Identity Centerのユーザやグループには移行できないですね。新規にIAM Identity Centerでユーザやグループを作成する必要がありそう。

ちなみに、AWSアカウントというのは、簡単に言うとAWSサービスが利用できる環境。
AWSアカウントはAWS Organizationsで一元管理でき、IAM Identity Centerと統合されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/5ba652af-72a7-1469-6405-c007a6baa115.png)

#### IAM Identity Centerは何が良いの？
ここでのIAM Identity Centerを推奨するメリット。
* シングルサインオン (SSO)
一度の認証で複数のAWSアカウントにアクセスできるため、ユーザーの作業効率が向上します。
* 管理の簡素化
複数のAWSアカウントのアクセス管理を一元化できるため、管理が簡単になります。

### IAM Identity Centerのベストプラクティス

IAM Identity Centerを利用してみて、こうした方が良いかな、というのをまとめてみました。
（※個人意見）

* **AWSアカウントのEメールは個人のメールアドレスではなくAWSアカウント専用のメーリングリストが良い。**
AWSアカウントに指定できるメールアドレスは、他のAWSアカウントで指定されていないもの。
複数AWSアカウントを作成するため、個人のメールアドレスでは対応しきれない。
AWSアカウントの利用目的に沿ったメールアドレスが良い。
例えば、プロジェクト単位にAWSアカウントを作成するのであれば、プロジェクトのメーリングリストを指定する。
AWSアカウントは、組織単位、プロジェクト単位で作成する。さらに環境単位で分けることもある。

あとは、

* **グループ名はAWSアカウント名をprefixにするのが良い。**
グループはAWSアカウントに割り当てる。
どのAWSアカウントに割り当てるべきかを見てわかるようにAWSアカウント名をprefixにする。
例えば、AWSアカウントAccountXのグループGroupAの場合、AccountX_GroupAとする。

* **権限セットはグループ名にするのが良い。**
権限セットはユーザまたはグループに割り当てる。基本的にはグループに割り当てる。
どのグループに割り当てるべきかを見てわかるようにグループ名にする。
例えば、グループAccountX_GroupAの場合、権限セットAccountX_GroupAとする。

　グループに割り当てたユーザに別の権限セットを割り当てたい場合
　別のグループを作成して、別の権限セットを作成する。
　そのグループに権限セットを割り当て、そのグループにユーザを割り当てる。

というのも、IAM Identity Centerのコンソール画面からAWSアカウントにユーザやグループを割り当てるのですが、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/d5ece486-d3b2-5cfc-a650-c8a0d57a2ebf.png)

作成したグループがそのまま一覧に並ぶので、どのグループを割り当てるのか見分けがつきにくい。

（ユーザとグループの選択画面）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/066acaf3-9d7d-1dc2-3528-8fb2d1804fb3.png)

作成した権限セットがそのまま一覧に並ぶので、どの権限セットを割り当てるのか見分けがつきにくい。

（権限セットを選択画面）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/97959e0e-dda4-dc22-0331-62ece021c992.png)

上記を回避するために**どのAWSアカウントに割り当てるのか一目でわかる命名規則**が良いと思います。

### おわりに
* IAMは、STS（Security Token Service）とかPassRoleとかあるので理解が大変。。。
:::note info
AWS IAMのSTS（Security Token Service）
STSは、一時的なセキュリティ認証情報を提供するサービスです。これにより、信頼されたユーザーがAWSリソースにアクセスするための一時的な認証情報を取得できます。
:::
:::note info
AWS IAMのPassRole
PassRoleは、IAMロールを他のユーザーやサービスに渡すための権限です。例えば、あるユーザーが特定のIAMロールを使用するためには、そのロールを「PassRole」権限を持つユーザーに渡す必要があります。これにより、ユーザーはそのロールの権限を一時的に引き受けることができます。
:::
* 少しでもみなさんの助けになりますように！