「IAM」で権限付与の流れを体験してみた。（備忘録）

#前置き
これは、エンジニア（になる予定）のAWS初学者による備忘録です。

今回は、AWSの権限管理サービス「IAM」の理解を深めるために、
IAMポリシーやIAMグループ、IAMロールの設定を行い、
IAMユーザーに適切な権限を付与していきたいと思います。
#今回やること
管理者・開発者・運用者それぞれが、開発環境・検証環境・本番環境において
適切な権限でアクセスできるようにしていきたいと思います。

具体的には、各環境に管理者用と開発者（運用者）用のIAMロールを配置して、
IAMロールにスイッチできる権限をIAMグループに付与していきます。
新規IAMユーザーを作成した際に役割ごとのIAMグループに所属させることで、
適切な権限を容易に付与することができ、比較的簡素な管理が可能となります。

構成は以下の通りです。
![test2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/cee0f51b-4680-34e1-035d-233738a90963.png)
下記のサイトを参考にさせていただきました。ありがとうございます。

https://dev.classmethod.jp/articles/switch-role-operation/


https://dev.classmethod.jp/articles/iam-mfa-policy/


※上記参考サイトや下記のサイト内の「3-3. IAM Roleを使った場合」のように、
　本来はIAMユーザーを作成するAWSアカウントと、
　各環境ごとのAWSアカウントというように分けて作成するべきなのですが、
　今回はお試しということで、同一アカウント内で作成します。

https://blog.serverworks.co.jp/tech/2020/02/03/multipleawsaccount/

#用語理解
・Assume : 引き受ける
　つまり、AssumeRoleとはIAMロールの権限をIAMユーザーが引き受ける操作のこと。
　スイッチする際はIAMロールが存在するAWSアカウントを指定する必要がある。
　スイッチロールとAssumeRoleは同じようなものと理解してOK。
　厳密には、AssumeRoleはAWSの用意するAPIの名前で、
　スイッチロールは「Roleを引き受けて権限をスイッチする」作業のこと。
　スイッチロールという目的のために、AssumeRole APIを発行する、というようなイメージ。

#作るもの
■IAMポリシー
・IAMUser_Manage_MFA : IAMユーザー自身がMFAを管理できるようにするポリシー

・管理者用ポリシー
　- IAMUser_MFA_True_Admin_Dev :
　IAMロール「Administrator_Member_Dev」にスイッチできるポリシー
　- IAMUser_MFA_True_Admin_Veri :
　IAMロール「Administrator_Member_Veri」にスイッチできるポリシー
　- IAMUser_MFA_True_Admin_Ope :
　IAMロール「Administrator_Member_Ope」にスイッチできるポリシー

・開発者用ポリシー
　- IAMUser_MFA_True_Dev_Dev :
　IAMロール「Developer_Member_Dev」にスイッチできるポリシー
　- IAMUser_MFA_True_Dev_Veri :
　IAMロール「Developer_Member_Veri」にスイッチできるポリシー

・運用者用ポリシー
　- IAMUser_MFA_True_Ope :
　IAMロール「Operator_Member」にスイッチできるポリシー

■IAMグループ
・IAMUser_Minimum_Permissions : IAMユーザーに以下の最低限の権限を付与するグループ
　- IAMUserChangePassword（AWS管理ポリシー） : パスワード変更
　- ReadOnlyAccess（AWS管理ポリシー） : 読み取り許可
　- IAMUser_Manage_MFA（ユーザー管理ポリシー） : MFA設定

・Administrator_Assume : IAMユーザーに以下のIAMポリシーを付与するグループ
　- IAMUser_MFA_True_Admin_Dev
　- IAMUser_MFA_True_Admin_Veri
　- IAMUser_MFA_True_Admin_Ope

・Developer_Assume : IAMユーザーに以下のIAMポリシーを付与するグループ
　- IAMUser_MFA_True_Dev_Dev
　- IAMUser_MFA_True_Dev_Veri

・Operator_Assume :
　IAMユーザーにIAMポリシー「Operator_Member」を付与するグループ

