AWS初心者がMFA必須のIAMユーザを払い出してもらった際、初回アクセスする手順

昨日から大学時代の友人と3人でWEBサービス作成中のちゃらとりです。
AWSを利用してサービス構築することにしたので、僕のAWSアカウント上に友人たちのIAMユーザを払い出すことにしました。
彼らに向けて、AWSコンソールにログインしてもらう際の手順をまとめました。

\# 普通に過ごしているとQiitaに書くようなネタが何にも思いつかなかったのに、
\# ただ仲間と一緒に何かに取り組んでるだけなのに、こんなにネタが湧いてくるのスゲー、
\# って思いながら書いてます。

\# アウトプットするためには、実際に伝える相手がいると違いますね。

## 前提
IAMグループとしてadministratorとdeveloperを作成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/121c794e-6fcc-af29-5563-37de30a7b3c9.png)

developerのアクセス権限は下記の2つのポリシーを設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/6c3d1ce3-465f-d92f-a52c-09c1f0410110.png)

ReadOnlyAccessは、AWSが最初から用意しているIAMポリシーで、すべてのサービスの閲覧権限が設定されています。
Force-MFAは、自分で作成したIAMポリシーで、ざっくり言うと、MFA（Multi-Factor-Authentication：多要素認証）をしてログインしない限り、何もできなくするポリシーです。※名前の通り、MFAを強制するポリシー。
Force-MFAのポリシーについては、[コチラ](https://qiita.com/THacker/items/ba355edc0a5ba8b5f542)の記事を参考に設定しました。

僕が払い出すIAMユーザは、初回ログイン時にパスワードの変更を必須としているため、参考記事で紹介されているポリシー設定をちょっと変えて、下記を設定しています。

```:Force-MFAのポリシー詳細
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowListActions",
      "Effect": "Allow",
      "Action": [
        "iam:ListUsers",
        "iam:ListVirtualMFADevices",
        "iam:ChangePassword",
        "iam:GetAccountPasswordPolicy"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowIndividualUserToListOnlyTheirOwnMFA",
      "Effect": "Allow",
      "Action": [
        "iam:ListMFADevices"
      ],
      "Resource": [
        "arn:aws:iam::*:mfa/*",
        "arn:aws:iam::*:user/${aws:username}"
      ]
    },
    {
      "Sid": "AllowIndividualUserToManageTheirOwnMFA",
      "Effect": "Allow",
      "Action": [
        "iam:CreateVirtualMFADevice",
        "iam:DeleteVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:ResyncMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::*:mfa/${aws:username}",
        "arn:aws:iam::*:user/${aws:username}"
      ]
    },
    {
      "Sid": "AllowIndividualUserToDeactivateOnlyTheirOwnMFAOnlyWhenUsingMFA",
      "Effect": "Allow",
      "Action": [
        "iam:DeactivateMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::*:mfa/${aws:username}",
        "arn:aws:iam::*:user/${aws:username}"
      ],
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": "true"
        }
      }
    },
    {
      "Sid": "BlockMostAccessUnlessSignedInWithMFA",
      "Effect": "Deny",
      "NotAction": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:ListMFADevices",
        "iam:ListUsers",
        "iam:ListVirtualMFADevices",
        "iam:ResyncMFADevice",
        "iam:ChangePassword",
        "iam:GetAccountPasswordPolicy"
      ],
      "Resource": "*",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "false"
        }
      }
    }
  ]
}
```

※初回アクセス時、MFA設定していない状態でもパスワード変更ができるように、"iam:ChangePassword"と"iam:GetAccountPasswordPolicy"の権限を付与しているところが変更点。

## 初回アクセス時、ログインしてからMFA登録するまでの手順
### アクセス情報

IAMユーザ発行時に生成されるcredentials.csvにAWSコンソールにログインするために必要な

* ユーザ名
* 初期パスワード
* AWSコンソールのログインURL

が記載されています。
管理者からcredentials.csvを受け取ってから以下の手順を実施してください。

### AWSコンソールにアクセスしログインする
ブラウザを起動して、credentials.csvに記載のConsole login link (https://[12桁のAWSアカウント番号].signin.aws.amazon.com/console)にアクセスします。
すると、下記のような画面が表示されますので、ユーザー名にcredentials.csvのUser nameを、パスワードにcredentials.csvのPasswordを入力してサインインボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/746833df-8849-4782-cef6-a953ac04acd7.png)


下記のようなパスワード変更画面が表示されるので、古いパスワードと新しいパスワードを入力して「パスワード変更の確認」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/44235fd2-af1d-97cf-6593-d3010518e348.png)

