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

上次更新时间:2020 年 6 月 16 日

我创建了一个 Multi-Factor Authentication (MFA) 条件策略,以限制 AWS Identity and Access Management (IAM) 用户访问 AWS 服务。该策略可与 AWS 管理控制台配合使用,但不能与 AWS 命令行界面 (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 管理控制台的 IAM 用户输入 MFA 身份验证凭证,然后才能访问 AWS 服务。但是,系统不会提示使用 AWS CLI 的 IAM 用户输入 MFA 身份验证凭证以便访问 AWS 服务。

解决方法

MultiFactorAuthPresent 密钥仅适用于检查是否使用 MFA 的临时安全凭证。MultiFactorAuthPresent 密钥不会拒绝访问使用长期凭证发出的请求,也不会拒绝通过 AWS CLI 访问 MFA 请求。

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

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

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

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

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