■IAMロール
・管理者用ロール
　- Administrator_Member_Dev :
　  IAMポリシー「AdministratorAccess」が付与された開発環境の管理者用ロール
　- Administrator_Member_Veri :
　  IAMポリシー「AdministratorAccess」が付与された検証環境の管理者用ロール
　- Administrator_Member_Ope :
　  IAMポリシー「AdministratorAccess」が付与された本番環境の管理者用ロール

・開発者用ロール
　- Developer_Member_Dev :
　  IAMポリシー「PowerUserAccess」が付与された開発環境の開発者用ロール
　- Developer_Member_Veri :
　  IAMポリシー「PowerUserAccess」が付与された検証環境の開発者用ロール

・運用者用ロール
　- Operator_Member :
　  IAMポリシー「PowerUserAccess」が付与された本番環境の運用者用ロール

■IAMユーザー
・Administrator2 : 管理者権限を持つことになるユーザー
　※私はすでに「Administrator」というIAMユーザーを作成しているため、
　　末尾に2を付けました。

・Developer : 開発者権限を持つことになるユーザー

・Operator : 運用者権限を持つことになるユーザー

　なお、各権限の定義は以下の通りです。
・管理者権限 : 全ての環境にアクセスでき、全ての操作が行える

・開発者権限 : 開発環境と検証環境にアクセスでき、操作制限がある

・運用者権限 : 本番環境にアクセスでき、操作制限がある

#手順
手順として合っているか分かりませんが、この流れの方が楽なのでこうします。
　　IAMポリシー作成　→　IAMグループ作成 / IAMロール作成　→　IAMユーザー作成
→　仮想MFA割り当て　→　IAMロールにスイッチ

#実際にやってみた
■IAMポリシー作成
IAMユーザー自身がMFAを管理できるようにするポリシー
「IAMUser_Manage_MFA」を例に見ていきます。
なお、説明のために赤枠、個人情報を隠すために黒枠を使用しておりますが、
実際の画面には表示されていないのでご注意ください。

まずはAWSにログインして、AWSマネジメントコンソールにいる状態から開始します。
「IAM」の画面に行きたいので、検索欄に「IAM」（「iam」でもいいです）と入力します。
![WS000060.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/a0c85301-c896-2548-37c1-adcb6edb55e5.jpeg)
「IAM」が表示されたら、「IAM」をクリックするかEnterキー押下で行けます。
![WS000061.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/2e5b35e9-e1d3-303b-4fed-e10a79914525.jpeg)
「IAMダッシュボード」が表示されたら、
左ペイン（左にあるメニューのことです）にある「ポリシー」をクリックします。
![WS000062.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/6a33c60e-a6e4-d45d-a3f4-fa991b1f79ae.jpeg)
現時点で管理されているIAMポリシーの一覧画面が表示されます。
IAMポリシーを作成したいので、
画面左上にある青色のボタン「ポリシーの作成」をクリックします。
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/e0797a0e-f16b-e3cc-882e-f94862211f64.jpeg)
IAMポリシーの作成画面が表示されます。
「JSON」タブをクリックすると、JSONコードを記述できる欄が表示されます。
![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/fd53a667-1c2b-48a1-8d2b-707d4c5cc272.jpeg)
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/b79ed721-536b-112c-1dc2-1e281a8768b1.jpeg)
この記述欄に以下のコードを入力してください。

※以下の値は置き換えて入力してください。
　・012345678901　→　マイアカウントの値（12桁の数字列です）

```json:IAMUser_Manage_MFA
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers"
            ],
            "Resource": [
                "arn:aws:iam::012345678901:user/"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListVirtualMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::012345678901:mfa/"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:EnableMFADevice",
                "iam:DeactivateMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::012345678901:user/${aws:username}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:DeleteVirtualMFADevice",
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::012345678901:mfa/${aws:username}"
            ]
        }
    ]
}
```
コードが入力できたら、画面右下の青色のボタン「次のステップ: タグ」をクリックします。

