Разрешения Amazon S3 - PullRequest
       8

Разрешения Amazon S3

4 голосов
/ 17 января 2012

Я использую временные сеансы в Amazon S3 с GetSessionToken / GetFederationToken, я планирую иметь более 10K пользователей, каждый из которых может загружать на S3, поэтому сначала я подумал об использовании корзины для каждого пользователя и установил разрешения на запись (выгрузку)для каждого сегмента для каждого пользователя, но поскольку существует ограничение на количество сегментов для каждого аккаунта Amazon, я отказался от этой идеи.

Как я могу установить разрешение, например разрешить публичное чтение и выгрузку, только если префикс включенключ объекта, который пользователь хочет загрузить?

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

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

Редактировать:

Я пробовал операцию GetFederationToken со следующей политикой

"{
   "Statement":[{
      "Effect":"Allow",
      "Action":["s3:PutObject","s3:GetObject","s3:GetObjectVersion",
      "s3:DeleteObject",\"s3:DeleteObjectVersion"],
      "Resource":"arn:aws:s3:::user.uploads/john/*"
   }
   ]
}"

У меня есть пакет user.uploads на S3 и папка john

, однако любая загрузка с использованием сессииials to bucket user.uploads с ключом john / имя файла завершается неудачно с доступом запрещен "

1 Ответ

5 голосов
/ 17 января 2012

Сервис Amazon Identity and Access Management (IAM) - это то, что вам нужно.Документация содержит множество примеров, некоторые из которых соответствуют вашему сценарию.

Из документов:

Пример 5 : разрешить партнерудля перетаскивания файлов в определенную часть корпоративного сегмента

В этом примере мы создаем группу под названием WidgetCo, которая представляет компанию-партнера, затем создаем пользователя для конкретного человека (или приложения) в компании-партнере, котораянужен доступ, а затем поместите пользователя в группу.

Затем мы прикрепляем политику, которая дает группе PutObject доступ к следующему каталогу в корпоративной корзине: my_corporate_bucket / uploads / widgetco.

Мы также хотим запретить группе WidgetCo делать что-либо еще с корзиной, поэтому мы добавляем оператор, который запрещает любые действия Amazon S3, кроме PutObject, на любом ресурсе Amazon S3 в учетной записи AWS.Это необходимо только в том случае, если в вашей учетной записи AWS используется широкая политика, которая предоставляет пользователям широкий доступ к Amazon S3.

{
    "Statement":[{
        "Effect":"Allow",
        "Action":"s3:PutObject",
        "Resource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*"
    },
    {
        "Effect":"Deny",
        "NotAction":"s3:PutObject",
        "Resource":["arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*"]
    },
    {
        "Effect":"Deny",
        "Action":"s3:*",
        "NotResource": ”arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*"
    }]
}

Вы должны создать новую личность для каждого пользователя и использовать ее дляпри необходимости управляйте доступом к подпапкам (префиксам).

...