IAM Identity Centerを使って複数アカウント管理する。（その１：IAM Identity Centerでのログイン）

# はじめに
仕事で初めて`IAM Identity Center`を使う機会があり、使ってみたらマルチアカウントの管理が想像以上にやりやすかったので、紹介しようと思います。

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

# IAM Identity Centerとは
`AWS Single Sign-on`の後継サービスとなり、`AWS Organizations`で複数アカウントを運用している環境で各ユーザを集約管理し、各アカウントへのログインを簡単に行えるようにするためのサービスです。

前提として、`AWS Organizations`を使用していることが条件となるため、`AWS Organizations`を使っていない場合は`IAM Identity Center`は使えません。

シングルサインオンは認証関連の連携を行う必要があり、個人的に嫌煙していたのですが、`IAM Identity Center`は、単純な構成で使う分には簡単な設定を行うだけで複数アカウントの管理が行えるので、そのような環境の場合はぜひ導入を検討してみてください。

# IAM Identity Centerの構成
`AWS Organizations`で以下のようなアカウントを管理している場合、`IAM Identity Center`を導入することで、いちいちアカウントごとのログインページからログインしたり、あるアカウントからスイッチロールしたりしなくても、`IAM Identity Center`のポータル画面から簡単に複数のアカウントにログインすることができるようになります。

![IAM_IdentityCenter構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f0217e58-d831-5133-18e1-a3d169fb3b80.png)

# IAM Identity Centerの設定
以下より実際に`IAM Identity Center`の設定を行っていきます。

