我正在关注如何将 AWS IAM 与 STS 一起使用以访问 AWS 资源 - 2nd Watch博客文章,我的理解是 S3 Bucket Policy Principal 请求临时凭证,一种方法是硬编码此用户的 Id 但帖子尝试一种更优雅的方法来评估 STS 委派用户(当它工作时)。
arn:aws:iam::409812999999999999:policy/fts-assume-role
IAM 用户策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "*"
}
]
}
arn:aws:s3:::finding-taylor-swift
s3 存储桶策略
{
"Version": "2012-10-17",
"Id": "Policy1581282599999999999",
"Statement": [
{
"Sid": "Stmt158128999999999999",
"Effect": "Allow",
"Principal": {
"Service": "sts.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::finding-taylor-swift/*"
}
]
}
conor@xyz:~$ aws configure --profile finding-taylor-swift
AWS Access Key ID [****************6QNY]:
AWS Secret Access Key [****************+8kF]:
Default region name [eu-west-2]:
Default output format [text]: json
conor@xyz:~$ aws sts get-session-token --profile finding-taylor-swift
{
"Credentials": {
"SecretAccessKey": "<some text>",
"SessionToken": "<some text>",
"Expiration": "2020-02-11T03:31:50Z",
"AccessKeyId": "<some text>"
}
}
conor@xyz:~$ export AWS_SECRET_ACCESS_KEY=<some text>
conor@xyz:~$ export AWS_SESSION_TOKEN=<some text>
conor@xyz:~$ export AWS_ACCESS_KEY_ID=<some text>
conor@xyz:~$ aws s3 cp dreamstime_xxl_concert_profile_w500_q8.jpg s3://finding-taylor-swift
upload failed: ./dreamstime_xxl_concert_profile_w500_q8.jpg to s3://finding-taylor-swift/dreamstime_xxl_concert_profile_w500_q8.jpg An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
conor@xyz:~$
AWS CLI 已按照将临时安全凭证与 AWS CLI 结合使用中的说明进行设置
“当您运行 AWS CLI 命令时,AWS CLI 会按特定顺序查找凭证 — 首先在环境变量中,然后在配置文件中。因此,在您将临时凭证放入环境变量后,AWS CLI 会使用这些凭证默认情况下。(如果您在命令中指定配置文件参数,AWS CLI 会跳过环境变量。相反,AWS CLI 会查看配置文件,这样您可以在需要时覆盖环境变量中的凭证。)
以下示例显示了如何为临时安全凭证设置环境变量,然后调用 AWS CLI 命令。由于 AWS CLI 命令中不包含配置文件参数,因此 AWS CLI 首先在环境变量中查找凭证,因此使用临时凭证。”