我创建了多重身份验证(MFA)条件策略来限制 AWS Identity and Access Management(IAM)用户对 AWS 服务的访问。该策略适用于 AWS 管理控制台,但不适用于 AWS 命令行界面(AWS CLI)。
简短描述
以下 IAM 策略示例要求 IAM 用户使用 MFA 访问特定的 AWS 服务:
{ "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 错误。此外,请确保您使用的是最新版本的 AWS CLI。
由于长期凭证请求中不存在 aws:MultiFactorAuthPresent 键,因此该键不会拒绝访问请求。如果该策略中的键不带 Boolean 条件运算符,则值不匹配。
使用 AWS 管理控制台的 IAM 用户可生成临时凭证,并且仅在他们使用 MFA 时才允许访问。
要对 AWS CLI 强制执行 MFA 身份验证,请添加 IfExists 条件运算符以检查请求中是否包含 MultiFactorAuthPresent 键。Boolean 条件允许您通过将键值设置为 true 或 false 来限制访问权限。如果请求中不存在 MultiFactorAuthPresent 键,则 IfExists 会将条件元素评估为 true。
IAM 策略示例:
{
"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": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false",
"aws:ViaAWSService": "false"
}
}
}
**注意:**使用具有长期凭证的 AWS CLI 的 IAM 用户被拒绝访问,必须使用 MFA 进行身份验证。请务必使用 MFA 令牌对您的 CLI 会话进行身份验证。
相关信息
如何要求其他 AWS 账户的用户使用 MFA 访问我的 Amazon S3 存储桶?
Using multi-factor authentication
在 AWS CLI 或 AWS API 中分配 MFA 设备