这是问题:
是否可以使用aws s3 sync...
将SES传递的文件带入一个帐户的S3存储桶中,然后将其复制到另一个帐户的S3存储桶中?
详细信息:
我设置了一个Amazon Simple Email Service (SES)地址,该地址将电子邮件放入S3存储桶。我正在尝试使用aws cli命令aws s3 sync
将文件复制到另一个帐户的存储桶中进行测试。
我根据AWS“ How can I copy S3 objects from another AWS account”支持文章设置了两个帐户,但不适用于SES交付的文件。当我运行命令时,所有SES文件都会失败并显示以下信息:
下载失败:{SOURCE}至{DESTINATION}调用GetObject操作时发生错误(AccessDenied):访问被拒绝
但这仅适用于SES交付的文件。我直接放入的任何文件都可以传输。
基于this post,我开始查看对象的所有者,发现SES交付的文件的所有者为aws-ses+publishing.us-east-1.prod
。但是,看起来实际的帐户应该具有完全访问权限。具体来说,当我运行时:
aws s3api get-object-acl --bucket {MY_BUCKET} --key {MY_KEY}
它返回:
{
"Owner": {
"DisplayName": "my_display_name",
"ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"Grants": [{
"Grantee": {
"DisplayName": "my_display_name",
"ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}]
}
然后,当我在SES提供的文件上运行它时,我得到:
{
"Owner": {
"DisplayName": "aws-ses+publishing.us-east-1.prod",
"ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"Grants": [
{
"Grantee": {
"DisplayName": "aws-ses+publishing.us-east-1.prod",
"ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "my_display_name",
"ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
]
}
鉴于我帐户的赠款声明,它似乎应该可以工作。
我在AWS论坛上发现了this thread,该论坛讨论了如何更改密钥的所有权。它说您不能直接使用,但可以使用以下方法将密钥复制回自身:
aws s3 cp s3://mybucket/mykey s3://mybucket/mykey --storage-class STANDARD
这样做将更新对象的所有者。我尝试使用SES交付的文件进行了尝试,并且可以肯定的是,在获得所有者更新之后,可以使用aws s3 sync...
进行传输。
所以,这行得通,但看起来像是骇客。有更好的方法吗?