Документ политики для объекта для AWS s3 - Что такое ACL - PullRequest
0 голосов
/ 08 июня 2018

Что я хочу сделать, так это отправить файл прямо из браузера на s3 с signature-v4.У меня проблема с созданием документа политики для объекта

. Отсюда: https://blog.shikisoft.com/signing-aws-s3-uploads-with-signature-v4-ruby-on-rails-angularjs/

Я вижу, как должен выглядеть этот документ:

Base64.encode64(
    {
      "expiration" => 1.hour.from_now.utc.xmlschema,
      "conditions" => [
        { "bucket" =>  bucket },
        [ "starts-with", "$key", "" ],
        { "acl" => "private" },
        [ "starts-with", "$Content-Type", "" ],
        {"x-amz-algorithm" => x_amz_algorithm },
        {"x-amz-credential" => x_amz_credential },
        {"x-amz-date" => x_amz_date},
        [ "content-length-range", 0, 524288000 ]
      ]
    }.to_json

Я не знаю, что такое ACLдолжен ли я использовать.

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

Вот список разрешений ACL (я считаю, что это правильное место) https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl

Могу ли я получить разрешение только для загрузки,только для удаления, только для чтения, только для чтения и удаления для одного файла?Другой вопрос - это Content Type, который, я считаю, должен генерироваться на основе расширения.

Пожалуйста, прости меня, если мне не хватает некоторых базовых понятий

РЕДАКТИРОВАТЬ 1

Я не упомянул, что хочу использовать многочастную загрузку и из документов awshttps://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html

рядом с s3:getObject, s3:putObject, мне нужно дать s3:ListMultipartUploadParts также

Как я могу ограничить его только файлами или папками?Дело в том, что каждый пользователь имеет личные файлы и должен иметь доступ только к файлам, которыми он владеет

1 Ответ

0 голосов
/ 12 июня 2018

Я полагаю, что гранулярность того, что вы пытаетесь получить, будет легче осуществить, включив некоторые другие средства.Я предлагаю политику с AWS IAM.(То есть, я собираюсь дать информацию о решении этой проблемы с помощью политик, потому что я не уверен, что это может быть выполнено только с помощью ACL, как вам бы хотелось.)

Из Amazon: "Политика определяет разрешения AWS, которые вы можете назначить пользователю, группе или роли. Вы можете создавать и редактировать политику в визуальном редакторе и используя JSON. "

С помощью политики вы можете указать привилегиивплоть до конкретной службы, команды, ресурсов и запросов.

Некоторые примеры этих политик:

s3 service, putObject only, arn:aws:s3:::<yourbucket>/*.jpg only
s3 service, deleteObject only, arn:aws:s3:::<yourbucket>/*.png only

Первая позволяет загружать файлы .jpg только в эту корзину ивторая позволяет удалять файлы .png только из этого сегмента.Вы можете создавать эти политики с помощью raw json, но я не буду их включать, потому что, я думаю, вы поймете лучше, используя для этого их интерфейс.Example showing the putObject policy.

Вы можете настроить эти политики так, чтобы они позволяли использовать несколько сегментов и несколько типов файлов, если вы хотите разрешить более одного.Вы также можете смешивать и сопоставлять действия, т.е. только putObject, только deleteObject, только getObject или getObject и только deleteObject и т. Д.

Чтобы использовать такую ​​созданную политику, вам нужно записать идентификатор доступа иСекретный ключ.Я вижу, вы упоминали, что делали это в браузере;у вас есть взаимодействие с сервером?Не особенно безопасно жестко кодировать ваши ключи в коде на стороне клиента.Я хотел бы предложить, чтобы ключи на сервере и код вашего сервера генерировали временные учетные данные, соответствующие политике, которую он передает клиенту для выполнения действия.Временные учетные данные AWS дают время истечения не менее 15 минут, поэтому это может также обеспечить дополнительную безопасность.

Подробнее о политиках IAM можно прочитать здесь: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html

Надеюсь, чтопомогает.

правка: последнее.Вы также захотите настроить конфигурацию CORS для соответствующих сегментов, если у вас их нет.Это может ограничить, какие домены могут выполнять действия (если хотите), и разрешить взаимодействие с клиентом, который имеет временные учетные данные, которые вы делаете.Вот пример:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>https://yoursite.com</AllowedOrigin> (or * for any)
    <AllowedMethod>HEAD</AllowedMethod> (the methods allowed on the bucket)
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <MaxAgeSeconds>3600</MaxAgeSeconds> 
    <ExposeHeader>ETag</ExposeHeader> (information you need exposed to client)
    <AllowedHeader>*</AllowedHeader> 
</CORSRule>
</CORSConfiguration>

Вы можете прочитать о конфигурациях CORS здесь: https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html

Если этот ответ не для вас, я мог бы предложить более золотую середину.Например, проверка типа файла с помощью кода и использование политики ACL для более общих разрешений, касающихся транзакции.Приветствия

...