Как создать публичные политики для определенных вложенных папок в корзине S3? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть корзина S3, и внутри нее у меня есть несколько папок, но объекты внутри папок будут создаваться динамически, поэтому в простых сроках я могу сказать это так:

main_users/someIDNumber/uploaded

someIDNumber является динамическим и отличается каждый раз, когда создается пользователь. Теперь я хочу дать GetObject разрешение всем объектам в «загруженной» папке только для всех пользователей по конкретной ссылке, которой является мой веб-сайт.

Я пробовал это в моих политиках корзины, но это не работает:

arn:aws:s3:::mybucketname/main_users/*/uploaded/*

также это:

arn:aws:s3:::mybucketname/main_users/*/uploaded

Но мне отказано в доступе на стороне моего сайта.

Как я могу это сделать?

1 Ответ

1 голос
/ 30 марта 2019

Это сработало для меня. Я сделал следующее:

  • Загрузил файл в: s3://my-bucket/main_users/42/uploaded/foo.txt
  • Создан stack пользователь IAM с политикой, показанной ниже
  • Ран aws s3 cp s3://my-bucket/main_users/42/uploaded/foo.txt . --profile stack
  • Файл успешно скопирован

Политика была:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-bucket/main_users/*/uploaded/*"
        }
    ]
}

Сбой при попытке скопировать файл с:

aws s3 cp s3://my-bucket/main_users/24/something/foo.txt . --profile stack

Обратите внимание, что если вы пытаетесь перечислить (ls) папку, вам потребуется другая политика. Вышесказанное было проверкой GetObject, а не списком ведра.

Хотя эти политики назначаются конкретному пользователю IAM, они должны работать в Bucket Policy. Просто убедитесь, что вы отредактировали S3 Block Public Access , чтобы сделать содержимое корзины общедоступным.

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