タグを追加する画面が表示されますが、
今回はタグを作成しないので、
画面右下の青色のボタン「次のステップ: 確認」をクリックします。
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/9344e675-3c83-218d-00d4-3283fa0acdbd.jpeg)
IAMポリシーの確認画面とともに、IAMポリシーの名前と説明を入力する欄が表示されます。
今回は名前を「IAMUser_Manage_MFA」と入力します。
説明は任意で構いませんが、同じく「IAMUser_Manage_MFA」と入力しておきます。

入力できたら、画面右下にある青色のボタン「ポリシーの作成」をクリックします。
![WS000050.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/7d16147f-79a5-5278-3676-d6fd548f5189.jpeg)
画面上部に「IAMUser_Manage_MFAが作成されました。」と表示されました。
これで、IAMポリシー「IAMUser_Manage_MFA」を作成できました。
![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/7a21d4a7-4746-b568-40b4-17182f918933.jpeg)
この例を参考にして、残り6つのIAMポリシーも作成していきます。
・IAMUser_MFA_True_Admin_Dev
・IAMUser_MFA_True_Admin_Veri
・IAMUser_MFA_True_Admin_Ope
・IAMUser_MFA_True_Dev_Dev
・IAMUser_MFA_True_Dev_Veri
・IAMUser_MFA_True_Ope
また、6つのIAMポリシーのJSONコードはほぼ同じなので、
「IAMUser_MFA_True_Admin_Dev」のコードのみ下記に載せます。
ただし、先ほど作成したIAMポリシーとはJSONコードが違いますのでご注意ください。

※以下の値は置き換えてください。
　・12345678910X　→　マイアカウントの値
　・dev-admin-switch-role　→　IAMロール名
　また、各IAMポリシーとIAMロール名の対応付けは以下の通りです。
・管理者用ポリシー
　- IAMUser_MFA_True_Admin_Dev : Administrator_Member_Dev
　- IAMUser_MFA_True_Admin_Veri : Administrator_Member_Veri
　- IAMUser_MFA_True_Admin_Ope : Administrator_Member_Ope

・開発者用ポリシー
　- IAMUser_MFA_True_Dev_Dev : Developer_Member_Dev
　- IAMUser_MFA_True_Dev_Veri : Developer_Member_Veri

・運用者用ポリシー
　- IAMUser_MFA_True_Ope : Operator_Member

```json:IAMUser_MFA_True_Admin_Dev
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::12345678910X:role/dev-admin-switch-role",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "true"
        }
      }
    }
  ]
}
```
全てのIAMポリシーを作成できたら、次はIAMグループ / IAMロールを作成します。

■IAMグループ作成
今回はIAMグループから作成していきますが、IAMロールから作成してもいいです。
IAMユーザーに最低限の権限を付与するグループ
「IAMUser_Minimum_Permissions」を例に見ていきます。

左ペインにある「グループ」をクリックします。
![WS000051.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/bf308d96-3fce-cf38-c86a-4979e4052218.jpeg)
IAMグループの一覧画面が表示されます。
IAMグループを作成したいので、
画面左上にある青色のボタン「新しいグループの作成」をクリックします。
![WS000007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/098d8ed2-0b15-5af3-6594-b12c8b28e49b.jpeg)
IAMグループ名の作成画面が表示されます。
グループ名に「IAMUser_Minimum_Permissions」と入力して、
画面右下の青色のボタン「次のステップ」をクリックします。
![WS000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/476bbe9d-9c0a-4aec-a1f5-324d19900e56.jpeg)
IAMポリシーのアタッチ画面が表示されます。
IAMポリシーは以下の3つをアタッチしてください。
・IAMUserChangePassword（AWS管理ポリシー）
・ReadOnlyAccess（AWS管理ポリシー）
・IAMUser_Manage_MFA（ユーザー管理ポリシー）
また、IAMポリシーはかなり多いので、検索欄を活用してフィルタリングしましょう。

アタッチできたら、画面右下の青色のボタン「次のステップ」をクリックします。
![WS000009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/7df729a6-ea4c-0d0e-7993-b8761d4f8246.jpeg)
IAMグループの確認画面が表示されます。
IAMグループ名とアタッチしたIAMポリシーが正しく表示されているか確認しましょう。

