Поэтому я хочу предоставить роли, которая существует в учетной записи 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 для всех и всех объектов внутри корзины имя-ведра».
тестовый объект в корзине, 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-адрес)
Я получаю сообщение «Произошла ошибка (AccessDenied) при вызове операции GetObject: доступ запрещен»
Сменив профиль на учетные данные владельца корзины, я могу скачать файл.
Что я делаю не так?
[обратите внимание, что хотя у меня есть доступ как к учетной записи A, так и к учетной записи B в этой тестовой настройке, в реальной жизни учетная запись B будет принадлежать третьей стороне, которой я хочу предоставить рабочую политику, которую они могут использовать для открытия того, что им требуется ]
Решение заключалось в том, что при предоставлении разрешения роли, принадлежащей сторонней учетной записи, к роли необходимо добавить политику, предоставляющую доступ к корзине - разрешения должны быть определены и согласованы на обоих концах.