Создание публичного SFTP‑сервера на AWS Transfer Family с бэкендом S3

AWS Transfer Family — управляемый сервис для передачи файлов по SFTP, FTPS и FTP с хранением в Amazon S3 или Amazon EFS. В статье показаны пошаговые действия по созданию публичного SFTP‑сервера, настройке роли IAM, генерации SSH‑ключей, созданию пользователя и проверке загрузки файла в указанный S3‑префикс. Полезны разделы с проверками, безопасностью и отладкой.
Важно: перед началом убедитесь, что вы знакомы с IAM, EC2 и S3.
Что такое AWS Transfer Family — кратко
AWS Transfer Family — это полностью управляемый сервис для передачи файлов по защищённым протоколам: SFTP, FTPS и FTP. Он устраняет необходимость развёртывания собственных FTP/SFTP серверов, поддерживает авто‑масштабирование и высокую доступность, а также интегрируется с Amazon S3 и Amazon EFS. Для управления доступом используется IAM.
Ключевые термины
- SFTP: протокол передачи файлов поверх SSH.
- FTPS: FTP поверх TLS/SSL.
- FTP: классический протокол с отдельными каналами управления и данных.
Основные сценарии использования
- Замена устаревших FTP‑серверов и хранение данных в S3.
- Публичный доступ для партнёров через SFTP с привязкой к конкретным префиксам в S3.
- Интеграция с внутрекорпоративными конвейерами обработки файлов.
Что мы сделаем в этом руководстве
- Войдём в AWS Console.
- Создадим SFTP‑сервер в AWS Transfer Family (публичный endpoint).
- Изменим Trust relationship роли IAM для Transfer.
- Создадим папку (префикс) в S3.
- Сгенерируем SSH‑ключи на EC2 (Ubuntu).
- Добавим пользователя в сервер Transfer и привяжем ключ.
- Протестируем соединение и загрузку файла.
- При необходимости удалим сервер.
Требования перед началом
- Аккаунт AWS.
- Запущенный экземпляр Ubuntu EC2 (для генерации ключей и тестов).
- Роль IAM с доступом к нужному бакету S3.
- Существующий S3‑бакет для хранения файлов.
Вход в AWS
Перейдите на страницу входа в консоль и авторизуйтесь с учётными данными вашей учётной записи.

После входа выберите регион, в котором хотите создать сервер Transfer.

Создание SFTP‑сервера в Transfer Family
- В строке поиска введите “Transfer Family” и откройте сервис.

- На дашборде Transfer Family нажмите “Create server”.

- Выберите протокол SFTP (можно включить несколько протоколов, но в примере используем только SFTP). Нажмите “Next”.

- Выберите тип endpoint. Для публичного доступа оставьте Public.

- Выберите домен хранения данных — Amazon S3.

- Оставьте параметры логирования и роли по умолчанию или настройте по требованиям вашей организации.

- Проверьте конфигурацию и нажмите “Create server”. Создание займёт несколько минут.

Важно: сохраните endpoint сервера — он понадобится для подключения.
Настройка доверительных отношений (Trust relationships) для роли IAM
Чтобы Transfer Family мог читать/писать в S3 от имени роли, откройте роль IAM, которую вы назначили в процессе создания сервера, и в вкладке “Trust relationships” добавьте сервис transfer.amazonaws.com.

В результате документ доверия должен содержать следующее (пример формата):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"Service": "transfer.amazonaws.com"},
"Action": "sts:AssumeRole"
}
]
}
Совет: роль должна иметь политику с правами на чтение/запись к нужным префиксам в бакете S3. Ниже приведён минимальный пример политики (адаптируйте под свои префиксы и имя бакета):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:PutObject","s3:GetObject","s3:DeleteObject","s3:ListBucket"],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}Примечание: давать права только на нужные префиксы безопаснее, чем полный доступ к бакету.
Создание префикса (папки) в S3
Перейдите в консоль S3 и создайте префикс (папку) внутри бакета или используйте существующий. Этот префикс станет домашней директорией пользователя Transfer.

Практика: используйте префиксы вида partners/partner-name/ или uploads/team-x/ для удобной сегментации данных.
Генерация SSH‑ключей на EC2 (Ubuntu)
На вашем Ubuntu EC2 выполните команды для создания пары ключей:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/transfer_sftp_key -N ""
cat ~/.ssh/transfer_sftp_key.pubСкопируйте содержимое публичного ключа (id_rsa.pub или transfer_sftp_key.pub). Этот публичный ключ потребуется при создании пользователя в Transfer Family.

Совет по безопасности: используйте отдельную пару ключей для каждого внешнего пользователя или интеграции.
Создание пользователя в SFTP‑сервере
- Откройте созданный сервер Transfer и нажмите “Add user”.
- Укажите имя пользователя, выберите роль IAM, укажите бакет S3 и префикс (папку) в качестве домашней директории.
- Вставьте публичный SSH‑ключ в поле “SSH public key” и нажмите “Add”.

