У меня есть белые волосы, пытаясь определить правильную конфигурацию. Вот один, который работает для меня:
{
"Statement": [
{
"Sid": "AllowPublicRead",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::mybucket/*",
"arn:aws:s3:::mybucket"
]
}
]
}
Эта политика должна быть приложена к надлежащему лицу («Прикрепленный вкладке объект»), который может быть выделенным пользователя. Если вам нужны ключи API/Access, перейдите на вкладку «Учетные записи безопасности» для этого пользователя и создайте некоторые. Это позволяет вам больше контролировать, кто использует эту политику.
Вы также можете отредактировать эту политику, чтобы разрешить анонимный доступ, указав «Принципал»: «*», как предложено @therealprashant в комментариях, см. the docs для получения дополнительной информации.
Но вам также необходимо установить конфигурацию CORS. Откройте S3 console, нажмите на свое ведро, покажите его Свойства (правая панель) и нажмите «Разрешения», вы сможете отредактировать конфигурацию.
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://*.example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>http://example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Добавить столько CORSRule, сколько вам нужно, особенно если вам нужно https.
Надеюсь, что это поможет.
Редактировать
Вот модифицированная версия Я на самом деле, используя в настоящее время.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::mybucket/*",
"arn:aws:s3:::mybucket"
]
}
]
}
Примечание: «основной» может быть опущено (как это сделал я) в IAM политики, которые прикреплены к IAM пользователя, группы или роли. Во время авторизации «принципал» оценивается как объект, к которому привязана политика.
Спасибо Nycen, я попробовал это, но, к сожалению, без succes (все еще 403 запрещено в журналах). Мой домен - https://mydomain.herokuapp.com. Я пробовал в конфигурации CORS: 'https: // mydomain.herokuapp.com',' https: // *. Herokuapp.com', 'http: // mydomain.herokuapp.com',' http: // * .herokuapp.com', но все без успеха при попытке загрузить изображение аватара. В политике я заменил «mybucket» на имя моего ведра. – Nick
Кстати, мне также нужно установить гранта в разделе «Разрешения для ведра»? – Nick
Нет, вам это не нужно. Но вы должны убедиться, что ваша html-форма правильно настроена. Вы можете использовать что-то вроде https://github.com/waynehoover/s3_direct_upload – Nycen