AWS CLIでIAMユーザーにMFA(多要素認証)を設定する

2021.08.29

こんにちは、CX事業本部 IoT事業部の若槻です。

今回は、AWS CLIでIAMユーザーにMFA(多要素認証)を設定してみました。

想定しているケース

  • MFAが設定されたIAMユーザーを管理者が作成して、ユーザーに使用させたい

管理者による操作

MFA有効対象のIAMユーザーの作成

IAMユーザーを作成します。

$ userName=sampleUser
$ aws iam create-user \
  --user-name ${userName}

必要に応じて、IAMユーザーにポリシーをアタッチします。(今回はログインの動作だけ確認したいので省きます。)

IAMユーザーのログインプロファイルを作成します。

$ password=${password}
$ aws iam create-login-profile \
  --user-name ${userName} \
  --password ${password} \
  --password-reset-required

仮想デバイスの作成

$ deviceName=sampleDevice
$ outfile=qrcode.png
$ bootstrapMethod=QRCodePNG
$ aws iam create-virtual-mfa-device \
  --virtual-mfa-device-name ${deviceName} \
  --outfile ${outfile} \
  --bootstrap-method ${bootstrapMethod}

作成した仮想デバイスのワンタイムパスワードコードのQRコードがPNGファイルで作成されます。

$ ls -l qrcode.png
-rw-r--r--  1 wakatsuki.ryuta  staff  1651 Aug 29 21:04 qrcode.png

ワンタイムパスワードコードの2要素認証アプリへの登録

作成した仮想デバイスのワンタイムパスワードコードを2要素認証アプリへ登録します。

2要素認証アプリにはAuthyGoogle Authenticatorなどが使えます。今回は1Passwordのデスクトップアプリケーション を使用してみます。

ログイン情報を作成してセクション欄でワンタイムパスワード形式を選択し、QRコードマークをクリックします。

コードスキャナーが起動するので、先程作成したPNGファイルのQRコード画像をスキャンします。

下記の形式のワンタイムパスワードコードが取得できます。

otpauth://totp/Amazon%20Web%20Services:sampleDevice@{AccountId}?secret={Secret}&issuer=Amazon%20Web%20Services

ログイン情報を保存するとワンタイムパスワード(認証コード)が取得できています。

MFAデバイスの有効化(IAMユーザーへの割当て)

--authentication-code1--authentication-code2には、先程2要素認証アプリに登録したワンタイムパスワードコードの2回連続する認証コードを指定します。

$ serialNumber=arn:aws:iam::${accountId}:mfa/${deviceName}
$ authenticationCode1=123456
$ authenticationCode2=789012
$ aws iam enable-mfa-device \
  --user-name ${userName} \
  --serial-number ${serialNumber} \
  --authentication-code1 ${authenticationCode1} \
  --authentication-code2 ${authenticationCode2}

ユーザーにサインイン情報を通知

  • サインインURL:https://${accountId}.signin.aws.amazon.com/console
  • ユーザー名:${userName}
  • パスワード:${password}
  • ワンタイムパスワードコード または QRコードの画像データ

ユーザーは通知されたワンタイムパスワードコードまたはQRコードを使用して2要素認証アプリにコードを登録します。(手順は「ワンタイムパスワードコードの2要素認証アプリへの登録」と同じ)

ユーザーによる操作

ユーザーによるAWSマネジメントコンソールへのサインイン

サインインURLにアクセスしてユーザー名とパスワードでサインインします。

MFA認証を求められるので、2要素認証アプリで取得したコードを指定します。

サインインできました。

コンソール画面からMFAを設定する場合は?

IAMユーザーのコンソールで対象のユーザーの[MFA デバイスの割り当て]-[管理]をクリックします。

下記ダイアログで仮想MFAデバイスを選択し、[続行]をクリックします。

そして下記ダイアログが表示されるので、ここで「仮想デバイスの作成」「ワンタイムパスワードコードの2要素認証アプリへの登録」「MFAデバイスの有効化(IAMユーザーへの割当て)」に対応する操作を行うことができます。

あとはAWS CLIによる方法と同様に、上記のQRコードの画像またはシークレットを使用した作成したワンタイムパスワードコードをユーザーに通知すれば、ユーザーは多要素認証でサインインができるようになります。

おわりに

AWS CLIでIAMユーザーにMFA(多要素認証)を設定してみました。

CLIによる方法とコンソール画面による方法を両方試してみましたが、手数としてはどちらもほとんど変わりませんでした。あえて使い分けるなら、証跡を実行コマンドとその結果として残したい場合はAWS CLI、GUIからぽちぽちっとやりたい場合はコンソール、でしょうか。

参考

以上