В AWS я действительно слоняюсь, пытаясь понять, чего мне здесь не хватает. Я хотел бы сделать так, чтобы пользователь IAM мог загружать файлы из корзины S3 - не делая их полностью открытыми - но мне отказывают в доступе. Если кто-то может заметить, что выключено, я буду топить.
Что я сделал до сих пор:
- Создан пользователь my-user (для примера)
- Сгенерировал ключи доступа для пользователя и поместил их в ~ / .aws на экземпляре EC2
- Создана политика корзины, которая, как я надеялся, предоставляет доступ моему пользователю
- Управлял командой
aws s3 cp --profile my-user s3://my-bucket/thing.zip .
Политика ковша:
{
"Id": "Policy1384791162970",
"Statement": [
{
"Sid": "Stmt1384791151633",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/my-user"
}
}
]
}
В результате A client error (AccessDenied) occurred: Access Denied
я могу скачать, используя ту же команду и ключи доступа по умолчанию (root account?).
Я также попытался добавить политику пользователя. Хотя я не знаю, зачем это нужно, я подумал, что это не повредит, поэтому я прикрепил это к своему пользователю.
{
"Statement": [
{
"Sid": "Stmt1384889624746",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Те же результаты.
Когда я столкнулся с той же проблемой, оказалось, что для AWS требуется шифрование на стороне сервера. Итак, следующая команда успешно сработала для меня:
источник
--sse aws:kms
использовать ведро «по умолчанию» ...--sse-kms-key-id 0123-abc-etc
менее, непонятная часть заключается в том, что для использования своего собственного ключа KMS необходимо иметь разрешение IAM,kms:GenerateDataKey
иначе вам все равно будет отказано в доступе.Я бы не рекомендовал вариант «Любой аутентифицированный пользователь AWS», упомянутый Джеймсом.
Это добавляет ACL уровня сегмента, который позволяет любой учетной записи AWS (не только вашим пользователям IAM) перечислять / удалять / изменять acls для этого сегмента.
т.е. публичное чтение / запись для всех, кто имеет аккаунт aws.
источник
Мне удалось это исправить без необходимости написания политик - в консоли S3 (веб-интерфейс) я выбрал корзину, а на вкладке разрешений - «Любой аутентифицированный пользователь AWS» и выписал все коробки.
ОБНОВЛЕНИЕ: как указано в комментариях «Любой прошедший проверку подлинности пользователь AWS» - это не просто пользователи в вашей учетной записи, это все пользователи, прошедшие проверку подлинности AWS, пожалуйста, используйте с осторожностью
источник
Даже если ваши политики IAM настроены правильно, вы все равно можете получить сообщение об ошибке, например,
An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
из-за требований MFA (многофакторной аутентификации) к вашим учетным данным. Это может застать вас врасплох, потому что, если вы уже вошли в консоль AWS, может показаться, что ваши учетные данные работают нормально, и сообщение об ошибке отказа в доступе от aws cli не особенно полезно.Уже есть несколько хороших инструкций по настройке MFA с помощью aws cli:
По сути, вам нужно получить адрес вашего устройства MFA и отправить его вместе с кодом вашего устройства, чтобы получить временный токен.
источник
Я просто включил веб-интерфейс и нажал на корзину, затем перешел к разрешениям и затем к политике. Когда я открыл его, я просто нажал «Удалить». Я сделал это, потому что я думаю, что это была конфигурация.
Я вернулся на главную страницу s3, затем нажал на ведро и попытался удалить его, и это сработало.
даже когда я сделал это с помощью aws-cli
Во всяком случае, это то, что сработало для меня. Политика разрешений мешает вам удалить корзину.
источник
Однажды я получил эту ошибку, просто пытаясь запустить:
aws s3 cp s3://[bucketName]/[fileName] .
в папке, где у меня не было разрешений. Это глупо, но прежде чем двигаться дальше, убедитесь, что вы являетесь владельцем папки, в которой находитесь!
источник
Проблема возникает, когда вы вставляете неверные имена ресурсов или объектов. У меня была та же проблема с boto3 (в моем случае это было неверное имя корзины)
источник