如何为使用 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": ,
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
}

系统将提示使用 AWS 管理控制台的 IAM 用户输入 MFA 身份验证凭证,然后才能访问 AWS 服务。但是,系统不会提示使用 AWS CLI 的 IAM 用户输入 MFA 身份验证凭证以便访问 AWS 服务。
</p

解决方法

注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。

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

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

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

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

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

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