Важно: после создания пользователь будет привязан к указанной роли и префиксу. Запомните endpoint сервера — он понадобится для подключения.
Тестирование подключения к SFTP
На той же Ubuntu‑машине, где вы сгенерировали закрытый ключ, выполните команду (замените endpoint и имя пользователя на ваши):
sftp -i ~/.ssh/transfer_sftp_key username@s-922b406852024d85a.server.transfer.eu-west-3.amazonaws.comПример загрузки файла:
put /home/ubuntu/test-fileКоманда put копирует файл из локальной системы в домашний префикс пользователя в S3. После загрузки проверьте бакет S3 в консоли.

Если подключение завершилось успешно, вы увидите в S3 объект в указанном префиксе.
Удаление SFTP‑сервера
Когда сервер больше не нужен, удалите его из консоли Transfer: Actions → Delete. Подтвердите удаление.

Важно: удаление сервера необратимо. Данные в S3 остаются нетронутыми.
Лучшие практики безопасности
- Ограничьте права IAM на минимально необходимый набор действий и префиксы S3.
- Используйте уникальные SSH‑ключи для каждого внешнего клиента.
- Включите логирование S3 и CloudTrail для аудита операций.
- По возможности используйте VPC endpoint/Private endpoint для приватного доступа.
- Настройте мониторинг и оповещения при подозрительных действиях.
Отладка и типичные ошибки
- Ошибка авторизации SSH: проверьте, что публичный ключ точно добавлен в учётную запись пользователя Transfer.
- Доступ к S3 запрещён: проверьте привязку роли IAM и её политику (правильные ARN бакета/префикса).
- Проблемы с endpoint: для публичного endpoint проверьте сетевые правила на стороне клиента (файервол, NAT).
- Файлы не появляются в S3: проверьте лог Transfer и CloudTrail, убедитесь, что команда put завершилась без ошибок.
Альтернативы и когда Transfer не подходит
- Если требуется тонкая файловая обработка на уровне сервера (пользовательские скрипты при приёме), возможно, лучше использовать EC2 + SFTP‑сервер.
- Для массовых и высокопроизводительных файловых конвейеров стоит рассмотреть прямую интеграцию приложений с S3 через SDK.
- Если требуется поддержка устаревших расширений FTP или нестандартных пассивных портов, убедитесь, что Transfer поддерживает нужную конфигурацию.
Модель принятия решения (Decision flow)
flowchart TD
A[Нужен SFTP доступ] --> B{Требуется кастомная обработка на сервере?}
B -- Да --> C[Развернуть EC2 + SFTP]
B -- Нет --> D{Нужна высокая доступность и простое управление?}
D -- Да --> E[Использовать AWS Transfer Family]
D -- Нет --> CРолевые чек‑листы перед вводом в эксплуатацию
Администратор
- Создать роль IAM с минимальными правами для S3.
- Настроить Trust relationship для transfer.amazonaws.com.
- Включить логирование и мониторинг.
Оператор / DevOps
- Сгенерировать ключи и передать публичный ключ пользователю.
- Проверить тестовую загрузку файлов.
- Настроить уведомления при ошибках.
Пользователь / Партнёр
- Получить приватный ключ и инструкцию по подключению.
- Проверить загрузку и загрузить небольшой тестовый файл.
Критерии приёмки
- Пользователь может подключиться по SFTP с помощью приватного ключа.
- Загрузка файла командой put приводит к появлению объекта в указанном префиксе S3.
- Права IAM ограничены требуемыми действиями и префиксами.
- Логирование S3 и CloudTrail включено.
Шаблон теста приёмки (acceptance)
- Подключиться: sftp -i
@ - Выполнить: put /path/to/testfile
- Убедиться, что файл появился в S3 в правильном префиксе.
- Проверить логи CloudTrail/Transfer на успешную операцию.
Управление стоимостью и советы по оптимизации
- Transfer Family оплачивается по использованию. Следите за активностью пользователей.
- Хранение и запросы S3 оплачиваются отдельно — оптимизируйте жизненный цикл объектов (переход в холодные классы хранения).
- Если трафик большой, прогнозируйте и оценивайте стоимость передачи данных между регионами.
Заключение
AWS Transfer Family упрощает развёртывание защищённых SFTP/FTPS/FTP точек входа с хранением в Amazon S3 или EFS. Сервис убирает необходимость управлять инфраструктурой SFTP, поддерживает масштабирование и интеграцию с IAM. В руководстве показаны все шаги от создания сервера до тестовой загрузки и удаления ресурса. Внедряя Transfer Family, соблюдайте принципы минимизации прав и ведите аудит.
Полезные ссылки и заметки
- Документация AWS Transfer Family — в официальной документации AWS.
- Проверяйте регион и endpoint при подключении.
FAQ
Как проверить, что роль IAM настроена правильно?
Проверьте Trust relationship — в поле Service должно быть transfer.amazonaws.com, а у роли должна быть политика, позволяющая доступ к нужному бакету/префиксу S3.
Что делать, если файл не появляется в S3 после put?
Проверьте вывод sftp клиента на предмет ошибок, затем просмотрите логи Transfer и CloudTrail для запроса операции. Убедитесь, что роль имеет права PutObject на указанный префикс.
Похожие материалы
Как включить безопасный режим на Android
Как защитить ваш первый DSLR — 6 ошибок
Как выйти из iCloud на Mac, iPhone и iPad
Сканирование документов на Android — полное руководство
iCloud: синхронизация Рабочего стола и Документов