Итак, я хочу предоставить роли, которая существует в учетной записи A, разрешение на получение объекта для элементов в корзине, принадлежащей учетной записи B.
Я прочитал Примеры политик в документах AWS и создал такую политику корзины:
{
"Version": "2012-10-17",
"Id": "foo2",
"Statement": [
{
"Sid": "Stmt199999999999",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:role/asset_download_role"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket-name/*"
}
]
}
Что для меня гласит на английском языке: «Предоставьте роли asset_download_role из учетной записи 123456789 разрешение GetObject для всех без исключения объектов внутри bucket my-bucket-name "
тестовый объект в корзине, foo.jpg, не имеет дополнительных acl или разрешений, установленных помимо стандартного« Доступ для владельца объекта »
Теперь, когда я беру на себя роль и пытаюсь получить объект
aws s3api get-object --profile download_asset --region eu-west-2 --bucket my-bucket-name --key foo.jpg file.jpg
(или использовать boto3, или подписать URL-адрес этими учетными данными и получить этот URL-адрес)
Я получаю: «Произошла ошибка (AccessDenie г) при вызове операции GetObject: Доступ запрещен »
. Сменив профиль на учетные данные владельца корзины, я могу загрузить файл.
Что я делаю не так?
[обратите внимание, что хотя у меня есть доступ как к учетной записи A, так и к учетной записи B в этой тестовой настройке, в реальной жизни учетная запись B будет принадлежать третьей стороне, которой я хочу предоставить рабочую политику, которую они могут использовать для открытия что им требуется]
Решение заключалось в том, что при предоставлении разрешения роли, принадлежащей сторонней учетной записи, к этой роли необходимо добавить политику, предоставляющую доступ и к корзине - разрешения должны быть быть определенным и соответствовать на обоих концах