AWS CLIでIAMユーザーにMFA(多要素認証)を設定する
こんにちは、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要素認証アプリにはAuthyやGoogle 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からぽちぽちっとやりたい場合はコンソール、でしょうか。
参考
- 特定のDynamoDBテーブルのアイテムの操作のみ可能なIAMユーザー(ログインプロファイル)を作成する | DevelopersIO
- create-login-profile — AWS CLI 1.20.31 Command Reference
- create-virtual-mfa-device — AWS CLI 1.20.31 Command Reference
- enable-mfa-device — AWS CLI 1.20.31 Command Reference
- 仮想 MFA デバイスの有効化と管理 (AWS CLI または AWS API) - AWS Identity and Access Management
- AWS CLIのみでMFAを有効にする方法 - サーバーワークスエンジニアブログ
以上