Подтвердить что ты не робот

Как я могу создать ведро S3 public (политика примера Amazon не работает)?

Amazon предоставляет пример для предоставления разрешения анонимному пользователю следующим образом (см. Примеры примеров для политик Buzz Amazon S3):

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*"
        }
    ]
}

В моей политике я изменил "ведро" в "arn: aws: s3: bucket/" на "my-bucket".

Однако, как только я попытаюсь получить доступ к изображению в папке этого ведра, я получаю следующую ошибку Access denied:

В этом XML файле нет связанной информации о стиле с этим. Дерево документов показано ниже.

(если я явно изменяю свойства этого изображения для публики, а затем перезагружаю его url, изображение загружается отлично)

Что я делаю неправильно?


Обновление # 1. По-видимому, это связано с сайтом третьей стороны, на который я предоставил доступ. Хотя у него есть все разрешения в качестве основного пользователя (меня), и его объекты находятся в одной папке с одинаковыми разрешениями, это все равно не позволит мне сделать их общедоступными. Не знаю, почему.

Обновление # 2. Политики веток не применяются к объектам, принадлежащим другим, даже если они находятся внутри вашего ведра, см. мой ответ для деталей.

4b9b3361

Ответ 1

Update

Согласно комментарию GoodGets, реальной проблемой было то, что политики ведра не применяются к объектам, "принадлежащим" кому-то другому, даже если они находятся в вашем ковше, см. GoodGets 'собственный ответ для подробностей (+1).


Является ли это новой установкой bucket/object или вы пытаетесь добавить политику ведра к уже существующей настройке?

В последнем случае вы могли бы столкнуться с связанной ошибкой из-за взаимодействия между тем временем доступны три разных механизма контроля доступа S3, которые могут быть довольно запутанными. Это рассматривается, например. в Использование ACL и политики Bucket Together:

Когда у вас есть ACL и политики ведра, назначенные ковшикам, Amazon S3 оценивает существующие ACL Amazon S3, а также политику ведра при определении разрешений доступа к учетным записям на Amazon S3 ресурс. Если учетная запись имеет доступ к ресурсам, которые ACL или политика указывает, что они имеют доступ к запрошенному ресурсу.

Хотя это звучит достаточно просто, непреднамеренные вмешательства могут возникнуть из-за тонких различных значений по умолчанию между ACL политиками:

С существующими ACL Amazon S3, грант всегда обеспечивает доступ к ковша или объекта. При использовании политик запрет всегда переопределяет Грант. [акцент мой]

Это объясняет, почему добавление ACL-гранта всегда гарантирует доступ, однако это не относится к добавлению гранта политики, поскольку явное отклонение политики, предоставленное в другом месте вашей установки, будет по-прежнему соблюдаться, как дополнительно показано напр. IAM и Bucket Policies Together и Логика оценки.

Следовательно, я рекомендую начать с новой установки bucket/object, чтобы проверить желаемую конфигурацию, прежде чем применять ее к сценарию производства (который может все же помешать, но идентификация/отладка разницы будет проще в случае).

Удачи!

Ответ 2

Политика ведра не применяется к файлам с другими владельцами. Поэтому, хотя я дал доступ на запись третьим лицам, их владельцем остается, и моя политика в корзине не будет применяться к этим объектам.

Ответ 3

Я потратил впустую на это, основная причина была глупой, и упомянутые здесь решения не помогли (я попробовал их все), и документы AWS s3 разрешений не подчеркивали эту точку.

Если у вас установлено значение Requester Pays, вы не можете включить анонимный доступ (либо по ведомой политике, либо по ACL "Everyone" ). Вы можете уверенно писать политики и ACL, а также применять их и даже использовать консоль, чтобы явно публиковать файл, но не подписанный URL-адрес все равно получит доступ к 403 в 100% случаев в этом файле, пока вы не снимите отметку с Requester Pays в консоли для всего ковша (вкладка свойств при выборе ковша). Или, я полагаю, через какой-то вызов API REST.

Не отмечен Requester Pays, и теперь работает анонимный доступ, с ограничениями на реферер, ect. Справедливости ради, консоль AWS сообщает нам:

Пока включена функция Requester Pays, анонимный доступ к этому ведру отключен.

Ответ 4

Проблема с вашим действием должна быть в формате

Попробуйте следующее:

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

Передайте имя Bucket в "Ресурс"