AccessDenied для ListObjects для корзины S3, когда разрешения s3:*
Я
произошла ошибка (AccessDenied) при вызове операции ListObjects: Access Denied
когда я пытаюсь получить папку из моего ведра S3.
С помощью этой команды
aws s3 cp s3://bucket-name/data/all-data/ . --recursive
разрешения IAM для ведра выглядят так
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
] }
что мне нужно изменить, чтобы иметь возможность copy
и ls
успешно?
5 ответов:
вы дали разрешение на выполнение команд над объектами внутри корзины S3, но вы не дали разрешения на выполнение каких-либо действий над самой корзиной. Измените свою политику следующим образом:
{ "Version": "version_id", "Statement": [ { "Sid": "some_id", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::bucketname", "arn:aws:s3:::bucketname/*" ] } ] }
Если вы хотите скопировать рекурсивно все объекты корзины s3 с помощью команды " aws s3 cp s3://bucket-name/ data / all-data/. -- рекурсивный" как вы упомянули, вот минимальная политика, необходимая для этого:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::bucket-name" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::bucket-name/data/all-data/*" ] } ] }
первый оператор в этой политике позволяет перечислять объекты внутри корзины. Имейте в виду, что с помощью этого параметра вы также можете перечислять объекты в подкаталогах этого ведра. Кажется невозможным только дать разрешение ls на суб s3 каталоги, поэтому попытка применить это действие к ресурсу " arn:aws: s3::://bucket-name/data/all-data/" не будет работать должным образом (я протестировал и попробовал несколько способов сделать это, помощь здесь будет оценена).
второй оператор в этой политике позволяет получать объекты внутри корзины в определенном подкаталоге. Это означает, что все, что находится внутри пути "s3://bucket-name/data/all-data/", вы сможете скопировать. Имейте в виду, что это не позволяет копировать из родительские пути, такие как"s3://bucket-name/data/".
аналогичную проблему можно найти здесь, что привело меня к решению, которое я даю. https://github.com/aws/aws-cli/issues/2408
надеюсь, что это поможет!
вы должны указать ресурс для ведра через "arn:aws: 3::: bucketname" или "arn:aws: 3::: bucketname*". Последнее предпочтительнее, так как оно также позволяет манипулировать объектами ведра. Обратите внимание, что нет косой черты!
перечисление объектов-это операция над ведром. Таким образом, действия "С3:ListBucket" обязательна. Добавление объекта в корзину-это операция над объектом. Поэтому необходимо действие "s3: PutObject". Конечно, вы можете добавить другие действия, как вы требовать.
{ "Version": "version_id", "Statement": [ { "Sid": "some_id", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucketname*" ] } ] }
Я не смог получить доступ к S3, потому что
- сначала я настроил доступ к ключу на экземпляре (тогда было невозможно прикрепить роль после запуска)
- забыл об этом на несколько месяцев
- добавленные роль к примеру
- попытался открыть. Настроенный ключ имел более высокий приоритет, чем роль, и доступ был запрещен, потому что пользователю не были предоставлены необходимые разрешения S3.
устранение:
rm -rf .aws/credentials
, потомaws
использует роль.
Я получил ту же ошибку при использовании политики, как показано ниже, хотя у меня есть "s3:ListBucket" для операции s3:ListObjects.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListBucket", "s3:GetObject", "s3:GetObjectAcl" ], "Resource": [ "arn:aws:s3:::<bucketname>/*", "arn:aws:s3:::*-bucket/*" ], "Effect": "Allow" } ] }
затем я исправил это, добавив одну строку "arn: aws:s3::: bucketname"
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListBucket", "s3:GetObject", "s3:GetObjectAcl" ], "Resource": [ "arn:aws:s3:::<bucketname>", "arn:aws:s3:::<bucketname>/*", "arn:aws:s3:::*-bucket/*" ], "Effect": "Allow" } ] }