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


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

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

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

前提

IAMグループとしてadministratorとdeveloperを作成しています。

developerのアクセス権限は下記の2つのポリシーを設定しています。

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

僕が払い出す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を入力してサインインボタンをクリックします。

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

なお、僕のAWSアカウントでは、下記のパスワードポリシーを設定しているので、16桁以上で大文字小文字混在かつ数字記号を含むパスワードを設定してもらうことにしています。

新しいパスワードの設定に成功するとログイン完了です。

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

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

MFA設定の準備

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

Android または iPhone であれば、Google製の認証アプリをアプリストアからダウンロードできます。
コチラの公式手順に従って、アプリをダウンロードしてください。

Windowsの場合は、WinAuthなどのアプリが利用可能です。
コチラの記事などを参考にインストールしてください。

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

AWSコンソール上でMFA設定を行う

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

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

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

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

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

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

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

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

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

一度サインアウトしてから再度サインインする

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

AWSコンソールの上部にある「ユーザ名@12桁のAWSアカウント番号」の部分をクリックし、ドロップダウンメニューから「サインアウト」を選択してください。

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

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

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

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

2回目以降、AWSコンソールにログインする手順

すぐ上で説明した、「一度サインアウトしてから再度サインインする」の手順に記載のサインイン方法でサインインできます。