AWS CLIで仮想MFAデバイスを作成・設定【JAWS-UG CLI #3 参加レポート】 #jawsug

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

三井田です。

昨晩は『JAWS-UG CLI専門支部 #3 - IAM入門』に参加してきました。

JAWS-UG CLI専門支部については、甲木さんが「JAWS-UG CLI専門支部に参加しています #jawsug」で既に触れているので割愛します。

JAWS-UG CLI専門支部 #3 IAM入門

今回は4回目の勉強会ということで「#3 IAM入門」がお題でした。(#0から始まったので#3は4回目なのです)

JAWS-UG CLI専門支部 #3 - IAM入門』にリンクのあるハンズオン資料を基にもくもくと時に雑談や相談を交えて進んでいきました。

特にIAMのハンズオンという観点で主宰の波田野さんから提起された注意点としては、次のようなものがありました。

  • AWSアカウントはまっさらな新規アカウントを用意した方が良い。誤操作により、同じアカウントを使っている同僚その他が突然環境を使えなくなる可能性もあるためです
  • account-password-policyを作成・変更するコマンドでは、パラメータを明示的に指定しないと初期値に戻って、返ってセキュリティレベルを落としてしまう恐れがある、

さて、勉強会の余った時間でハンズオン資料には無かった仮想MFAデバイス(Virtual MFA Device)をAWS CLIから設定してみましたので、このエントリーで紹介したいと思います。

仮想MFAデバイスの設定

多要素認証(MFA)と仮想MFAデバイス

多要素認証とMFAデバイスについては、以下の資料が参考になると思います。

参考資料
AWS公式ページ: Multi-Factor Authentication
ビジネス+IT: 認証の基本を図解、今なぜ2要素認証が必須になってきているのか
弊社ブログ:
 AWSアカウントのセキュリティを強化する 〜 MFAの利用
 【AWSにおけるセキュリティ】冗長バーチャルMFA

っと、ここまで書いて、せーのさんが「AWS CLIを使ってMFAを再設定する。」で、MFAを切り離す手順(deactivateとdelete)を紹介していることに気づきました。。。

気を取り直して、このエントリーでは作成(create)から有効化(enable)までをAWS CLIで行う手順を紹介します。

仮想MFAデバイスの作成からユーザへの紐付けまで

基本的には、公式ドキュメント(IAMの使用)の以下に沿って作業を進めます。

AWS での Multi-Factor Authentication(MFA)の使用
仮想 MFA デバイスでの AWS 使用
AWS アカウント向け仮想 MFA デバイスの設定と管理(CLI およおび API)

ユーザとログインプロファイルの設定

こちらは、勉強会の資料に詳しいので説明を省きます。

仮想MFAデバイスの作成

AWSマネジメントコンソールでは、ユーザへの仮想MFAデバイスの作成から紐付けまで、1つのウィザードで操作が出来ますが、AWS CLIでは、作成と有効化は別々の操作となります。

まずは、作成から。
参考にしたのは、AWS CLIのマニュアルAPIリファレンスです。

$ aws iam create-virtual-mfa-device \
    --virtual-mfa-device-name testvfa \
    --bootstrap-method QRCodePNG \
    --outfile $HOME/testvfa_QR.png

ポイントは次の点になります。

  • virtual-mfa-device-nameには一意になる任意の名前を付与します
    • マネジメントコンソールでは自動的にユーザ名が割り当てられますが、CLIでは任意に設定できます
    • pathも使うことで名前空間を拡張できます
  • bootstrap-methodには、QRCodePNGまたはBase32StringSeedが指定できます。素のAPI応答にはどちらも含まれますが、AWS CLIではどちらかの形式を指定して、outfileで指定したファイルに出力します
  • outfileには、上述のとおり、QRコードのPNG画像など指定した形式の応答が保存されます。1つ注意点は、このオプションの引数は必ず「PATH + ファイル名」の形式が必要です。(マニュアルに"The output path and file name"と明記されてました)

実行結果は、出来上がった仮想MFAデバイスのシリアルナンバーと、outfileとなります。

{
    "VirtualMFADevice": {
        "SerialNumber": "arn:aws:iam::XXXXXXXXXXXX:mfa/testvfa"
    }
}

QRコードは以下のコマンドでコマンドプロンプトからも開けます(Mac OS Xの場合)。

$ open ~/testvfa_QR.png

testvfa_QR_png

仮想MFAデバイスの設定

まず、スマートフォンなどで仮想MFAデバイスソフトウェアを起動し、バーコードをスキャンします。するとソフトウェア上にワンタイムパスワードが表示されるようになります。

続いて、表示されたワンタイムパスワードを使って、ユーザと仮想MFAデバイスを紐付け、有効化します。
参考にしたのは、AWS CLIのマニュアルAPIリファレンスです。実行するコマンドは下記のようになります。ユーザ名をtaro、シリアルナンバーはcreate-virtual-mfa-deviceの出力です。

$ aws iam enable-mfa-device \
    --user-name taro \
    --serial-number arn:aws:iam::XXXXXXXXXXXX:mfa/testvfa \
    --authentication-code-1 648874 \
    --authentication-code-2 956924

authentication-codeは、30秒毎に更新されるワンタイムパスワードを連続2回分入力します。
問題なければそのままプロンプトが返ってきます。
誤った数字を指定するなどした場合には、以下のようなエラーが返ってきます。

A client error (InvalidAuthenticationCode) occurred when calling the EnableMFADevice operation: Authentication code for device is not valid.

その他設定関連

何らかの理由で仮想MFAデバイスの同期が崩れてしまった場合、aws iam enable-mfa-deviceではなく、aws iam resync-mfa-deviceを実行します。使い方は同様です。

設定の解除などは、せーのさんのエントリーを参照ください。

まとめ

  • アクセスキーとシークレットキー、必要な操作権限が揃っていれば、MFAデバイスを設定できます
  • システム管理者として、個々のユーザにはMFA変更を許さないなどのポリシーの場合、AWS CLIで仮想MFAデバイスを量産して、各ユーザに割り当てるといった運用もできます
  • PNG画像を施錠された金庫などに保管することで、iPhoneが壊れたなどの物理的障害からの復旧も楽に出来そうです。しかしながら、くれぐれも管理は慎重に!非有効化(deactivate)や新たな作成・設定も簡単にできるので、使い捨て戦略もありです
  • CLIを使いながら、CLIリファレンスやAPIリファレンスを紐解くことにより、AWSマネジメントコンソールの便利さも身に染みてきます

ではでは、Let's CLI!