Разрешить доступ многим учетным записям к подмножествам корзины S3
У меня есть ведро S3, в котором есть каталог (префикс) для каждого пользователя, я хочу предоставить каждому пользователю (другим учетным записям AWS) доступ только к их объектам, я также хочу использовать оплату запрашивающей стороной для всех переводов. Некоторые идеи:
1. Используйте политику сегментов
Я не проверял это, но думаю, что это можно было бы сделать, прикрепив политику, подобную этой, для каждой учетной записи:
{
"Sid": "id1",
"Action": "s3:ListBucket",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket",
"Principal": "arn:aws:iam::123:role/external-role-1",
"Condition": {"StringEquals":{"s3:prefix":["user-1/"],"s3:delimiter":["/"]}}
},
{
"Sid": "id2",
"Action": "s3:GetObject",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/user-1/*",
"Principal": "arn:aws:iam::123:role/external-role-1"
}
Здесь,
2. Создайте роль для каждого пользователя в моей учетной записи и разрешите внешнему пользователю взять ее на себя.
Это позволяет избежать описанной выше проблемы, поскольку JSON распределяется между многими ролями IAM. Проблема с этим подходом заключается в том, что он не платит заявителю.
Когда запрашивающая сторона принимает на себя роль AWS Identity and Access Management (IAM) перед отправкой запроса, плата за запрос взимается с аккаунта, которому принадлежит эта роль.
https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html
3. Используйте Object ACL или теги для управления доступом к объекту.
Это может удвоить емкость по сравнению с № 1, избегая
Ни один из них не полностью удовлетворяет тому, чего я пытаюсь достичь, есть ли лучший способ? Есть ли способ создать политику IAM для каждого пользователя, а затем прикрепить ее к их внешней роли IAM?