Amazon S3 - Как автоматически сделать новое содержимое папки общедоступным - PullRequest
1 голос
/ 05 мая 2020

Я использую amazon s3 для хранения изображений в ведре и Cloudfront, чтобы получать и публиковать эти изображения. Моя проблема в том, что каждый раз, когда я загружаю новое изображение, оно автоматически становится приватным (попытка получить его приводит к 403 запрещенным). Чтобы получить его и показать на своем веб-сайте, мне нужно снова сделать свою папку publi c (после того, как я это уже сделал). У вас есть идеи, почему такое поведение?

Моя корзина publi c, а вот мои разрешения IAM:

// First strategy
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:HeadBucket",
        "s3:GetBucketAcl",
        "s3:HeadObject",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
      ],
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}

// Second strategy
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Action": [
        "acm:ListCertificates",
        "cloudfront:*",
        "iam:ListServerCertificates",
        "waf:ListWebACLs",
        "waf:GetWebACL",
        "wafv2:ListWebACLs",
        "wafv2:GetWebACL"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

"my-bucket-name" явно заменено по фактическому названию ведра.

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Объекты в Amazon S3 по умолчанию являются частными.

Если вы хотите sh сделать объекты общедоступными (для людей без учетных данных IAM), у вас есть два варианта:

Вариант 1: Политика сегмента

Вы можете создать политику сегмента , которая делает контент общедоступным. Например, эта политика предоставляет GetObject доступ к любому :

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

См .: Примеры политики корзины - Amazon Simple Storage Service

Вам также потребуется отключить Block Publi c Access в сегменте S3, чтобы разрешить политику сегмента.

Вариант 2: Сделайте объект publi c

Вы также можете создать определенные c объекты в Amazon S3 publi c.

При загрузке объекта укажите список управления доступом (ACL) из public-read. Вам также потребуется выключить Блокировать Publi c Доступ , чтобы разрешить разрешения на уровне объекта.

Когда вы скажете «Я должен сделать свою папку publi c снова ", я подозреваю, что вы заходите в консоль Amazon S3, выбираете папку и затем используете опцию Make publi c. Это эквивалент установки ACL. Вы можете избежать этого дополнительного шага, указав ACL при загрузке объекта или используя Bucket Policy.

0 голосов
/ 05 мая 2020

Создайте лямбда-триггер на основе префикса вашей подпапки. Затем во время создания события обновите разрешения объекта, чтобы опубликовать его c.

См.: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

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