因此,我想授予帐户 A 中存在的角色对帐户 B 拥有的存储桶中的项目的获取对象权限。
我读AWS 文档的示例策略并创建了如下存储桶策略:
{
"Version": "2012-10-17",
"Id": "foo2",
"Statement": [
{
"Sid": "Stmt199999999999",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:role/asset_download_role"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket-name/*"
}
]
}
对我来说,用英语来说就是:“授予帐户 123456789 的角色 asset_download_role 对存储桶 my-bucket-name 内任何和所有对象的 GetObject 权限”
存储桶中的测试对象 foo.jpg 除了标准“对象所有者的访问权限”之外,没有设置其他 acl 或权限
现在,当我扮演这个角色,并试图获得对象
aws s3api get-object --profile download_asset --region eu-west-2 --bucket my-bucket-name --key foo.jpg file.jpg
(或者使用 boto3,或者使用这些凭证对 URL 进行签名并检索该 URL)
我收到“调用 GetObject 操作时发生错误(AccessDenied):访问被拒绝”
将配置文件更改为存储桶所有者用户凭证,我就可以下载该文件。
我究竟做错了什么?
[请注意,虽然我在此测试设置中可以访问帐户 A 和帐户 B,但在现实生活中,帐户 B 将属于第三方,我希望向其提供一项工作策略,他们可以使用该策略来打开他们需要的内容]
答案1
解决方案是,当向第三方帐户拥有的角色授予权限时,该角色需要添加一个策略,以授予对存储桶的访问权限 - 需要在两端定义和匹配权限