AWS リソースへのアクセスを認証するために、AWS コマンドラインインターフェイス (AWS CLI) で多要素認証 (MFA) トークンを使用したいと考えています。
簡単な説明
AWS Identity and Access Management (IAM) ユーザーごとに、最大 8 台の MFA デバイスを有効にできます。
注: ルートユーザーの MFA を有効にすると、ルートユーザーの認証情報のみが影響を受けます。AWS アカウントの各 IAM ID には、独自の MFA 設定があります。
MFA を有効にする方法については、「多要素認証 (MFA) で root ユーザーのサインインを保護する」および「IAM における AWS 多要素認証 (MFA)」を参照してください。
解決策
AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
AWS CLI を使用して AWS リソースを認証するには、API アクション GetSessionToken を使用して一時的な認証情報を取得します。一時的な認証情報は、デフォルトでは 12 時間有効です。duration-seconds パラメータを指定し、15 分から 36 時間の間の任意の期間で一時認証情報の有効期間を設定します。
注: ユーザーが GetSessionToken を使用するには、適切な IAM アクセス許可が必要です。詳細については、「AWS マネジメントコンソールと AWS CLI を使用する IAM ユーザーに MFA 認証を強制する方法を教えてください」を参照してください。
MFA デバイスの ARN
MFA デバイスの Amazon リソースネーム (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 が正しいことを確認してください。誤りがある場合、次のようなエラーメッセージが表示されることがあります。
「An error occurred (AccessDenied) when calling the GetSessionToken operation: (GetSessionToken 操作の呼び出し時にエラーが発生しました) MultiFactorAuthentication が失敗しました。MFA コードを検証できません。Please verify your MFA serial number is valid and associated with this user. (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-outputexport 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-outputset 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_IDunset 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]aws_access_key_id = example-access-key-as-in-returned-outputaws_secret_access_key = example-secret-access-key-as-in-returned-output
aws_session_token = example-session-token-as-in-returned-output
認証情報の有効期限が切れた後に、get-session-token コマンドを再度実行します。次に、戻り値を環境変数またはプロファイル設定にエクスポートします。
get-session-token コマンドの出力から有効期限を確認するスクリプトまたは cron ジョブを、バックグラウンドで実行することをおすすめします。MFA トークンの有効期限が切れている場合、スクリプトまたは cron ジョブが再認証を要求する必要があります。
名前付きプロファイルを使用して認証する場合は、profile オプションの後にプロファイル名を指定します。こうすることで、API コールが MFA を使用して認証されていることを確認できます。
関連情報
IAM ユーザーまたは AWS アカウントのルートユーザーの紛失または破損した MFA デバイスをリセットする方法を教えてください
AWS マネジメントコンソールと AWS CLI を使用する IAM ユーザーに MFA 認証を強制する方法を教えてください