Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何使用 AWS CLI 通过 MFA 令牌验证对 AWS 资源的访问权限?
我想使用多重身份验证 (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),请完成以下步骤:
- 打开 IAM 控制台。
- 在导航窗格中,选择 Users(用户),然后选择您的 IAM 用户。
- 在 Summary(摘要)页面上,选择 Security credentials(安全凭证)选项卡。
- 在 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 进行身份验证。
相关信息
- 语言
- 中文 (简体)

