it-roy-ru.com

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

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

{
    "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 ".

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

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

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

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


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

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

19
GoodGets

Обновление

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


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

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

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

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

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

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

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

Удачи!

20
Steffen Opel

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

8
GoodGets

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

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

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

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

3
Jinn

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

0
Cbas

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

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

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

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

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

0
Shivkumar Mallesappa

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

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

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

Передайте свое Bucket имя в 'Resource'

0
ashish yadav