Sim*_*att 8 amazon-s3 amazon-web-services python-3.x amazon-iam boto3
我正在使用 Python 中的 Amazon boto3 库将文件上传到另一个用户存储桶中。应用于其他用户存储桶的存储桶策略配置如下
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3BucketList",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::uuu"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bbb"
},
{
"Sid": "DelegateS3ObjectUpload",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::uuu"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::bbb",
"arn:aws:s3:::bbb/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
其中uuu
是我的用户 ID,bbb
是属于其他用户的存储桶名称。我的用户和其他用户是属于不同组织的 IAM 帐户。(我知道这个策略可以写得更简单,但目的是在上传上添加检查以阻止没有创建适当权限的对象)。
然后,我可以使用以下代码列出存储桶中的所有对象,并将新对象上传到存储桶。这是可行的,但是由于亚马逊默认将对象设为对象创建者的私有对象,因此存储桶的所有者无法访问该对象
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3BucketList",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::uuu"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bbb"
},
{
"Sid": "DelegateS3ObjectUpload",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::uuu"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::bbb",
"arn:aws:s3:::bbb/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
一旦我取消注释 ACL 选项,代码就会生成“拒绝访问”错误消息。如果我将其重定向到我自己组织内的存储桶,则 ACL 选项会成功,并且存储桶的所有者将获得对该对象的完全权限。
我现在不知道如何解决这个问题,尤其是亚马逊自己的建议似乎是按照我展示的方式来做。
https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-owner-access/
https://aws.amazon.com/premiumsupport/knowledge-center/s3-require-object-ownership/
归档时间: |
|
查看次数: |
15437 次 |
最近记录: |