AWS Identity and Access Management (IAM) ユーザーに対し、AWS のサービスへのアクセスを制限する多要素認証 (MFA) 条件ポリシーを作成しました。このポリシーは AWS マネジメントコンソールでは機能しますが、AWS Command Line Interface (AWS CLI) では機能しません。AWS CLI で MFA を使用するにはどうすればよいですか?
簡単な説明
次に挙げた IAM ポリシーの例では、特定の AWS のサービスにアクセスする IAM ユーザーは、MFA を使用する必要があります。
{
"Sid": "BlockMostAccessUnlessSignedInWithMFA",
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:DeleteVirtualMFADevice",
"iam:ListVirtualMFADevices",
"iam:EnableMFADevice",
"iam:ResyncMFADevice",
"iam:ListAccountAliases",
"iam:ListUsers",
"iam:ListSSHPublicKeys",
"iam:ListAccessKeys",
"iam:ListServiceSpecificCredentials",
"iam:ListMFADevices",
"iam:GetAccountSummary",
"sts:GetSessionToken"
],
"Resource": "*",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "false",
"aws:ViaAWSService": "false"
}
}
}
AWS マネジメントコンソールを使用する IAM ユーザーの場合は、MFA 認証情報の入力を求められるので、AWS のサービスにアクセスできます。一方、AWS CLI を使用する IAM ユーザーは MFA 認証情報の入力を求められず、AWS のサービスにアクセスできません。
解決方法
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
MultiFactorAuthPresent キーは、長期的な認証情報を使用して行われたリクエストには存在しません。ブール条件演算子では、ポリシーのキーが存在しない場合、値は一致しません。この MultiFactorAuthPresent キーは、長期的な認証情報を使用して行われたリクエストへのアクセスを拒否しません。
AWS マネジメントコンソールを使用する IAM ユーザーには一時的な認証情報が生成され、MFA を使用した場合のアクセスのみが許可されます。
ブール条件を使用すると、キー値を true または false に設定してのアクセス制限が可能です。IfExists 条件演算子を追加することで、リクエストに MultiFactorAuthPresent キーが含まれるかどうかを確認できます。MultiFactorAuthPresent キーが含まれていない場合、IfExists は条件要素を次のように true と評価します。
"Effect" : "Deny",
"Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "false", "aws:ViaAWSService":"false"} }
**注:**長期的な認証情報で AWS CLI を使用する IAM ユーザーはアクセスを拒否され、認証には MFA を使用する必要があります。そのため、必ず MFA トークンを使用して CLI セッションを認証してください。
関連情報
多要素認証の使用
AssumeRole
仮想 MFA デバイスの有効化と管理 (AWS CLI または AWS API)