Скопируйте файлы AWS Simple Email Service в корзину S3 в другой учетной записи - PullRequest
1 голос
/ 16 июня 2019

Вот вопрос:

Есть ли способ использовать aws s3 sync... для переноса файлов, доставленных SES, в корзину S3 в одной учетной записи и копирования их в корзину S3 в другой учетной записи?

подробности:

Я установил адрес Amazon Simple Email Service (SES) , который сбрасывает электронные письма в корзину S3. Я пытаюсь использовать команду aws cli aws s3 sync, чтобы скопировать файлы в корзину другой учетной записи для тестирования.

Я настроил обе учетные записи в соответствии с AWS « Как скопировать объекты S3 из другой учетной записи AWS », но она не работает для файлов, доставляемых SES. Когда я запускаю команду, все файлы SES завершаются с ошибкой:

загрузка не удалась: {SOURCE} to {DESTINATION} Произошла ошибка (AccessDenied) при вызове операции GetObject: Access Denied

Это только для файлов, доставляемых SES. Любые файлы, которые я добавляю напрямую, просто переносятся.

Исходя из этого поста , я начал смотреть на владельца объектов и обнаружил, что у доставленных файлов 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, где обсуждается, как изменить владельца ключа. Он говорит, что вы не можете напрямую, но вы можете скопировать ключ обратно себе:

aws s3 cp s3://mybucket/mykey s3://mybucket/mykey --storage-class STANDARD

При этом обновляется владелец объекта. Я попробовал это с файлом SES и, конечно же, после получения обновления владельца я мог передать его с aws s3 sync....

Итак, это работает, но похоже на взлом. Есть ли лучший способ сделать это?

...