跳至内容

如何使用 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 中的 AWS 多重身份验证

解决方法

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

要使用 AWS CLI 对 AWS 资源进行身份验证,请使用 API 操作 GetSessionToken 获取临时凭证。默认情况下,临时凭证的有效期为 12 小时。使用 duration-seconds 参数将临时凭证的持续时间配置为 15 分钟到 36 小时之间的任意时间。

**注意:**用户需要适当的 IAM 权限才能使用 GetSessionToken。有关详细信息,请参阅如何对使用 AWS 管理控制台和 AWS CLI 的 IAM 用户强制执行 MFA 身份验证?

MFA 设备 ARN

要获取 MFA 设备的 Amazon 资源名称 (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.”

要对您的 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-outputexport 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-outputset 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_IDunset 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]aws_access_key_id = example-access-key-as-in-returned-outputaws_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 身份验证?