問題なければ、画面右下の青色のボタン「グループの作成」をクリックします。
![WS000010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/a4395d23-578a-f62f-d9b6-2aedc253b267.jpeg)
作成したIAMグループ「IAMUser_Minimum_Permissions」の表示が確認できます。
これで、IAMグループ「IAMUser_Minimum_Permissions」を作成できました。
![WS000011.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/f0dd48ad-439e-0f0f-bd08-8e3c42001573.jpeg)
この例を参考にして、残り3つのIAMグループも作成していきます。
・Administrator_Assume
・Developer_Assume
・Operator_Assume

また、IAMグループとアタッチするIAMポリシーの対応付けは以下の通りです。
・Administrator_Assume : IAMUser_MFA_True_Admin_Dev
　 　 　 　 　　   　　　　 IAMUser_MFA_True_Admin_Veri
　 　 　 　 　　   　　　　 IAMUser_MFA_True_Admin_Ope

・Developer_Assume : IAMUser_MFA_True_Dev_Dev
　 　 　　　 　 　　　IAMUser_MFA_True_Dev_Veri

・Operator_Assume : IAMUser_MFA_True_Ope

全てのIAMグループを作成できたら、次はIAMロールを作成します。

■IAMロール作成
IAMポリシー「AdministratorAccess」が付与されたロール
「Administrator_Member_Dev」を例に見ていきます。

左ペインにある「ロール」をクリックします。
![WS000012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/7f803368-0ba4-16e2-f474-36304f6111ad.jpeg)
IAMロールの一覧画面が表示されます。
IAMロールを作成したいので、
画面左上にある青色のボタン「ロールの作成」をクリックします。
![WS000013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/d842a245-1522-ea6a-eab8-766bc5437df3.jpeg)
IAMロールの作成画面が表示されます。
ここでは、信頼されたエンティティ（信頼関係のことです）の種類を選択します。
今回は「別のAWSアカウント」を選択します。
![WS000014.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/ffdaa493-b7d6-c4ea-1e10-80ca8eedfec6.jpeg)
すると、このIAMロールを使用できるアカウントを指定する必要があるので、
アカウントID（今回は「マイアカウントの値」でいいです）を入力します。

入力できたら、画面右下の青色のボタン「次のステップ: アクセス権限」をクリックします。
![WS000015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/9f5b2473-bd2f-3b38-2e62-c929ff668d45.jpeg)
IAMポリシーのアタッチ画面が表示されます。
ここでは、IAMポリシー「AdministratorAccess」（AWS管理ポリシー）をアタッチします。

アタッチできたら、画面右下の青色のボタン「次のステップ: タグ」をクリックします。
![WS000016.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/3889b502-d373-e1aa-ae49-3f3e1dd95dce.jpeg)
タグを追加する画面が表示されますが、
今回はタグを作成しないので、
画面右下の青色のボタン「次のステップ: 確認」をクリックします。
![WS000017.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/329c83f7-a799-8fe5-18d2-c4b24a018da3.jpeg)
IAMロールの確認画面とともに、IAMロールの名前と説明を入力する欄が表示されます。
今回は名前を「Administrator_Member_Dev」と入力します。
説明は任意で構いませんが、同じく「Administrator_Member_Dev」と入力しておきます。

入力できたら、画面右下にある青色のボタン「ロールの作成」をクリックします。
![WS000018.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/98506215-1df0-1638-3f8b-2815796df9a9.jpeg)
画面上部に「ロール Administrator_Member_Dev が作成されました。」と表示され、
作成したIAMロール「Administrator_Member_Dev」の表示が確認できます。
これで、IAMロール「Administrator_Member_Dev」を作成できました。
![WS000052.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/064f4f0b-9974-fc20-b887-382ea0bacbe5.jpeg)
この例を参考にして、残り5つのIAMロールも作成していきます。
・Administrator_Member_Veri
・Administrator_Member_Ope
・Developer_Member_Dev
・Developer_Member_Veri
・Operator_Member

