AWS CLIのMFAデバイスセットアップ手順

目次

  • はじめに
  • 対象
  • 使用したIAMポリシー
  • 設定手順
  • 終わりに

はじめに

MFA必須のIAMユーザーを作成し、CLIを有効化することになりました。
MFAデバイスの設定は今までGUIで実施していたのですが、せっかくなので全てコマンドで実施してみました。

対象

・AWSリソースに対して、基本的な知識をお持ちの方(特にIAM)
・Windows11 ProでのCLIでのMFAデバイス設定方法に興味がある方
・アクセスキーの作成の解説が不要な方

使用したIAMポリシー

以下ポリシーはMFAが無効の場合、大半のアクションを拒否するポリシーです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowIndividualUserToManageTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::*:mfa/${aws:username}",
                "arn:aws:iam::*:user/${aws:username}"
            ]
        },
        {
            "Sid": "AllowIndividualUserToViewTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:ListVirtualMFADevices",
                "iam:GetUser"
            ],
            "Resource": [
                "arn:aws:iam::*:user/${aws:username}",
                "*"
            ]
        },
        {
            "Sid": "BlockMostAccessUnlessSignedInWithMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:GetUser",
                "iam:ChangePassword"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

設定手順

以下概要です。
※IAMユーザーは作成済のものとします。

  1. AWS CLIのインストール
  2. 接続情報の設定
  3. MFAデバイスの作成
  4. MFAデバイス有効化
  5. 一時的認証情報の取得しログイン

AWS CLIのインストール

※管理者権限が必要になります。
以下よりインストーラをダウンロードし、インストールを実行する
https://awscli.amazonaws.com/AWSCLIV2.msi

インストーラー実行後、以下コマンドでインストールの確認をする

aws --version

公式サイト:https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

接続情報の設定

以下コマンドをPowershellで実行する

aws configure --profile <任意のプロファイル名>

※プロファイル名を設定することによって、アクセス先(prod/stgなど)を判別します。
※対話形式で設定が進みますので作成済のより共有されたAccess key IDとSecret access keyをご入力ください

AWS Access Key ID [None]: Access key ID
AWS Secret Access Key [None]: Secret access key
Default region name [None]: <デフォルトリージョン>
Default output format [None]: 未入力
 ※未入力の場合JSONになります

デフォルトでは”C:\Users\user.aws”に「credentials」というファイルが作成されます。
接続情報の設定が正常に完了していれば、以下のような状態になります
file

「credentials」の中身は以下のようになります。

[<設定したProfile名>]
aws_access_key_id = <入力したaccess_key>
aws_secret_access_key = <入力したsecret_access_key>

通常のCLIのセットアップはこれで完了ですが、MFAが有効になっていないと何もできないので、
MFAデバイスの設定をしていきます。

MFAデバイスの作成

Powershellで以下コマンドを実行する
※QRコードを保存する場所によっては管理者権限が必要です

aws iam create-virtual-mfa-device --virtual-mfa-device-name <MFAデバイス名> --outfile C:/QRCode.png --bootstrap-method QRCodePNG --profile <設定したProfle名>

MFAデバイスでスキャンするQRコードを「QRCode.png」という名前で作成するコマンドです。
以下が期待される出力です。

{
   "VirtualMFADevice": {
        "SerialNumber": "arn:aws:iam::<アカウント>:mfa/<MFAデバイス名>"
    }
}

※上記arnは今後使用しますので、メモ帳などにお控えください。
※手元のMFAデバイスで「QRCode.png」をスキャン後、設定の必要がありますが、ここでは説明を省略します。

MFAデバイス有効化

Powershellで以下コマンドを実行する

aws iam enable-mfa-device --user-name <IAMユーザー名> --serial-number <取得したarn> --authentication-code1 <MFAデバイスに表示される6桁の数字> --authentication-code2 <MFAデバイスに表示される6桁の数字> --profile <設定したProfle名>

※2つ目のMFAコードが表示されるまで、お手元のMFAデバイスで少々時間がかかります。

一時的認証情報の取得しログイン

Powershellで以下コマンドを実行し、一時認証情報を取得する

aws sts get-session-token --serial-number <取得したarn> --token-code <MFAデバイスに表示される6桁コード> --duration-seconds 43200 --profile <設定したProfle名>

以下が期待される出力です

{
    "Credentials": {
        "AccessKeyId": "*****",
        "SecretAccessKey": "*****",
        "SessionToken": "*****",
        "Expiration": "*****"
}
}

「C:\Users\user.aws\credentials」を以下のように編集し、一時認証情報を設定する。

<設定したProfle名>
aws_access_key_id = <手順8で取得したAccessKeyId>
aws_secret_access_key = <手順8で取得したSecretAccessKey>
aws_session_token = <手順8で取得したSessionToken>

セットアップ手順は以上になります。
後は通常のCLIコマンドのようにコマンド –profile でAWSリソースの操作が可能です。

例 aws lambda list-functions --profile

終わりに

以上です。
今は手動で認証情報を入力していますが、実務ではスクリプト化などして、自動化できると使い勝手がよいかと思います。
機会があれば、そのへんも記事にしていきたいです。

Last modified: 2025-08-30

Author