Около 10 мин
Как загружать файлы в Amazon S3 и делиться публичными ссылками
Amazon S3 - первое объектное хранилище, и оно работает с пресетом Amazon S3 в Aktar. Внимания требует только публичный доступ: по умолчанию S3 его блокирует, поэтому нужно либо добавить политику бакета для публичного чтения, либо поставить перед бакетом CloudFront.
Что понадобится
- Аккаунт AWS
- Права на создание бакетов S3 и пользователей IAM
- Aktar, установленный на вашем Mac
Пошагово
- 1
Создайте бакет
В консоли S3 нажмите Create bucket, выберите глобально уникальное имя и ближайший к вам регион, например
eu-central-1. Владение объектами можно оставить по умолчанию, «Bucket owner enforced»: Aktar не использует ACL. - 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
Создайте 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
Добавьте место назначения в Aktar
В разделе Настройки → Места назначения → Добавить место назначения выберите Amazon S3 и введите значения из таблицы ниже. Эндпоинт и регион должны соответствовать региону бакета.
- 5
Проверьте и сохраните
Нажмите Проверить подключение, чтобы убедиться, что в бакет можно записывать, а публичный URL отдает файлы, затем нажмите Сохранить.
Настройки в Aktar
Введите эти значения в разделе Настройки → Места назначения → Добавить место назначения. Названия полей совпадают с приложением.
| Поле | Пример значения |
|---|---|
| Провайдер | Amazon S3 |
| Эндпоинт | https://s3.eu-central-1.amazonaws.comУкажите регион своего бакета. |
| Регион | eu-central-1 |
| Access Key ID | AKIA…От IAM-пользователя. |
| Secret Access Key | •••••••• |
| Бакет | your-bucket |
| Публичный базовый URL | your-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.