如何对使用 AWS 管理控制台和 AWS CLI 的 IAM 用户强制执行 MFA 身份验证?

2 分钟阅读
0

我创建了多重身份验证(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 条件允许您通过将键值设置为 truefalse 来限制访问权限。如果请求中不存在 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 设备

AWS 官方
AWS 官方已更新 4 个月前