Я не могу загрузить загрузку с помощью Paperclip с использованием политики SAM IAM. У меня даже проблемы с прямыми загрузками jQuery (нет скрепки). Мой сценарий выглядит следующим образом: у меня есть приложение, на котором будет много сайтов. Каждый сайт будет иметь свое собственное ведро и должен иметь доступ только к собственному ковшу, никому другому. Документация IAM Example Policies объясняет, что именно я хочу сделать в разделе «Пример: разрешить каждому пользователю IAM доступ к папке в ведре». У меня есть группа IAM, настроенная для приложения, и у меня есть один пользователь на сайт в группе. Эти пользователи IAM принадлежат к группе. Политика группы выглядит следующим образом:Доступ Отказано при загрузке файлов в Amazon с использованием политик Paperclip и IAM
{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::my-app/${aws:username}/*"
}
]
}
Вот моя конфигурация CORS на ведре, для разработчика, конечно, она будет заблокирована вниз позже:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Вот мои настройки Скрепка:
has_attached_file :background_image,
storage: :s3,
s3_credentials: {
access_key_id: "xxx",
secret_access_key: "xxx"
},
bucket: "my-app",
s3_permissions: "public-read",
path: "/background_images/:id/:filename"
я ранее работал с политикой непосредственно на ведро, которые сделали работу, но не было гибким, как мне нужно, чтобы это было, когда я двигаюсь в производственной среде со многими «сайтов». Насколько я могу судить, я точно следил за документацией, но все, что я делаю, приводит к «Доступ запрещен». На этом этапе я даже не уверен, что моя проблема связана с моей политикой IAM или с моей конфигурацией Paperclip.
Редактировать: уточнение.
редактировать 2: окончательное решение
Вот мой последний IAM политика, основанная на this article:
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-app"],
"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::estimator-app"],
"Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::my-app/home/${aws:username}/*"]
}
]
}
И мои обновленные параметры PAPERCLIP:
has_attached_file :background_image,
storage: :s3,
s3_credentials: {
access_key_id: "xxx",
secret_access_key: "xxx"
},
bucket: "estimator-app",
s3_permissions: "public-read",
path: "/home/my_s3_username/background_images/:id/:filename"
Это было важно, чтобы включить имя пользователя в пути к папке. Я предполагал, что Amazon выведет это из учетных данных, но это не так.
Я действительно обновил разрешения для «Action»: «s3: *», чтобы проверить. Он работает, если я также обновляюсь до «Resource»: «arn: aws: s3 ::: my-app/*». В тот момент, когда я ввел $ {aws: username}, я снова получаю Access Denied. Спасибо за подсказку, хотя, я обязательно поставлю это в разрешениях. edit: На самом деле это появляется, если мой ресурс - это не что иное, как корень ведра, который я не могу загрузить. –
Ваша политика пользователя IAM кажется правильной, потому что вы уже используете правильную «версию» в политике. Как ваш пользователь на самом деле назван и каков путь S3, к которому вы пытаетесь загрузить? ('$ {aws: username}" переводит на [дружественное имя] (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html#Identifiers_FriendlyNames) для этого пользователя). В вашем примере путь выглядит как «background_images», но ваш пользователь IAM также называется «background_images»? – dcro
Пользователь является localhost-оценочным приложением, а группа - оценочным приложением. Интересно, сколько [этой статьи] (http://blogs.aws.amazon.com/security/post/Tx1P2T3LFXXCNB5/Writing-IAM-policies-Grant-access-to-user-specific-folders-in-an- Amazon-S3-bucke) относится к моей ситуации. –