Как я могу сделать S3 Bucket общедоступным (пример политики Amazon не работает)? - PullRequest
19 голосов
/ 13 февраля 2012

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

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

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

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

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

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

Что я делаю не так?


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

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

Ответы [ 6 ]

20 голосов
/ 14 февраля 2012

Обновление

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


Это новая настройка корзины / объекта или вы пытаетесь добавить политику корзины в ранее существовавшуюsetup?

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

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

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

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

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

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

Удачи!

8 голосов
/ 15 февраля 2012

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

3 голосов
/ 13 декабря 2013

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

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

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

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

0 голосов
/ 04 сентября 2018

Следующая политика сделает всю корзину общедоступной:

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

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

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

Приведенная выше политика разрешит общедоступное чтение для всех объектов в изображениях, но вы не сможете получить доступ к другим объектам внутри корзины.

0 голосов
/ 20 июня 2016

Если у вас возникла проблема с загрузкой Zencoder, закажите эту страницу: https://app.zencoder.com/docs/api/encoding/s3-settings/public

0 голосов
/ 07 декабря 2015

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

Попробуйте это:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...