また、IAMロールとアタッチするIAMポリシーの対応付けは以下の通りです。
・Administrator_Member_Veri : AdministratorAccess
・Administrator_Member_Ope : AdministratorAccess
・Developer_Member_Dev : PowerUserAccess
・Developer_Member_Veri : PowerUserAccess
・Operator_Member : PowerUserAccess

全てのIAMロールが作成できたら、次はIAMユーザーを作成していきます。

■IAMユーザー作成
管理者権限を持つことになるユーザー
「Administrator2」を例に見ていきます。

左ペインの「ユーザー」をクリックします。
![WS000053.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/245cc08c-21d2-4480-c253-08470c6dbdb1.jpeg)
IAMユーザーの一覧画面が表示されます。
IAMユーザーを作成したいので、
画面左上にある青色のボタン「ユーザーを追加」をクリックします。
![WS000021.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/e6f1179e-b0fb-2c57-2467-d190dfef0b22.jpeg)
IAMユーザーの作成画面が表示されます。
ここでは、IAMユーザーの名前とアクセスの種類を選択できます。
ユーザー名に「Administrator2」と入力して、
今回は「AWSマネジメントコンソールへのアクセス」（パスワード認証）をチェックします。
なお、チェックを入れるとパスワードに関する設定が2つ表示されますが、
デフォルトのまま進めます。

入力およびチェックできたら、
画面右下の青色のボタン「次のステップ: アクセス権限」をクリックします。
![WS000022.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/e55d3352-f734-5e78-20cd-c2cf38ea02e6.jpeg)
![WS000023.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/89bc5c1e-8c74-3514-bb18-0b14209798a1.jpeg)
IAMユーザーの権限をどのように付与するかを設定する画面が表示されます。
今回は先ほど作成したIAMグループ
「IAMUser_Minimum_Permissions」と「Administrator_Assume」に所属させます。

チェックできたら、画面右下の青色のボタン「次のステップ: タグ」をクリックします。
![WS000054.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/7d823a19-b7e5-e5c6-144d-65727eb05218.jpeg)
タグを追加する画面が表示されますが、
今回はタグを作成しないので、
画面右下の青色のボタン「次のステップ: 確認」をクリックします。
![WS000025.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/4e3caddc-3203-1417-04bd-21f2ff9a1115.jpeg)
IAMユーザーの確認画面が表示されます。
IAMユーザー名やアクセス設定、
所属しているIAMグループが正しく表示されているか確認しましょう。

問題なければ、画面右下の青色のボタン「ユーザーの作成」をクリックします。
![WS000026.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/f3438fbd-8d86-8a45-5f98-b18db6a7ac4f.jpeg)
すると、「成功」という表示とともに以下のモノが表示されます。
・AWSマネジメントコンソールへのURL
・CSVファイルのダウンロードボタン
・ログインの際に使用する初期パスワード（「表示」で見れるようになります）

URLとパスワードはどこかに控えておき、
念のためCSVファイルもダウンロードしておきましょう。

一通りできたら、画面右下の「閉じる」をクリックします。
![WS000027.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/c7c29fc0-772b-bb61-e954-e7f392aa2145.jpeg)
作成したIAMユーザー「Administrator2」の表示が確認できます。
これで、IAMユーザー「Administrator2」を作成できました。
![WS000030.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/5c393a17-86da-4f16-e856-93b3fe99ea65.jpeg)
この例を参考にして、残り2つのIAMユーザーも作成していきます。
・Developer
・Operator
また、上記2つのIAMユーザーにアタッチするIAMグループは、以下の通りです。
・Developer : 「IAMUser_Minimum_Permissions」と「Developer_Assume」
・Operator : 「IAMUser_Minimum_Permissions」と「Operator_Assume」

全てのIAMユーザーが作成できたら、次はIAMユーザーに仮想MFAを割り当てていきます。

■仮想MFA割り当て
IAMユーザー「Administrator2」の仮想MFA割り当てを例に見ていきます。

