AWS STS для перечисления корзин дает доступ запрещен
У меня есть корзина с пустой политикой корзины, включена блокировка общего доступа (ACL и Bucket), и я пытаюсь составить список корзин с помощью политики IAM, привязанной к пользователю с помощью STS AssumeRole со следующей прикрепленной политикой.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:GetBucket*",
"s3:ListBucket*",
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-test-bucket/*"
]
}
]
}
Предполагаемые учетные данные роли используются во время сеанса STS в python (boto3)
s3c = boto3.client('s3',
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken'])
s3c.list_buckets()
Я получаю это исключение:
botocore.exceptions.ClientError: Произошла ошибка (AccessDenied) при вызове операции ListBuckets: Доступ запрещен
Когда я пытался использовать симулятор политики IAM, он показывает "Неявно отказано". Я думаю, нужно ли мне получить доступ к политике корзины для этого пользователя? Насколько я понимаю, если и политика IAM, и политика сегмента, это пересечение. Если один из них отсутствует, другой имеет приоритет.
2 ответа
Вызов list_buckets()
использует s3:ListAllMyBuckets
разрешение.
Это разрешение не может быть ограничено конкретным сегментом. Пользователь может либо указать все сегменты в учетной записи, либо ни одну из них.
Вызов операций с ведром (ListBucket, GetBucket*
) требует разрешения для самого ведра.
Для операций с объектами требуется разрешение на объекты (или/*
после имени сегмента, чтобы разрешить действия со всеми объектами).
Таким образом, вы можете изменить свою политику на:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucket*"
],
"Resource": "arn:aws:s3:::my-test-bucket"
},
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-test-bucket/*"
}
]
}
Это довольно распространенная проблема, потому что люди склонны упускать из виду разницу между ресурсом "ведро" и ресурсом "объект". Ковш заканчивается названием ведра (arn:aws:s3:::my-test-bucket
), тогда как объект включает ведро и ключ и часто получает звездочку после начального слэша. Итак, просто измените свою политику на следующую.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-test-bucket"
]
},
{
"Action": [
"s3:GetObject",
"s3:GetBucket*",
"s3:ListBucket*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-test-bucket/*"
]
}
]
}