#amazon-web-services #amazon-s3
#amazon-web-services #amazon-s3
Вопрос:
Итак, у меня есть частная корзина s3, и я хочу иметь возможность загружать в нее файл. У моего пользователя есть AmazonS3FullAccess
, и оказывается, что этого недостаточно.
Ошибка
Error executing "PutObject" on "https://my-existing-bucket-name.s3.amazonaws.com/5037f466f9018271b16b1e77d3d7f386.pdf"; AWS HTTP error: Client error: `PUT https://my-existing-bucket-name.s3.amazonaws.com/5037f466f9018271b16b1e77d3d7f386.pdf` resulted in a `403 Forbidden`
Я также попытался добавить пользовательскую политику
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::my-existing-bucket-name/*"
}
]
}
но все равно это не работает, хотя можно удалить или получить файл, используя те же учетные данные.
Вот как я загружаю файлы в AWS (он отлично работает, если переключить доступ к корзине с частного на общедоступный)
$this->s3Client->putObject([
'Bucket' => $this->bucket,
'Key' => $keyName,
'ContentType' => $contentType,
'CacheControl' => 'max-age=86400',
'Body' => fopen($file, 'rb'),
'ACL' => 'authenticated-read',
]);
Комментарии:
1.
$this->s3Client->putObject
Выполняется ли под вашим пользователем IAM или какой-либо ролью IAM?2. @Marcin есть специальный пользователь IAM с указанными политиками, я добавил его ключ доступа к моему SDK
3. Существуют ли какие-либо политики корзины?
4. Нет, я только что переключился
Block all public access
, и все флажки ниже включены
Ответ №1:
Оказывается, проблема заключалась в следующем варианте
'ACL' => 'authenticated-read'
в описании к аутентифицированному чтению говорится Owner gets FULL_CONTROL. The AuthenticatedUsers group gets READ access.
По-видимому, он конфликтует с настройками private bucket и именно поэтому выдает ошибку. Но код ошибки 403 сбивает с толку, я думаю, что код ответа 409 имеет здесь гораздо больше смысла. В любом случае, это сработало, когда я переключился на private, который является ACL по умолчанию.