2017-01-12 4 views
2

Сценарий: У меня есть экземпляр EC2 и ведро S3 под той же учетной записью, и мое веб-приложение на этом EC2 хочет получить доступ к ресурсам в этом ковше.AWS EC2 доступ к S3 с ролью IAM

Следуя официальным документам, я создал роль IAM с помощью s3access и присвоил ее экземпляру EC2. Насколько я понимаю, теперь мое веб-приложение должно иметь доступ к ведру. Однако, после испытаний, кажется, я должен добавить политику allowPublicRead ведра, как это:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Sid": "AllowPublicRead", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mybucket/*" 
     } 
    ] 
} 

В противном случае я получил доступ запрещен.

Но почему я должен использовать эту политику allowPublicRead, так как я уже предоставил s3access роль IAM экземпляру EC2?

ответ

1

S3 s3:GetObject разрешает доступ только к объектам из вашего экземпляра ec2, и вы хотите получить доступ к этим объектам из своего веб-приложения, что означает ваш браузер, в этом случае эти изображения/объекты будут отображаться в браузере пользователя и если это общедоступное приложение, тогда вам необходимо назначить также разрешение AllowPublicRead.

+0

Спасибо! Еще один вопрос, если только клиент напрямую разговаривает с S3, почему нам нужно назначить роль IAM с 's3access' в EC2? –

+1

Да, поскольку ваш код развернут на машине ec2, и ему нужно подключиться к S3, чтобы получить объект, а затем отправить его обратно клиенту. Таким образом, ec2 должен иметь доступ S3. –

Смежные вопросы