AWS リソースへのアクセスを認証するために、AWS コマンドラインインターフェイス (AWS CLI) で多要素認証 (MFA) トークンを使用したいと考えています。
簡単な説明
AWS Identity and Access Management (IAM) ユーザーごとに、最大 8 台の MFA デバイスを有効にできます。
注: ルートユーザーの MFA を有効にすると、ルートユーザーの認証情報のみが影響を受けます。AWS アカウントの各 IAM ID には、独自の MFA 設定があります。
MFA を有効にするには、「MFA でルートユーザーのサインインを保護する」および「IAM における MFA」を参照してください。
解決策
AWS CLI を使用して AWS リソースを認証するには、API アクション GetSessionToken を使用して一時的な認証情報を取得します。
注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
MFA デバイスの ARN
MFA デバイスの ARN を取得するには、次の手順を実行します。
- IAM コンソールを開きます。
- ナビゲーションペインで [ユーザー] を選択してから、お使いの IAM ユーザーを選択します。
- [概要] ページで、[セキュリティ認証情報] タブを選択します。
- [割り当てられた MFA デバイス] で、MFA デバイスの ARN をコピーします。
AWS CLI を使用して一時的な認証情報を取得する
get-session-token コマンドを実行します。
aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
出力例:
{
"Credentials": {
"SecretAccessKey": "secret-access-key",
"SessionToken": "temporary-session-token",
"Expiration": "expiration-date-time",
"AccessKeyId": "access-key-id"
}
}
重要: MFA デバイスのシリアル番号、トークン、ARN が正しいことを確認してください。正しくないと、次のようなエラーメッセージが表示されることがあります。
"GetSessionToken 操作の呼び出し時にエラーが発生しました (AccessDenied): MultiFactorAuthentication が失敗しました。MFA コードを検証できません。MFA シリアル番号が有効で、このユーザーに関連付けられていることを確認してください。"
MFA ハードウェアデバイスを認証するためのシリアル番号は通常デバイスの背面に記載されており、値は GAHT12345678 のような形式です。MFA 仮想デバイスを認証するための値は、arn:aws:iam::123456789012:mfa/user のような形式です。
注: AWS CLI は、仮想またはハードウェアの MFA デバイスでの MFA 認証のみをサポートします。AWS CLI は FIDO セキュリティキーを使用した MFA 認証をサポートしていません。
詳細については、「AWS CLI または AWS API での MFA デバイスを割り当てる」を参照してください。
一時的な認証情報を使用してその値を環境変数にエクスポートする
お使いのオペレーティングシステム (OS) で、次のコマンドを実行します。
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 コマンドを再度実行する前に、次のコマンドを実行して環境変数を設定解除します。
Linux
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
Windows
set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set 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
認証情報の有効期限が切れたら、et-session-token コマンドを再度実行し、戻り値を環境変数またはプロファイル設定にエクスポートします。
get-session-token コマンドの出力から有効期限を確認するスクリプトまたは cron ジョブを、バックグラウンドで実行するのがベストプラクティスです。MFA トークンの有効期限が切れている場合、スクリプトまたは cron ジョブが再認証を要求する必要があります。
名前付きプロファイルを使用して認証する場合、—profile オプションの後にプロファイル名を指定して、API コールが認証に MFA を使用することを確認します。
関連情報
IAM ユーザーまたは AWS アカウントのルートユーザーの紛失または破損した MFA デバイスをリセットする方法を教えてください
AWS マネジメントコンソールと AWS CLI を使用する IAM ユーザーに MFA 認証を強制する方法を教えてください