2016-06-03 3 views
3

Я пытаюсь настроить так, чтобы единственными файлами, которые может хранить ведро, были изображения png, jpeg и gif. Я пытаюсь поставить в политике ведра, как этогоОграничение типов файлов в корзине amazon s3 с политикой

{ 
    "conditions": [ 
     {"bucket": "bucketname"}, 
     ["starts-with", "$Content-Type", "image/jpeg"], 
     ["starts-with", "$Content-Type", "image/png"], 
     ["starts-with", "$Content-Type", "image/gif"], 
     ["content-length-range", 0, 10485760] 
    ] 
} 

Тогда я также пытаюсь ограничить размер, но когда я пытаюсь обновить свою политику, я получаю ошибку «Invalid элемента политики - условия»

Я попытался использовать ответ отсюда - s3 direct upload restricting file size and type, так вот откуда я сделал свой код, но я не уверен, правильный подход для этого, так как моя политика даже не принимается amazon.

+0

Это вся ваша политика документ? Потому что это не полный документ. Посмотрите на эти примеры документов политики: http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html –

+0

Загрузить всю политику, которую вы будете использовать для этого, как указано выше, является неполным кодом. – error2007s

+0

Предостережение заключается в том, что только потому, что кто-то загружает файл с именем «blah.png», это не означает, что это файл PNG, а S3 не может проверять форматы файлов. Если вы действительно хотите убедиться, что получаете только эти форматы, вам нужно будет подтвердить другой способ. –

ответ

3

Вы можете использовать генератор политики для этого, если вы не знаете, как писать, например, вы бы что-то вроде

{ 
    "Id": "Policy1464968545158", 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "Stmt1464968483619", 
     "Action": [ 
     "s3:PutObject" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::<yourbucket>/*.jpg", 
     "Principal": "*" 
    }, 
    { 
     "Sid": "Stmt1464968543787", 
     "Action": [ 
     "s3:PutObject" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::<yourbucket>/*.png", 
     "Principal": "*" 
    } 
    ] 
} 

Как сказал из doc можно указать несколько ресурсов и агрегировать эту часть, так что не нужно умножить на заявление

"Resource": [ 
     "arn:aws:s3:::<yourbucket>/*.jpg", 
     "arn:aws:s3:::<yourbucket>/*.png", 
     "arn:aws:s3:::<yourbucket>/*.gif", 
    ], 

так что вы получите что-то вроде

{ 
    "Id": "Policy1464968545158", 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
     "Sid": "Stmt1464968483619", 
     "Action": [ 
      "s3:PutObject" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
      "arn:aws:s3:::<yourbucket>/*.jpg", 
      "arn:aws:s3:::<yourbucket>/*.png", 
      "arn:aws:s3:::<yourbucket>/*.gif", 
     ], 
     "Principal": "*" 
     } 
    ] 
} 

вы можете получить доступ к генератор политики при создании политики ведра

enter image description here

+1

Это проверяет только расширение файла, а не фактический тип файла. Файл с расширением .jpg необязательно должен быть файлом изображения. – bangde

+0

@bangde это было подчеркнуто в комментариях выше, что, если вы хотите проверить тип содержимого, вы не можете сделать это в политике ведра, вы можете сделать это в форме сообщения s3 policy –

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