[英]S3 cross account file transfer, file not accessible
我正在将 s3 文件从 accountA 推送到 accountB,但无法从 accountB 访问推送的文件。 我检查了推送的文件,推送文件的所有者似乎是 accountA。
这是我所做的。
accountA 中的 IAM 角色具有此策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"s3-object-lambda:*"
],
"Resource": "*"
}
]
}
accountB 中的存储桶策略如下所示:
{
"Sid": "S3AllowPutFromDataLake",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountId:role/roleNameAccountA"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::bucketName/*"
}
如何解决这个问题?
这是在 AWS 账户之间复制 S3 对象时的常见问题。 这里有几个选项可以避免它发生。 选择您喜欢的任何一个:
当账户 A 将 object 复制到账户 B 时会出现问题。所有权仍属于账户 A。
这可以通过让账户 B 触发复制来避免。 实际上,它是将 object“拉”到账户 B 而不是“推”object。所有权将保留在账户 B 中,因为账户 B 请求了副本。
对象级 ACL 的概念早于存储桶策略,并导致许多问题,例如您遇到的问题。
Amazon S3 现在引入了在存储桶上禁用 ACL 的功能,这是创建新存储桶时的推荐选项。 禁用 ACL 还将消除导致问题的“所有权”概念。 在您的情况下,应该禁用 ACL 的是帐户 B 中的目标存储桶。
请参阅: 为所有新存储桶禁用 ACL 并强制执行 Object 所有权 - Amazon Simple Storage Service
复制文件时,可以通过将 ACL 设置为bucket-owner-full-control
来指定应转移所有权。
使用 AWS CLI:
aws s3 cp s3://bucket-a/foo.txt s3://bucket-b/foo.txt --acl bucket-owner-full-control
使用 boto3:
s3_client.copy_object(
ACL = 'bucket-owner-full-control',
Bucket = DESTINATION_BUCKET,
Key = KEY,
CopySource = {'Bucket':SOURCE_BUCKET, 'Key':KEY}
)
能够通过如下修改存储桶策略来解决此问题:
{
"Sid": "S3AllowPutFromDataLake",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountId:role/roleNameAccountA"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
]
"Resource": "arn:aws:s3:::bucketName/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
并在推送文件时添加此参数:
'ACL': 'bucket-owner-full-control'
所有者仍然是 accountA,但现在我可以从 accountB 访问该文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.