2015-10-03 4 views
7

Я знакомлюсь с использованием S3 с ruby ​​для загрузки файлов в Amazon Web Service. Я недавно столкнулся со следующей ошибкой: AWS::S3::Errors::AccessDenied Access Denied. В то время как в Google, я нашел this post об ошибке. Он утверждает, что политики в ведрах недостаточны для обеспечения доступа через веб-приложение и что пользователю также должен быть предоставлен «Доступ администратора».Доступ запрещен S3 с Paperclip

Я дал ему попробовать, и все работает нормально, но я чувствую, что это признак того, что я не делаю это правильно, учитывая, что доступ администратора не упоминается ни в какой другой документации, которую я прочитал. Я использую драгоценный камень aws-sdk. Может ли кто-нибудь взвесить вопрос о том, нужен ли доступ администратора? Большое спасибо!

+0

Вы не должны действительно нужен 'Администратор Access' для достижения этой цели. У вас есть настройки AWS 'access_key_id' и' secret_access_key' в вашей конфигурации heroku? Вам просто нужно убедиться, что ваша учетная запись пользователя имеет «политику доступа», установленную в консоли IAM. Посмотрите это для получения дополнительной информации: https://github.com/thoughtbot/paperclip/wiki/Paperclip-with-Amazon-S3 –

+0

@KMRakibulIslam Спасибо за ответ! На самом деле я пока не пытаюсь это сделать на Heroku; Я просто отработал свой локальный хост. Я думаю, что я пропускаю необходимую «политику доступа» в консоли IAM. Какую политику я должен назначить пользователю? 'AmazonsS3FullAccess?' – neanderslob

+0

да, это должно сработать. –

ответ

4

Для этого вам не нужен Admin Access. Убедитесь, что у вас установлены AWS access_key_id и secret_access_key в настройках вашего героя. Кроме того, вам также необходимо убедиться, что ваша учетная запись пользователя имеет Access Policy, установленную в консоли AWS IAM.

См. this post для получения дополнительной информации.

Разрешение по умолчанию для Paperclip равно :public_read, если вы не указали, что ведро является приватным.

Смотрите это для получения информации о Module: Paperclip::Storage::S3

+1

Закончив настройку AmazonS3FullAccess для пользователя, он работал как шарм. Если бы я был разбит на другие ведра, я полагаю, что я мог бы оттачивать политику более точно, создав пользовательский, но теперь это будет работать. Благодаря! – neanderslob

+0

Звучит здорово! Благодаря :) –

6

Как объяснено в принятом ответ, вы не должны «Администратор доступа». Однако типичной политики предоставления доступа к ведру, как описано в некоторых примерах, данных Amazon, недостаточно для скрепки.

Следующая политика работает для меня:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetBucketLocation", 
       "s3:ListAllMyBuckets" 
      ], 
      "Resource": "arn:aws:s3:::*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::bucket-name-to-be-set-by-you" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::bucket-name-to-be-set-by-you/*" 
      ] 
     } 
    ] 
} 
6

Ни один из существующих ответов на самом деле заявить, какую политику вы должны предоставить, так вот они: s3:PutObject, s3:DeleteObject и s3:PutObjectAcl.

Вот полный политик S3 ведра, я использую, чтобы Paperclip поставить объекты с :public_read разрешения:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::IAM_USER_ID:user/IAM_USER_NAME" 
      }, 
      "Action": [ 
       "s3:PutObject", 
       "s3:DeleteObject", 
       "s3:PutObjectAcl" 
      ], 
      "Resource": "arn:aws:s3:::S3_BUCKET_NAME/*" 
     } 
    ] 
} 
Смежные вопросы