如何为使用 AWS CLI 的 IAM 用户实施 MFA 身份验证?

上次更新日期:2021 年 9 月 15 日

我创建了一多重身份验证 (MFA) 条件策略,以限制 AWS Identity and Access Management (IAM) 用户访问 AWS 服务。该策略可与 AWS 管理控制台配合使用,但不能与 AWS Command Line Interface (AWS CLI) 配合使用。如何将 MFA 与 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

MultiFactorAuthPresent 密钥不存在于使用长期凭证所做的请求中。使用布尔条件运算符时,如果策略中的密钥不存在,则值不匹配。MultiFactorAuthPresent 密钥未拒绝对使用长期凭证所做的请求的访问。

使用 AWS 管理控制台的 IAM 用户会生成临时凭证,并且仅在使用 MFA 时允许访问。

通过布尔条件,您可以通过将密钥值设置为 truefalse 来限制访问。您可以添加 IfExists 条件运算符,以检查请求中是否存在 MultiFactorAuthPresent 密钥。如果 MultiFactorAuthPresent 密钥不存在,IfExists 会将条件元素评估为 true,类似于以下内容:

"Effect" : "Deny",
"Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "false", "aws:ViaAWSService":"false"} }

使用具有长期凭证的 AWS CLI 的 IAM 用户将被拒绝访问,必须使用 MFA 进行身份验证。

有关更多信息,请参阅布尔条件运算符