Я получаю:
Произошла ошибка (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
успешно?
amazon-web-services
amazon-s3
user1411335
источник
источник
aws
для одного пользователя и использовал его внутри bash-скрипта, называемого cronjob, от другого пользователя, то есть ключ доступа и токен доступа были неправильными / не были установлены. Мое решение заключалось в том, чтобы напрямую поместить учетные данные (AWS_ACCESS_KEY_ID
иAWS_SECRET_ACCESS_KEY
) в мой файл сценария bash, как описано здесь .Ответы:
Вы дали разрешение на выполнение команд над объектами внутри корзины S3, но не дали разрешения на выполнение каких-либо действий с самой корзиной.
Если немного изменить политику, это будет выглядеть так:
Однако это, вероятно, дает больше разрешений, чем необходимо. Если следовать рекомендациям AWS IAM по предоставлению минимальных привилегий, это будет выглядеть примерно так:
источник
"Resource": [ "arn:aws:s3:::bucketname/", "arn:aws:s3:::bucketname/*" ]
как я (т.е. вам нужна только косая черта перед*
) - мне потребовалось 4 долгих часа, чтобы осознать, что эта ошибка привелаlistObjects
к сбою всех моих вызовов ...Если вы хотите скопировать все объекты корзины s3 с помощью команды "aws s3 cp s3: // bucket-name / data / all-data /. --Recursive", как вы упомянули, вот безопасная и минимальная политика для этого:
Первый оператор в этой политике позволяет перечислять объекты внутри подкаталога определенного сегмента. Ресурс должен быть arn сегмента S3, и чтобы ограничить листинг только подкаталогом в этом сегменте, вы можете изменить значение «s3: prefix».
Второй оператор в этой политике позволяет получать объекты внутри корзины в определенном подкаталоге. Это означает, что все, что находится внутри пути «s3: // bucket-name / data / all-data /», вы сможете скопировать. Имейте в виду, что это не позволяет вам копировать из родительских путей, таких как «s3: // bucket-name / data /».
Это решение предназначено для ограничения использования команд интерфейса командной строки AWS; если вам нужно ограничить доступ к 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
Надеюсь это поможет!
источник
ListBucket
Вы должны указать ресурс для корзины через «arn: aws: 3 ::: bucketname» или «arn: aws: 3 ::: bucketname *». Последний вариант предпочтительнее, так как он позволяет манипулировать объектами ведра. Обратите внимание, что косой черты нет!
Список объектов - это операция над Bucket. Следовательно, действие «s3: ListBucket» является обязательным. Добавление объекта в Bucket - это операция над Object. Следовательно, действие «s3: PutObject» необходимо. Конечно, вы можете добавить другие действия по мере необходимости.
источник
arn:aws:s3:::bucketname*
том, что он также разрешает доступ кarn:aws:s3:::bucketname-with-suffix
Мне не удалось получить доступ к S3, потому что
Решение:,
rm -rf .aws/credentials
затемaws
использует роль.источник
Я получил ту же ошибку при использовании политики, как показано ниже, хотя у меня есть «s3: ListBucket» для операции s3: ListObjects.
Затем я исправил это, добавив одну строку «arn: aws: s3 ::: bucketname»
источник
Я думал, что ошибка связана с действием «s3: ListObjects», но мне пришлось добавить действие «s3: ListBucket», чтобы решить проблему «AccessDenied for ListObjects for S3 bucket»
источник
Я столкнулся с той же проблемой. Я только что добавил конфигурацию учетных данных:
в "~ / .aws / credentials" + перезапустить терминал для профиля по умолчанию.
В случае использования нескольких профилей необходимо добавить --profile arg:
где PROFILE_NAME :
Более подробную информацию о том, как настроить учетные данные и несколько профилей, можно найти здесь.
источник
Я пробовал следующее:
Это дало мне ошибку:
Использование этой формы работало:
источник
Я добавляю ответ в том же направлении, что и принятый ответ, но с небольшими (важными) отличиями и добавляю больше деталей.
Рассмотрим конфигурацию ниже:
Политика предоставляет программные записи-удаления доступа и разделяется на две части: действие обеспечивает разрешения на уровне ведра и другие действия требуют разрешения на доступ к объектам внутри ведра.
ListBucket
PutObject/DeleteObject
Первый элемент Resource указывает
arn:aws:s3:::<Bucket-Name>
дляListBucket
действие , так что приложения могут перечислить все объекты в ведре.Второй элемент определяет ресурсы
arn:aws:s3:::<Bucket-Name>/*
дляPutObject
, иDeletObject
действий , так что приложения могут писать или удалять любые объекты в ведре.Разделение на два разных «arns» важно из соображений безопасности, чтобы указать детализированные разрешения на уровне корзины и на уровне объекта.
Обратите внимание, что если бы я указал только
GetObject
во втором блоке, то в случае программного доступа я бы получил сообщение об ошибке:Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
,источник
Мне это нравится больше, чем любой из предыдущих ответов.
источник
Возникли похожие проблемы, для меня проблема заключалась в том, что у меня были разные ключи AWS, установленные в моем bash_profile.
Я ответил на аналогичный вопрос здесь: https://stackoverflow.com/a/57317494/11871462
Если у вас есть конфликтующие ключи AWS в вашем bash_profile, вместо них по умолчанию используется интерфейс командной строки AWS.
источник
У меня была эта проблема, и я хотел разрешить пользователю писать по определенному пути
и проблема была решена с этим изменением
источник