将AWS简单电子邮件服务文件复制到另一个帐户中的S3存储桶

时间:2019-06-16 15:17:41

标签: amazon-web-services amazon-s3 aws-cli

这是问题:

是否可以使用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...进行传输。

所以,这行得通,但看起来像是骇客。有更好的方法吗?

0 个答案:

没有答案