- [IAM Identity Centerの有効化](#iam-identity-centerの有効化)
- [多要素認証の設定](#多要素認証の設定)
- [ユーザとグループの作成](#ユーザとグループの作成)
- [許可セットについて](#許可セットについて)
- [許可セットの作成](#許可セットの作成)
- [AWSアカウントとの結びつけ](#awsアカウントとの結びつけ)
- [MFAデバイスの登録](#mfaデバイスの登録)
- [IAM Identity Centerへのログイン](#iam-identity-centerへのログイン)

## IAM Identity Centerの有効化
ルートアカウントにて`IAM Identity Center`の画面から「**有効にする**」を選択するだけで有効化できます。

![Monosnap_20230315_091520.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/803dd38e-6e85-fc07-4caa-363a595393af.png)

## 多要素認証の設定
`IAM Identity Center`の「**設定**」 →「**認証**」→「**多要素認証**」の「**設定**」より多要素認証（MFA）の設定が行えます。

`IAM Identity Center`全体の設定となるため、ユーザごとに設定を変更することはできませんが、以下のようにサインイン時にMFA登録を要求することができるので、`AWS Organizations`の`SCP`やIAMロールで権限設定せずとも、簡単にログインユーザ全員にMFAを強制できるため、全体の統制を取るためにも有用です。

今回は以下のように「**サインイン時にMFAデバイスを登録するよう要求する**」を選択し、MFAを強制しようと思います。

![Monosnap_20230315_100329.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/eff694b7-a6d1-47b5-21f1-358f82a5dadb.png)

## ユーザとグループの作成
`IAM Identity Center`のユーザ・グループを作成していきます。

`IAM Identity Center`のユーザ・グループは、各アカウントで作成するIAMユーザ・グループとは異なるため、`IAM Identity Center`でユーザ・グループを作成しても、各アカウント側にはIAMユーザ・グループは作成されません。

接続構成としては`IAM Identity Center`から各アカウントに内部的にスイッチロールで接続することで、各アカウント側にはユーザ・グループの作成は行われず、`IAM Identity Center`で集中管理できるようになっているようです。

「**IAM Identity Center**」→「**ユーザー**」の「**ユーザーを追加**」からユーザを登録します。

![Monosnap_20230315_094402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/fd1ef8b6-80aa-af98-9e6c-a8d7aa5ff094.png)

ユーザの作成は、以下の項目が必須項目となるため、各ユーザごとにそれぞれ登録を行います。

また、必須項目以外にも、「**お問い合わせ方法**」、「**ジョブ関連情報**」、「**アドレス**」、「**環境設定**」、「**追加の属性**」をオプションとして登録できるため、必要に応じて登録を行い、「**次へ**」を選択します。

![Monosnap_20230315_094449.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/4f273d6a-83e9-8049-b4ff-f7c665f7bb4c.png)

まだグループを作成していない場合、以下の画面からグループを作成できるので、「**グループを作成**」を選択して、グループを作成します。

![Monosnap_20230315_094954.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/af1b96c9-83d0-5504-bdd5-bd396a29aead.png)

別タブでグループ作成の画面が開くため、グループ名を指定し、「**グループを作成**」を選択します。

![Monosnap_20230315_095120.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/4b315078-bb8d-1628-4281-69504ce0c9d7.png)

グループを作成したら、ユーザ作成画面に戻り、リロードボタンを選択すると作成したグループが表示されるので、グループ名を選択し、「**次へ**」進みます。

![Monosnap_20230315_095324.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/3398a397-d5d0-42b7-d79c-40bccc9fbe1b.png)

確認画面で問題なければ「**ユーザーを追加**」でユーザ作成します。

作成後、登録ユーザに以下のようなメールが届くため、「**Accept invitation**」を選択します。

![Monosnap_20230315_095802.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/6af88927-ea26-e7fe-c148-b2804268a22b.png)

「**Accept invitation**」を選択することで、初期パスワード設定画面が開くため、各ユーザ側でパスワード設定してもらいます。

![Monosnap_20230315_100037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/d7cee570-0740-45ee-a485-a6960148eff2.png)

ちなみに、ユーザ作成時、「**このユーザーと共有できるワンタイムパスワードを生成します。**」を選択した場合は以下のような画面が表示されます。

![Monosnap_20230315_101649.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/e9949034-3f34-e32a-82e3-52c50a1fa2e0.png)

ただし、`IAM Identity Center`からのメール検証が必要となるため、その場合はユーザの詳細画面から「**Eメール検証リンクを送信**」で検証を行います。

![Monosnap_20230315_102126.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/1018d481-b9ae-584e-1823-a6fda67ab973.png)

## 許可セットについて
許可セットはIAMユーザやグループに割り当てるIAMポリシーと同等の役割を持つ機能となりますが、違いとしては、1つの許可セットで複数のアカウントを結びつけることができるため、各アカウント側でいちいち`AdministratorAccess`ポリシーや`ReadOnlyAccess`ポリシー等を作成する必要がありません。

また、ユーザやグループに許可セットを割り当てる際、複数の許可セットを割り当てることもできるため、例えば設定作業用のフルアクセスポリシーと設定確認用のリードオンリーアクセスポリシー両方を付与して、作業時以外はリードオンリーアクセス権限を持つ許可セットでアクセスし、作業時のみフルアクセスを持つ許可セットでアクセスするといったことも簡単に実装可能です。

今までは各アカウントごとにIAMポリシーを作成していたのが、`IAM Identity Center`で集約管理することができるので、権限設定の見通しもよく、あるアカウントだけ権限設定を忘れたといった事態も軽減できるかと思います。

![許可セットの紐付け.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/e9722dc9-7512-7ec4-0f7d-3d5dc80922ec.png)

## 許可セットの作成
「**マルチアカウント許可**」→「**許可セット**」より「**許可セットを作成**」を選択し、許可セットを設定していきます。

![Monosnap_20230315_104113.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/952f59fc-b0f3-698e-52fd-f681ce126bcc.png)

許可セットのポリシーはプリセットとして用途ごとに作成されたAWSマネージドポリシーを選択することもでき、「**カスタム許可セット**」から細かくポリシーを作成することもできます。

今回は「**事前定義された許可セット**」から「**AdministratorAccess**」を選択し、進めていきます。

![Monosnap_20230315_104152.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/c88d648c-cad4-25da-3356-108e61127531.png)

許可セット名やセッション期間などを設定し、次へ進みます。

また、「**リレー状態の設定**」は、ログインして各AWSアカウントにアクセスする際、通常はAWSマネジメントコンソールのトップ画面に遷移しますが、例えば請求画面を直接表示させたい場合などに、ここにURLを指定することでトップ画面が請求画面になるそうです。

![Monosnap_20230315_104303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f64468c4-ce02-ab88-d977-5504a7ea9079.png)

後の手順で使おうと思うので、同じように「**ReadOnlyAccess**」の許可セットも作っておきます。

## AWSアカウントとの結びつけ
先程作成したユーザ・グループ、許可セットとAWSアカウントを結びつけていきます。

「**マルチアカウント許可**」→「**AWSアカウント**」からユーザ・グループ、許可セットを結びつけたいAWSアカウントを選択して「**ユーザーまたはグループを割り当て**」を選択します。

![Monosnap_20230315_115049.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/66c0c9df-89ea-2160-fba4-f9b6658ab7bd.png)

結びつけるユーザ、またはグループを選択できるので、任意のユーザもしくはグループを選択し、「**次へ**」を選択します。

![Monosnap_20230315_115315.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/cbe44ca1-5f70-0f5b-44c5-beba4c6ba32b.png)

結びつける許可セットを選択します。

![Monosnap_20230315_115922.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/707602b1-e743-b67d-df4d-fc4f4d69f978.png)

下の画面のあと、確認画面が表示されるため、「**送信**」を選択することで、ユーザ・グループ、許可セットとAWSアカウントの結びつけができます。

「**AWSアカウント**」の画面に戻ると、どのアカウントにどの許可セットが割り当てられているかが確認できるので、想定の許可セットが割り当てられているかはこちらから確認します。

![Monosnap_20230315_120447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/108cfe21-8e52-7ead-f503-5a8cf57de389.png)

また、割り当てられたユーザ・グループは、少し分かりづらいですが、「**マルチアカウント許可**」→「**AWSアカウント**」→任意のアカウントの詳細画面→「**ユーザーとグループ**」タブから確認できます。

![Monosnap_20230315_121315.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/535737ad-bbc2-9c8c-3ff3-622fb3269ca6.png)

## MFAデバイスの登録
初期パスワード設定時に送付されたメールアドレスに記載されているURLにアクセスすることで`IAM Identity Center`のログイン画面が開きます。

また先程の設定よりMFA登録を要求するようにしていると、以下のようにMFAデバイス登録が促され、登録しないと先に進めないため、全ユーザにMFAを強制することができます。

![Monosnap_20230315_102546.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/66d504f2-40fb-30fd-5d31-80c15d9b3772.png)

## IAM Identity Centerへのログイン
MFAデバイス登録後、`IAM Identity Center`にログインすると各アカウントにログインするためのポータル画面が表示されます。

アクセスしたいアカウント、および許可ポリシーの「**Management console**」を選択することで、指定のアカウントのAWSマネジメントコンソールへ遷移します。

今回の場合、ルートアカウントとメンバーアカウントに`AdministratorAccess`と`ReadOnlyAccess`の許可セットをそれぞれ結びつけているため、以下のように表示されます。

もちろん、結びつけたユーザ・グループごとに画面表示も変わってくるため、あるユーザはメンバーアカウントと`ReadOnlyAccess`しか表示されなかったり別の許可セットが表示されたりします。

![Monosnap_20230315_132741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f15bb4e9-63e1-f2e8-3e34-a127fae3b598.png)

## おわりに
今回は`IAM Identity Center`の基本的な設定を行い、実際にユーザログインするところまで実施しました。

複数アカウントそれぞれにユーザ・グループ設定やIAMポリシー設定を行い、運用している方や、スイッチロールでいくつものアカウントを行き来している方は、`IAM Identity Center`を導入することで、今までの運用が大分改善されることが、今回の記事だけでも感じ取って頂けたかと思います。

次回はコマンドラインのやり方についてまとめてみようと思います。