如何使用 AWS CLI 通过 MFA 令牌验证对 AWS 资源的访问权限?
我想使用多重身份验证 (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,请完成以下步骤:
- 打开 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.”(调用 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 进行身份验证。
相关信息
相关内容
- AWS 官方已更新 2 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 个月前
- AWS 官方已更新 2 年前