MFA トークンを使用して、AWS CLI 経由で AWS リソースへのアクセスを認証する方法を教えてください。

最終更新日: 2019 年 9 月 23 日

MFA トークンを使用して、AWS Command Line Interface (AWS CLI) 経由で AWS リソースへのアクセスを認証する方法を教えてください。

解決方法

Multi-Factor Authentication (MFA) デバイスを使用して、アカウントとそのリソースを保護することをお勧めします。MFA デバイスの使用時に AWS CLI を使用してリソースとやり取りする場合は、代わりに一時セッショントークンを作成する必要があります。MFA ハードウェアデバイスを使用している場合、ARN 値は GAHT12345678 に近い値です。仮想 MFA を使用している場合、arn:aws:iam::123456789012:mfa/user に近い値になります。詳細については、「MFA ステータスの確認」を参照してください。

まだ行っていない場合は、AWS CLI をインストールして設定します。sts get-session-token AWS CLI コマンドを実行し、次のように変数をアカウント、リソース、MFA デバイスからの情報に置き換えます。

$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token

次のような形式で、一時的な認証情報と、その一時的な資格情報の有効期限 (デフォルトでは 12 時間) を含む出力を受け取ります。  

{
    "Credentials": {
        "SecretAccessKey": "secret-access-key",
        "SessionToken": "temporary-session-token",
        "Expiration": "expiration-date-time",
        "AccessKeyId": "access-key-id"
    }
}

注意: 同じコマンドの --duration-seconds オプションを使用して、有効期間 (秒単位) を指定できます。値の範囲は 900 秒 (15 分) から 129600 秒 (36 時間) です。root ユーザー資格情報を使用している場合、範囲は 900 秒 (15 分) から 3600 秒 (1 時間) です。

環境変数で一時的な認証情報を使用する

これらのコマンドを使用して値を環境変数にエクスポートすることにより、一時的な認証情報を使用できます。

Linux:

$ export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
$ export AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
$ export AWS_SESSION_TOKEN=example-session-token-as-in-previous-output

Windows:

> set AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
> set AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
> set AWS_SESSION_TOKEN=example-session-Token-as-in-previous-output

環境変数を設定する場合は、これらのコマンドを使用して get-session-token 呼び出しを再度行う前に、必ずその設定を解除してください。

> unset AWS_ACCESS_KEY_ID
> unset AWS_SECRET_ACCESS_KEY
> unset AWS_SESSION_TOKEN

名前付きプロファイルで一時的な認証情報を使用する

名前付きプロファイルを使用して、MFA 認証を必要とするコマンドを指定することもできます。これを行うには、ユーザーのホームディレクトリの .aws フォルダにある認証情報ファイルを編集して、MFA 認証コマンドを発行するための新しいプロファイル設定を追加します。プロファイル設定の例を次に示します。

[mfa]
aws_access_key_id = example-access-key-as-in-returned-output
aws_secret_access_key = example-secret-access-key-as-in-returned-output
aws_session_token = example-session-Token-as-in-returned-output

資格情報の有効期限が切れたら、get-session-token コマンドを再度実行し、返された値を環境変数またはプロファイル設定にエクスポートします。バックグラウンドでスクリプトまたは cron ジョブを実行して、有効期限を確認し、再認証を促すことを検討してください。

configure コマンドを使用して AWS CLI が設定されている場合、永続的な IAM ユーザー認証情報を持つデフォルト設定があります。この IAM ユーザーは、MFA 認証を必要としないコマンドを使用できます。

設定例:

.aws/credentials

[default]
aws_access_key_id = example-access-Key-for-an-IAM-user
aws_secret_access_key = example-secret-access-key-for-IAM-user

注意: AWS CLI を使用してコマンドを認証するためにプロファイルを使用する場合は、--profile オプションにプロファイル名を続けて指定し、呼び出しがMFA を使用して認証されていることを確認します。

たとえば、このコマンドはデフォルトのプロファイル認証情報を使用し、MFA では認証されません。

$ aws s3 ls

重要: API 呼び出しを行うときに正しい資格情報が使用されていることを確認できるように、認証情報の優先順位を頭に入れておいてください。

$ aws s3 ls --profile mfa

IAM ポリシーの aws:MultiFactorAuthPresent または aws:MultiFactorAuthAge 条件を使用して、MFA を使用して特定の API アクションを実行するユーザーを認証することを要求することもできます。