AccessDenied для ListObjects for S3, когда разрешения равны s3: *
я получаю
Произошла ошибка (AccessDenied) при вызове операции ListObjects: доступ запрещен
когда я пытаюсь получить папку из моей корзины 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
успешно?
Ответы
Ответ 1
Вы дали разрешение на выполнение команд над объектами внутри корзины S3, но у вас нет разрешения на выполнение каких-либо действий над самой корзиной. Измените свою политику следующим образом:
Незначительное изменение вашей политики будет выглядеть так:
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname",
"arn:aws:s3:::bucketname/*"
]
}
]
}
Тем не менее, это, вероятно, дает Мро разрешение, чем необходимо. В соответствии с рекомендациями AWS IAM по предоставлению минимальных привилегий это будет выглядеть примерно так:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucketname"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
]
}
Ответ 2
Если вы хотите скопировать все объекты корзины s3 с помощью команды "aws s3 cp s3://имя-корзины/data/all-data/. --recursive", как вы упомянули, вот безопасная и минимальная политика для этого:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-name"
],
"Condition": {
"StringLike": {
"s3:prefix": "data/all-data/*"
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::bucket-name/data/all-data/*"
]
}
]
}
Первый оператор в этой политике позволяет перечислять объекты внутри определенного подкаталога сегмента. Ресурс должен быть арном блока S3, и чтобы ограничить список только подкаталогом в этом сегменте, вы можете отредактировать значение "s3: prefix".
Второе утверждение в этой политике позволяет получать объекты внутри корзины в определенном подкаталоге. Это означает, что все, что находится внутри пути "s3://bucket-name/data/all-data/", вы сможете скопировать. Имейте в виду, что это не позволяет копировать из родительских путей, таких как "s3://bucket-name/data/".
Это решение относится только к ограничению использования команд AWS CLI; если вам необходимо ограничить доступ к S3 через консоль AWS или API, потребуется больше политик. Я предлагаю посмотреть здесь: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/.
Подобную проблему можно найти здесь, которая привела меня к решению, которое я даю.
https://github.com/aws/aws-cli/issues/2408
Надеюсь это поможет!
Ответ 3
Вы должны указать Resource для bucket через "arn: aws: 3: bucketname" или "arn: aws: 3: bucketname *". Последнее предпочтительнее, поскольку оно позволяет манипулировать объектами ковша. Обратите внимание, что нет слэша!
Объекты листинга - это операция над Bucket. Поэтому требуется действие "s3: ListBucket".
Добавление объекта в ведро - это операция над объектом. Поэтому требуется действие "s3: PutObject".
Конечно, вы можете добавить другие действия по мере необходимости.
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::bucketname*"
]
}
]
}
Ответ 4
Мне не удалось получить доступ к S3, потому что
- Сначала я сконфигурировал доступ к ключам в экземпляре (после запуска было невозможно установить роль)
- забыли об этом несколько месяцев.
- прикрепленная роль к экземпляру
- пытался получить доступ.
У сконфигурированного ключа был более высокий приоритет, чем роль, и доступ был отклонен, поскольку пользователю не были предоставлены необходимые разрешения S3.
Решение: rm -rf .aws/credentials
, тогда aws
использует роль.
Ответ 5
Я получил ту же ошибку при использовании политики, как показано ниже, хотя у меня есть "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"
}
]
}
Ответ 6
Я думал, что ошибка связана с действием "s3: ListObjects", но мне пришлось добавить действие "s3: ListBucket", чтобы решить проблему "AccessDenied для ListObjects для корзины S3"
Ответ 7
Я столкнулся с той же проблемой. Я только что добавил конфигурацию учетных данных:
aws_access_key_id = your_aws_access_key_id
aws_secret_access_key = your_aws_secret_access_key
в "~/.aws/credentials" + перезапустить терминал для профиля по умолчанию.
В случае нескольких профилей необходимо добавить --profile arg:
aws s3 sync ./localDir s3://bucketName --profile=${PROFILE_NAME}
где PROFILE_NAME:
.bash_profile ( or .bashrc) -> export PROFILE_NAME="yourProfileName"
Подробнее о настройке учетных данных и нескольких профилей можно узнать здесь .
Ответ 8
Столкнулся с аналогичными проблемами, для меня проблема заключалась в том, что в моем bash_profile были установлены разные ключи AWS.
Я ответил на аналогичный вопрос здесь: fooobar.com/questions/17839985/...
Если у вас есть конфликтующие ключи AWS в вашем bash_profile, AWS CLI по умолчанию использует их.
Ответ 9
Я попробовал следующее:
aws s3 ls s3.console.aws.amazon.com/s3/buckets/{bucket name}
Это дало мне ошибку:
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
Использование этой формы сработало:
aws s3 ls {bucket name}