Около 10 мин

Как загружать файлы в Amazon S3 и делиться публичными ссылками

Amazon S3 - первое объектное хранилище, и оно работает с пресетом Amazon S3 в Aktar. Внимания требует только публичный доступ: по умолчанию S3 его блокирует, поэтому нужно либо добавить политику бакета для публичного чтения, либо поставить перед бакетом CloudFront.

Что понадобится

  • Аккаунт AWS
  • Права на создание бакетов S3 и пользователей IAM
  • Aktar, установленный на вашем Mac

Пошагово

  1. 1

    Создайте бакет

    В консоли S3 нажмите Create bucket, выберите глобально уникальное имя и ближайший к вам регион, например eu-central-1. Владение объектами можно оставить по умолчанию, «Bucket owner enforced»: Aktar не использует ACL.

  2. 2

    Разрешите публичное чтение

    Вариант А, политика бакета: на вкладке Permissions бакета отключите настройки «Block public access», которые блокируют публичные политики бакета, затем добавьте эту политику бакета (замените YOUR-BUCKET):

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Sid": "PublicRead",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YOUR-BUCKET/*"
      }]
    }

    Вариант Б, CloudFront: оставьте бакет приватным и создайте дистрибуцию CloudFront с бакетом в качестве источника (через Origin Access Control). Так вы получите HTTPS на собственном домене и кэширование.

  3. 3

    Создайте IAM-пользователя для Aktar

    В IAM создайте пользователя и прикрепите политику, которая разрешает только то, что нужно Aktar в этом бакете:

    {
      "Version": "2012-10-17",
      "Statement": [
        { "Effect": "Allow", "Action": "s3:ListBucket",
          "Resource": "arn:aws:s3:::YOUR-BUCKET" },
        { "Effect": "Allow",
          "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
          "Resource": "arn:aws:s3:::YOUR-BUCKET/*" }
      ]
    }

    Затем создайте для пользователя access key и скопируйте Access Key ID и Secret Access Key.

  4. 4

    Добавьте место назначения в Aktar

    В разделе Настройки → Места назначения → Добавить место назначения выберите Amazon S3 и введите значения из таблицы ниже. Эндпоинт и регион должны соответствовать региону бакета.

  5. 5

    Проверьте и сохраните

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

Настройки в Aktar

Введите эти значения в разделе Настройки → Места назначения → Добавить место назначения. Названия полей совпадают с приложением.

ПолеПример значения
ПровайдерAmazon S3
Эндпоинтhttps://s3.eu-central-1.amazonaws.comУкажите регион своего бакета.
Регионeu-central-1
Access Key IDAKIA…От IAM-пользователя.
Secret Access Key••••••••
Бакетyour-bucket
Публичный базовый URLyour-bucket.s3.eu-central-1.amazonaws.comИли ваш домен CloudFront.

Советы

  • Если вы делитесь ссылками публично, лучше использовать CloudFront с собственным доменом: вы получите кэширование, а сам бакет сможет оставаться приватным.
  • Ограничьте политику IAM одним бакетом. Aktar никогда не нужны права на весь аккаунт.
  • Выбирайте регион поближе к себе для более быстрой загрузки и поближе к своей аудитории, если не используете CDN.
  • Для загрузок, которые удаляются сами, IAM-пользователю также нужны права s3:GetLifecycleConfiguration и s3:PutLifecycleConfiguration на бакет, либо вы добавляете правила жизненного цикла вручную. См. загрузки с ограниченным сроком.

Решение проблем

«Проверить подключение» сообщает об ошибке региона или о перенаправлении

Эндпоинт и регион должны соответствовать региону, в котором создан бакет, например https://s3.eu-central-1.amazonaws.com и eu-central-1.

Загрузка завершается ошибкой Access Denied

IAM-пользователю нужны права s3:PutObject на YOUR-BUCKET/* и s3:ListBucket на сам бакет.

Ссылки возвращают 403

Политика бакета отсутствует или все еще блокируется настройкой «Block public access», либо CloudFront не может прочитать бакет. См. ошибки Access Denied.

Все еще не получается?Загляните в FAQ или спросите на GitHub.