0

Использование CloudFormation Я запустил экземпляр EC2 с ролью, которая имеет политику S3, которая выглядит следующим образомКак защитить ведро S3 от роли экземпляра?

{"Statement":[{"Action":"s3:*","Resource":"*","Effect":"Allow"}]} 

В S3 политик ведра походит так

{ 
"Version": "2012-10-17", 
"Id": "MyPolicy", 
"Statement": [ 
    { 
     "Sid": "ReadAccess", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::123456678:role/Production-WebRole-1G48DN4VC8840" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::web-deploy/*" 
    } 
] 
} 

Когда я Войти в экземпляр и попытка скручивать любой объект, который я загружаю в ведро (без изменений acl). Я получаю и неавторизованную ошибку 403.

Это правильный способ ограничить доступ к ведро только экземплярами, запущенными с определенной ролью?

ответ

0

Есть три способа предоставления доступа объекта в Amazon S3:

  • Объект ACL: Конкретные объекты могут быть помечены как «Public», так что любой желающий может получить доступ к ним.
  • Политика в отношении векселей: Политика, установленная на ведре, чтобы определить, какой доступ разрешить/запретить, либо публично, либо конкретным пользователям.
  • Политика IAM: Политика, размещенная на пользователе, группе или роли, предоставляя им доступ к ресурсу AWS, например, к ведро Amazon S3.

Если любой такой политики предоставления доступа, пользователь может получить доступ к объекту (ы) в Amazon S3. Единственное исключение - если существует политика Deny, которая переопределяет политику Allow.

Роль на экземпляре Amazon EC2

Вы предоставили эту роль, например Amazon EC2:

{"Statement":[{"Action":"s3:*","Resource":"*","Effect":"Allow"}]} 

Это обеспечит учетные данные экземпляра, которые могут быть доступны с помощью AWS Command-Line Interface (CLI) или любой с использованием SDK AWS. Они будут иметь неограниченный доступ к Amazon S3, если нет также Политика отказа, которая в противном случае ограничивает доступ.

Во всяком случае, эта политика предоставляет слишком большое разрешение. Это разрешает приложению в этом случае делать все, что угодно, на ваше хранилище Amazon S3, включая удаление всего этого! Лучше назначить наименьшие привилегии, только давая разрешение на то, что приложения необходимо сделать.

Amazon S3 Bucket Политик

Вы также создал Bucket политик, которая позволяет ничего, что принявшее Production-WebRole-1G48DN4VC8840 роли для извлечения содержимого web-deploy ведра.

Не имеет значения, какие конкретные разрешения принадлежит самой роли - эта политика означает, что просто использование роли для доступа к ведру web-deploy позволит ему читать все файлы. Таким образом, эта политика сама по себе будет достаточной для вашего требования предоставить ведро доступ к экземплярам с использованием роли - вам также не требуется политика внутри самой роли.

Итак, почему вы не можете получить доступ к контенту? Это связано с тем, что использование прямой CURL не определяет вашу роль/пользователя. Amazon S3 получает запрос и рассматривает его как анонимный, тем самым не предоставляя доступ.

Попытайтесь получить доступ к данным через CLI или программно с помощью вызова SDK. Например, эта команда CLI будет загрузить объект:

aws s3 cp s3://web-deploy/foo.txt foo.txt 

В режиме консоли будет автоматически захватывать учетные данные, относящиеся к вашей роли, предоставляя доступ к объектам.

+0

Это очищает мое недоразумение, спасибо! – MikeW

2

Роль экземпляра EC2 более чем достаточна для размещения/чтения в любом из ваших кодов S3, но вам нужно использовать роль экземпляра, которая не выполняется автоматически с помощью curl.

Вы должны использовать, например, aws s3 cp <local source> s3://<bucket>/<key>, который автоматически будет использовать роль экземпляра.

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