如何使用 AWS CLI 通过 MFA 令牌验证对 AWS 资源的访问权限?

2 分钟阅读
0

我想使用多重身份验证 (MFA) 令牌配合 AWS 命令行界面 (AWS CLI) 来验证对我的 AWS 资源的访问权限。

简短描述

您可以为每个 AWS Identity and Access Management (IAM) 用户激活最多八个 MFA 设备。

**注意:**为根用户激活 MFA 只会影响根用户凭证。您的 AWS 账户中的每个 IAM 身份都有自己的 MFA 配置。

要激活 MFA,请参阅使用 MFA 保护您的根用户登录安全IAM 中的 MFA

解决方法

要使用 AWS CLI 对 AWS 资源进行身份验证,请使用 API 操作 GetSessionToken 获取临时凭证。

**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

MFA 设备 ARN

要获取 MFA 设备的 ARN,请完成以下步骤:

  1. 打开 IAM 控制台
  2. 在导航窗格中,选择 Users(用户),然后选择 IAM 用户。
  3. Summary(摘要)页面上,选择 Security credentials(安全凭证)选项卡。
  4. Assigned MFA device(已分配的 MFA 设备)中,复制 MFA 设备的 ARN。

使用 AWS CLI 获取临时凭证

运行 get-session-token 命令:

aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token

输出示例:

{
    "Credentials": {
        "SecretAccessKey": "secret-access-key",
        "SessionToken": "temporary-session-token",
        "Expiration": "expiration-date-time",
        "AccessKeyId": "access-key-id"
    }
}

**重要事项:**确保 MFA 设备的序列号、令牌和 ARN 正确无误,否则您可能会收到类似于以下内容的错误消息:

“An error occurred (AccessDenied) when calling the GetSessionToken operation: MultiFactorAuthentication failed, unable to validate MFA code.Please verify your MFA serial number is valid and associated with this user.”(调用 GetSessionToken 操作时出错 (AccessDenied):MultiFactorAuthentication 失败,无法验证 MFA 代码。请验证您的 MFA 序列号是否有效并与此用户相关联。)

为了对您的 MFA 硬件设备进行身份验证,序列号通常位于设备背面,其值类似于 GAHT12345678。要对您的 MFA 虚拟设备进行身份验证,该值类似于 arn:aws:iam::123456789012:mfa/user

**注意:**AWS CLI 仅支持使用虚拟或硬件 MFA 设备进行 MFA 身份验证。AWS CLI 不支持使用 FIDO 安全密钥进行 MFA 身份验证。

有关详细信息,请参阅在 AWS CLI 或 AWS API 中分配 MFA 设备

使用临时凭证将其值导出到环境变量

为您的操作系统 (OS) 运行以下命令:

Linux

export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
export AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
export AWS_SESSION_TOKEN=example-session-token-as-in-previous-output

Windows

set AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
set AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
set AWS_SESSION_TOKEN=example-session-Token-as-in-previous-output

再次运行 get-session-token 命令之前,请运行以下命令来取消设置环境变量:

Linux

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN

Windows

set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set AWS_SESSION_TOKEN=

使用带有命名配置文件的临时凭证

您还可以使用命名配置文件来指定需要 MFA 身份验证的命令。在用户主目录的 .aws 文件夹下的 credentials(凭证)文件中,添加新的配置文件配置以发出经 MFA 身份验证的命令。

配置文件配置示例:

[mfa]aws_access_key_id = example-access-key-as-in-returned-output
aws_secret_access_key = example-secret-access-key-as-in-returned-output
aws_session_token = example-session-token-as-in-returned-output

凭证到期后,再次运行 get-session-token 命令,然后将返回值导出到环境变量或配置文件配置。

最佳做法是在后台运行脚本或 cron 作业,以检查 get-session-token 命令的输出是否过期。如果 MFA 令牌已过期,请确保脚本或 cron 作业提示重新进行身份验证。

当您使用命名配置文件进行身份验证时,指定 —profile 选项,然后指定配置文件名称,以验证 API 调用是否使用 MFA 进行身份验证。

相关信息

如何为我的 IAM 用户或 AWS 账户根用户重置丢失或损坏的 MFA 设备?

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