なお、僕のAWSアカウントでは、下記のパスワードポリシーを設定しているので、16桁以上で大文字小文字混在かつ数字記号を含むパスワードを設定してもらうことにしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/ab54fffc-6376-21df-cce1-055c428e502b.png)

新しいパスワードの設定に成功するとログイン完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/d4475bc2-daea-01ab-4a4a-dfd658d88757.png)

ただ、このままではMFA設定をしていないので、何も見れません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/e1c77943-62f1-3cef-ccb7-264fc0956c5c.png)

なので、MFA設定をしていきます。

### MFA設定の準備
MFA設定を行うために、認証アプリを入手してください。
※すでに持っている場合は、この手順はスキップして次の「AWSコンソール上でMFA設定を行う」に進んでください。

Android または iPhone であれば、Google製の認証アプリをアプリストアからダウンロードできます。
[コチラの公式手順](https://support.google.com/accounts/answer/1066447?co=GENIE.Platform%3DAndroid&hl=ja)に従って、アプリをダウンロードしてください。

Windowsの場合は、WinAuthなどのアプリが利用可能です。
[コチラの記事](https://www.mubit.co.jp/pb-blog/?p=3978)などを参考にインストールしてください。

※認証アプリは1つあればいいので、上記のどちらかでOKです。
※簡単なのはAndroid または iPhone用の認証アプリです。なので、この先の説明ではAndroidで認証アプリをダウンロードした前提で進めます。

### AWSコンソール上でMFA設定を行う
認証アプリをゲットしたら、再びAWSコンソールに戻って以下の操作を行います。

画面上部の自分の「ユーザ名@12桁のAWSアカウント番号」が書かれている部分をクリックし、
ドロップダウンメニューから「マイセキュリティ情報」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/e70622e5-c7b3-1cba-989c-1c9ac69bcc7c.png)

ページの中ほどにある「MFAデバイスの割り当て」ボタンを見つけて、クリックして下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/973fbfcc-f175-2597-1e31-bc9c52036986.png)

すると、下記のポップアップが出てくるので、仮想MFAデバイスが選択されていることを確認して、「続行」ボタンをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/a1c11f94-92bb-d188-854c-b3331a2e757c.png)

AndroidまたはiPhoneの認証アプリを利用する場合、
QRコードの表示をクリックしてQRコードを表示させてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/6b9ae123-2c6a-6acc-227c-d895265e4fe6.png)

AndroidまたはiPhoneの認証アプリを起動し、
①右下の＋ボタンを押して「バーコードをスキャン」してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/20cbe04a-f4e4-3523-38e7-42a1f47dbdeb.png)

②スキャンに成功すると6桁の数字が出てくるので、
その数字をAWSコンソール側のポップアップのMFAコード1に入力してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/efbfb6de-9424-ab75-cff3-3d3b97eb8294.png)


しばらく待つと、認証アプリ側の6桁の数字が変化するので、次の6桁の番号をMFAコード2に入力して
「MFAの割り当て」ボタンをクリックしてください。

これでMFA設定が完了しました。

### 一度サインアウトしてから再度サインインする
この状態ではまだ、MFA認証を使ってサインインしていない状態のため、一度サインアウトして再度サインインする必要があります。

AWSコンソールの上部にある「ユーザ名@12桁のAWSアカウント番号」の部分をクリックし、ドロップダウンメニューから「サインアウト」を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/ebbcad72-27a7-37f9-87aa-07fff46bf2d4.png)


再度、credentials.csvに記載のConsole login linkのURLにアクセスして、サインインしてください。
※パスワードは初回ログイン時に変更した新しいパスワードになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/603bba84-a3a8-9bf1-4e98-c12e30ab39f6.png)


MFA設定をしたので、次の画面が表示されます。
MFAコードに、認証アプリに表示されている6桁の数字を入力して、送信ボタンをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/d8773e73-25b7-fa7b-e98a-f044f92b4ae3.png)

無事ログインできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/936efd36-ad3b-ee2a-66b4-d3fff96d9572.png)

AWS上の各種リソースの状況を閲覧できるようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241764/89a56fe7-d162-8193-4da3-f52f3225a686.png)

## 2回目以降、AWSコンソールにログインする手順
すぐ上で説明した、「一度サインアウトしてから再度サインインする」の手順に記載のサインイン方法でサインインできます。