青色で表示されているIAMユーザー名「Administrator2」をクリックします。
![WS000031.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/37e0740e-4e79-b138-2ba3-899e63c3fbb9.jpeg)
IAMユーザー「Administrator2」の概要が表示されます。
「認証情報」タブをクリックします。
![WS000055.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/188a0d06-f023-1ee5-1cde-e5942d62c41a.jpeg)
IAMユーザー「Administrator2」に関する認証情報が表示されます。
「MFAデバイスの割り当て」の右側にある「管理」をクリックします。
![WS000033.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/cbfdf2b6-fe42-96f1-8ba3-16eb83ebf446.jpeg)
割り当てるMFAデバイスのタイプの選択画面が表示されます。
今回は「仮想MFAデバイス」を選択して、
右下にある青色のボタン「続行」をクリックします。
![WS000034.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/513fb44e-2969-45e5-5bb8-1c5fa19e4bbc.jpeg)
仮想MFAデバイスの設定画面が表示されます。
QRコードを読み取って、仮想MFAアプリにIAMユーザーに対応するMFAを登録します。
表示されるMFAコードを2回分、下の欄に入力します。

入力できたら、右下にある青色のボタン「MFAの割り当て」をクリックします。

なお、今回は仮想MFAアプリとして、
Google Chromeの拡張機能「Authenticator」を使用しています。

https://chrome.google.com/webstore/detail/authenticator/bhghoamapcdpbohphigoooaddinpkbai?hl=ja

![WS000035.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/410ac158-0d3b-376e-826e-3c6c39c48664.jpeg)
「仮想MFAが正常に割り当てられました」と表示されます。
右下にある青色のボタン「閉じる」をクリックします。
![WS000036.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/e2fac39a-4e15-3942-2512-19c14948788d.jpeg)
「割り当てなし」から表示が変わっていることが確認できます。
これで、IAMユーザー「Administrator2」に仮想MFAを割り当てられました。
![WS000037.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/3d7497e8-8bfb-3c85-c035-8e01cc5496a9.jpeg)
この例を参考にして、残り2つのIAMユーザーの仮想MFAも割り当てていきます。
・Developer
・Operator

全ての割り当てができたら、
最後に、作成したIAMユーザーからIAMロールにスイッチしていきます。

■作成したIAMユーザーからIAMロールにスイッチ
IAMユーザー「Administrator2」のスイッチを例に見ていきます。

まず、現時点では異なるユーザーでサインインしているので、
IAMユーザー「Administrator2」にサインインし直します。
画面右上にあるユーザー名をクリックします。
![WS000038.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/e457e1a8-1a3e-3c80-bf0c-ab8092938bbf.jpeg)
すると、さまざまなメニューが表示されます。
一番下の「サインアウト」をクリックします。
![WS000039.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/c8815493-0cb4-4e21-5fc2-5fd8e4caa97d.jpeg)
AWSの公式ページが表示されます。
「もう一度ログインする」か「コンソールにサインイン」をクリックします。
その後は通常通りのログインを行ってください。
![WS000040.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/8c40ee1f-dbd8-e655-037f-1b93de4983a9.jpeg)
今回は、IAMユーザー作成時に生成された初期パスワードは変更するように設定されており、
以下の画面が表示されます。
ここでは、初期パスワードとパスワードポリシーに準ずる新規パスワードを入力します。

入力できたら、青色のボタン「パスワード変更の確認」をクリックします。
次回以降ログインする際は新規パスワードを使用することになります。
![WS000045.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/a36fe49f-9a18-098f-6d31-cf0807085085.jpeg)
IAMユーザー「Administrator2」にサインインできました。
画面右上にあるIAMユーザー名をクリックします。
![WS000046.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/e3afa32b-ae2e-fd04-e768-7d6a7cb086c6.jpeg)
表示されるメニューの中の「ロールの切り替え」をクリックします。
![WS000047.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/37a0d677-d428-d86b-e5f9-b44038c1dfa9.jpeg)
初回は以下の画面が表示されます。
内容を確認した後、画面左にある青色のボタン「ロールの切り替え」をクリックします。
![WS000058.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/ae182455-99b7-d7ec-05aa-644fda7cebdb.jpeg)
ロールの切り替え画面が表示されます。
「アカウント」にはスイッチしたいIAMロールがある
AWSアカウントID（今回は「マイアカウントの値」です）を、
「ロール」にはスイッチしたいIAMロール名を入力します。
今回はIAMロール「Administrator_Member_Dev」を指定します。
「表示名」は任意なので、今回は入力しません。
「色」は任意の色を選択します。デフォルトではピンク（？）に設定されています。

