AWS S3 跨账户的 ACLs

90次阅读
没有评论

问题描述

在AWS中有两个账户:A和B。他在账户A中给一个S3存储桶设置了策略,允许账户B对该存储桶进行所有操作。然而,当账户B的EC2实例上传文件到该存储桶时,账户A无法访问该文件,因为文件的所有者是账户B。用户想知道是否有一种方法可以解决这个问题,而不需要账户B在每次上传时指定包含账户A的ACL。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在AWS S3中,上传到存储桶的对象的所有者是上传对象的账户。除非对象所有者账户授予了存储桶所有者账户的权限,否则存储桶所有者账户只能删除对象,无法访问对象。
因此,如果账户B上传的对象在账户A中无法访问,那么账户B需要在每次上传时指定包含账户A的ACL。
以下是在AWS S3中解决这个问题的步骤:
1. 在账户B中上传对象到存储桶。
2. 在上传对象时,指定包含账户A的ACL。可以使用AWS CLI或AWS SDK来完成这个操作。
下面是一个使用AWS CLI的示例命令:

aws s3 cp your_file s3://your_bucket/your_file --acl bucket-owner-full-control

在上面的示例中,我们使用aws s3 cp命令将文件your_file上传到存储桶your_bucket。通过指定--acl bucket-owner-full-control参数,我们确保了账户A拥有对该对象的完全控制权限。
请注意,这个解决方案需要在每次上传对象时手动指定ACL,可能会增加一些额外的工作量。

方案2

如果账户A和账户B之间有信任关系,可以考虑使用AWS S3存储桶复制功能来解决这个问题。
另一种解决方案是使用AWS S3存储桶复制功能。这个功能可以将一个存储桶中的对象自动复制到另一个存储桶中,并且复制后的对象的所有者将是目标存储桶的所有者。
以下是使用AWS S3存储桶复制功能解决这个问题的步骤:
1. 在账户A中创建一个新的存储桶,作为目标存储桶。
2. 在账户B中创建一个存储桶复制规则,将源存储桶设置为账户B的存储桶,将目标存储桶设置为账户A的存储桶。
3. 启用存储桶复制功能,并确保复制规则生效。
这样,当账户B上传对象到源存储桶时,对象将自动复制到目标存储桶,并且复制后的对象的所有者将是账户A。这样,账户A就可以访问复制后的对象了。
请注意,这个解决方案需要在账户A和账户B之间建立信任关系,并且需要在账户B的存储桶上启用存储桶复制功能。

总结

在AWS S3中,上传到存储桶的对象的所有者是上传对象的账户。如果需要在不同账户之间共享对象,并且希望存储桶所有者能够访问这些对象,需要在每次上传时手动指定包含存储桶所有者的ACL,或者使用存储桶复制功能将对象复制到目标存储桶。

正文完