问题:
为了账号的安全性,开启了 MFA 多重验证。但是出现一个问题,控制台输入 MFA Token 后有权限访问 AWS 资源,但是 AWS CLI 的方式使用 access key 访问资源却因为未被授权而拒绝。
解决办法:
如果开启了 MFA 验证,那么通过 AWS CLI 与资源交互时,则必须创建临时会话。
运行 sts get-session-token AWS CLI 命令(将变量替换为账户、资源和 MFA 设备的信息):
- arn-of-the-mfa-device:可以从控制台获取 MFA 设备信息;(如果您使用的是 MFA 硬件设备,则 ARN 值类似于 GAHT12345678。如果您使用的是虚拟 MFA,则该值类似于 arn:aws:iam::123456789012:mfa/user)
- code-from-token:从 MFA 设备获取的 Token
$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
会收到类似于以下内容的输出,其中包含临时凭证和到期时间(默认为 12 小时):
- 注意:可以在 sts get-session-token 命令中使用 —duration-seconds 选项指定到期时间 (单位:秒),该值的范围在 900 秒 (15 分钟) 至 129600 秒 (36 小时) 之间。如果使用的是根用户凭证,则范围为 900 秒(15 分钟)到 3600 秒(1 小时)。
{
"Credentials": {
"SecretAccessKey": "secret-access-key",
"SessionToken": "temporary-session-token",
"Expiration": "expiration-date-time",
"AccessKeyId": "access-key-id"
}
}
- 注意:可以在 sts get-session-token 命令中使用 —duration-seconds 选项指定到期时间 (单位:秒),该值的范围在 900 秒 (15 分钟) 至 129600 秒 (36 小时) 之间。如果使用的是根用户凭证,则范围为 900 秒(15 分钟)到 3600 秒(1 小时)。
如何使用临时凭证
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](https://docs.aws.amazon.com/cli/latest/reference/sts/get-session-token.html) 调用之前取消对它们的设置。
```shell
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
- 通过命名配置文件使用临时凭证
$ aws s3 ls —profile mfa ```