入力できたら、右下にある青色のボタン「ロールの切り替え」をクリックします。
![WS000059.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/1d6887d3-f543-f10c-bb6f-00f44ad19a71.jpeg)
正しくスイッチできれば、
画面右上のIAMユーザー名の周りに指定した色の枠が表示されます。

試しに、IAMユーザー名をクリックしてみましょう。
![WS000057.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/6c830a52-7c41-7b26-62c8-24908fda52eb.jpeg)
「ログインしました:」には、IAMロールにスイッチしているIAMユーザー名が、
「現在アクティブ中です。:」には、
IAMユーザーがスイッチしたIAMロール名が表示されます。
左側の「アカウント」には、サインインしているIAMユーザーのアカウントID、
右側の「アカウント」には、スイッチしたIAMロールがあるアカウントIDが表示されます。
「ロール履歴」には、IAMロールにスイッチしたという履歴が5つまで表示されます。

また、IAMロールは着脱可能なので、
「Administrator2（IAMユーザー名）に戻る」をクリックすれば、
IAMロール「Administrator_Member_Dev」を外して（権限をはく奪して）、
画面右上の指定した色枠は表示されなくなります。
![WS000063.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/38a7bb77-29e8-bb46-2025-afa4fbd970c4.jpeg)
もちろん、特定のIAMロールにスイッチする権限を持たないIAMユーザーが、
そのIAMロールにスイッチしようとしても、以下のように表示されてはじかれます。
これは、IAMユーザー「Operator」で、
IAMロール「Administrator_Member_Ope」にスイッチしようとした例です。
![WS000064.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1152149/2332f1cb-1213-3cda-b7c5-ba22a4c38f57.jpeg)
以上で、管理者・開発者・運用者それぞれが、
開発環境・検証環境・本番環境において
適切な権限でアクセスできるような設定ができました。
#後片付けチェックリスト
あとで混乱しないように、作ったものは削除しておきましょう。

・IAMポリシーは削除しましたか？
・IAMグループは削除しましたか
・IAMロールは削除しましたか？
・IAMユーザーは削除しましたか？
・仮想MFAアプリにおける各IAMユーザーのMFA登録は解除しましたか？
（・CSVファイルは削除しましたか？）

#やってみて思ったこと
・IAMユーザー作成時に「IAMUserChangePassword」がアタッチされますが、
　これって削除できるのでしょうか。
・管理者側から、現時点で特定のIAMロールにスイッチしているIAMユーザーに対して、
　そのIAMロールをはく奪することってできるのでしょうか。
　仮に可能ではく奪した場合、IAMユーザー側はどのような挙動をとるのでしょうか。
・やっぱり個人でクロスアカウント構成をやってみたいのですが、
　同じクレジットカードでもメールアドレスが異なっていれば可能なのでしょうか。

ハンズオン形式でやってみると、疑問点ってポンポン湧くものですね。
あとで調べてみよう。

#おわりに
IAMはAWSを運用していく上で避けては通れないサービスですが、
さまざまな用語や関係性を理解しなければならないので、
苦手意識を持つ方が多いみたいです。

しかし、自分が管理者（の気分）になって、
IAMユーザーに対してどのように権限を付与していくかを試行錯誤するのは、
現時点では純粋に楽しいと感じています。
そのため、今後はもっと踏み入ったハンズオンも考えて実践してみたいと思いました。

また、今回が初めてのQiita投稿でしたが、アウトプットの遅さを実感しました。
今後は、早いサイクルのアウトプットを習慣づけて精進していきたいです。
見づらい部分も多分にあるので、分かりやすい記事作成を心掛けたいですね。

※この記事はAWS初学者を導く体系的な動画学習サービス
　「AWS CloudTech」の課題カリキュラムで作成しました。

https://aws-cloud-tech.com