2015-09-07 4 views
0

Я очень удивлен, насколько сложно предоставить разрешения только для чтения в AWS S3-ведро. Возможно, это только я, но я бы предположил, что несколько используют S3 для хранения изображений для веб-сайтов и, таким образом, для их доступности, но только для чтения должен быть «щелчок и выбор».AWS S3 Политика отображения изображений (только для чтения). Пожалуйста, проверьте

Вместо этого, насколько я понимаю, вы используете политику ведра для этого, используя их bucket policy generator.

Я создал эту политику, которая, насколько я понимаю, должен делать то, что я хочу:

{ 
    "Version": "2012-10-17", 
    "Id": "Policy1441664301333", 
    "Statement": [ 
     { 
      "Sid": "Stmt1441664293105", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::my-bucket-name/*" 
     } 
    ] 
} 

где my-bucket-name конечно заменен. Это работает с точки зрения того, что мои изображения (все ведро - это просто изображения) общедоступны. Так как я вообще не понимаю код в этой политике, и я не могу понять, где его читать. Я хочу проверить:

  • Эта политика позволяет пользователям делать что-либо еще, кроме как читать файлы в моем ковше? То есть кто-то может удалить, загрузить файлы и т. д.? В принципе, могу ли я рискнуть что-то злое, чтобы произойти с моими изображениями?

Я считаю, что это граница того, что можно задать в StackOverflow, но я предполагаю, что эта проблема довольно распространена и как таковая будет интересна другим, а также ссылкой.

ответ

3

Объясняя эту политику:

Version": "2012-10-17", 

Это версия языка политики. 2012-10-17 - самый новый.

"Id": "Policy1441664301333", 

Это непрозрачный идентификатор, ярлык, не имеет значения для системы.

"Statement": [ 
    { 

Начинаем заявление о политике.

 "Sid": "Stmt1441664293105", 

Другой непрозрачный идентификатор.

 "Effect": "Allow", 

Эта политика, если таковая согласована, допускает указанные действия. Противоположно отрицать.

 "Principal": "*", 

Кем пользователи относятся к этой политике? * = любой и каждый

 "Action": "s3:GetObject", 

Какие действия разрешены, когда это правило соответствует? Получите объект из ведра S3.

 "Resource": "arn:aws:s3:::my-bucket-name/*" 

Какое ведро и какие файлы в ведре?

} 

Конец заявления о политике.

Эта политика делает то, что вы собираетесь.

Существует, конечно, более простой способ выполнить это. При загрузке на S3 через консоль вы можете выбрать «сделать все общедоступным» или при загрузке через API, вы можете использовать консервированный ACL с именем public-read. Это дает такое же разрешение, но на уровне объекта вместо уровня ковша, но эффект тот же.

В S3, и действительно, все AWS, подчиненные политикам IAM, действие по умолчанию запрещает. Что-то должно разрешать доступ к вещам, которые вы хотите публиковать ... и что что-то в случае S3 может быть политикой уровня на уровне вектора, уровнем объекта. Отсутствие какого-либо правила, допускающего put, delete, list и т. Д., Означает, что эти вещи неявно лишены.

Когда политики оцениваются, одно правильное правило «deny» (кроме встроенного неявного запрета) отменяет любое правило «разрешить».

+0

Спасибо за отличный ответ и разъяснение! – Christoffer

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