Я создаю приложение, использующее Amazon Security Token Service для создания временных пользователей для доступа к подкаталогу в ведре S3. Пользователи создаются пользователем IAM, который имеет полный доступ для чтения/записи к ведру (а также разрешения, необходимые для создания пользователей).
У меня есть создание пользователей, которые отлично работают вместе с истечением срока действия сеанса и более, но у меня возникают проблемы с правильной политикой, позволяющей использовать список ключей, основанный на префиксах. Разрешения, которые я хочу, чтобы конечный пользователь имел:
- Чтение объектов, которые находятся в определенном префиксе
- Запись объектов в один и тот же определенный префикс
- Список всех объектов, которые находятся в определенном префиксе
Мне удалось читать и писать, но как-то независимо от того, что я пытаюсь получить доступ к списку, работает неправильно. Вот код Ruby, который я использовал, когда был ближе:
AWS::STS::Policy.new do |policy|
policy.allow(
actions: ["s3:GetObject*", "s3:PutObject*", "s3:DeleteObject*"],
resources: "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/#{folder_path}/*"
)
policy.allow(
actions: ["s3:*"],
resources: ["arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/*", "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}"]
).where(:s3_prefix).like("#{folder_path}/*")
end
Если я помню, это позволило мне читать и писать, но не перечислять. Поскольку я все еще в разработке, я изменил код на это:
AWS::STS::Policy.new do |policy|
# FIXME: This is way too permissive, but it not working to be more specific.
policy.allow(
actions: ["s3:*"],
resources: ["arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/*", "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}"]
)
end
Это работает на 100% с очевидной проблемой, что ничто не ограничено префиксом, который позволит пользователям сжиматься друг с другом.
Что я делаю неправильно в своей политике?