Изображения s3 не загружаются после копирования из одного сегмента в другой аккаунт - PullRequest
0 голосов
/ 18 февраля 2020

Я скопировал изображения из одной корзины в другую, и теперь я не могу получить доступ к изображениям. Сообщение об ошибке показывает AccessDenied.

Я убедился, что файл существует в корзине, но не может получить к нему доступ. Если я удаляю то же изображение и загружаю его снова, он работает.

Пожалуйста, укажите любую причину, если я что-то пропустил во время копирования данных корзины из одного в другое.

Ссылка, которая работала со старым бакетом и теперь не доступен с новым ведром

https://abc.s3.amazonaws.com/uploads/profile/image/16923/client_thumb_CINDERELLA_12

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Копирование (или любое другое действие на S3) по умолчанию является частным, потому что это поведение ACL по умолчанию, см. здесь . Вот почему вам отказывают в доступе, даже если в исходном файле разрешен доступ publi c. Поэтому вам нужно указать ACL для public-read во время копирования, в вашем случае (пример Cli):

aws s3 cp s3://mySourceBucket/test.txt s3://myDestinationBucket/test.txt --acl public-read

Обратите внимание, что в соответствии с AWS, если вы используете --acl, ваша политика IAM должен включать действие S3:PutObjectAcl.

- acl (строка) Устанавливает ACL для объекта при выполнении команды. Если вы используете этот параметр, вы должны иметь разрешение «s3: PutObjectAcl», включенное в список действий для вашей политики IAM. Принимает только значения private, publi c -read, publi c -read-write, authenticated-read, aws -exe c -read, bucket-owner-read-read, bucket-owner-owner-full-control и журнал-доставка-запись. См. Консервированный ACL для деталей

0 голосов
/ 18 февраля 2020

Вы пытаетесь получить доступ к общедоступному URL-адресу c для объекта S3, и он работает, только если вы открываете корзину публично. Вы должны установить свой новый контейнер общедоступным, а ТАКЖЕ установить политику сегментов, например:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicRead",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}

, где examplebucket - это название сегмента.

...