Гид по технологиям

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

7 min read Cloud Обновлено 22 Nov 2025
Публичный SFTP на AWS Transfer Family
Публичный SFTP на AWS Transfer Family

Вступительное изображение с логотипом AWS и иллюстрацией передачи файлов

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.
  • Интеграция с внутрекорпоративными конвейерами обработки файлов.

Что мы сделаем в этом руководстве

  1. Войдём в AWS Console.
  2. Создадим SFTP‑сервер в AWS Transfer Family (публичный endpoint).
  3. Изменим Trust relationship роли IAM для Transfer.
  4. Создадим папку (префикс) в S3.
  5. Сгенерируем SSH‑ключи на EC2 (Ubuntu).
  6. Добавим пользователя в сервер Transfer и привяжем ключ.
  7. Протестируем соединение и загрузку файла.
  8. При необходимости удалим сервер.

Требования перед началом

  • Аккаунт AWS.
  • Запущенный экземпляр Ubuntu EC2 (для генерации ключей и тестов).
  • Роль IAM с доступом к нужному бакету S3.
  • Существующий S3‑бакет для хранения файлов.

Вход в AWS

Перейдите на страницу входа в консоль и авторизуйтесь с учётными данными вашей учётной записи.

Страница входа в AWS Console

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

Главная панель управления AWS

Создание SFTP‑сервера в Transfer Family

  1. В строке поиска введите “Transfer Family” и откройте сервис.

Поиск Transfer Family в консоли

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

Панель AWS Transfer Family

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

Выбор протокола SFTP

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

Конфигурация endpoint

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

Выбор домена хранения

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

Роль логирования и другие параметры

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

Обзор конфигурации перед созданием сервера

Важно: сохраните endpoint сервера — он понадобится для подключения.

Настройка доверительных отношений (Trust relationships) для роли IAM

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

Роль IAM для SFTP

В результате документ доверия должен содержать следующее (пример формата):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {"Service": "transfer.amazonaws.com"},
      "Action": "sts:AssumeRole"
    }
  ]
}

Редактирование trust relationship для роли

Совет: роль должна иметь политику с правами на чтение/запись к нужным префиксам в бакете 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.

Создание папки в бакете S3

Практика: используйте префиксы вида 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.

Генерация ключей на EC2

Совет по безопасности: используйте отдельную пару ключей для каждого внешнего пользователя или интеграции.

Создание пользователя в SFTP‑сервере

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

Добавление пользователя в сервер Transfer

Важно: после создания пользователь будет привязан к указанной роли и префиксу. Запомните 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

Если подключение завершилось успешно, вы увидите в S3 объект в указанном префиксе.

Удаление SFTP‑сервера

Когда сервер больше не нужен, удалите его из консоли Transfer: Actions → Delete. Подтвердите удаление.

Подтверждение удаления сервера Transfer

Важно: удаление сервера необратимо. Данные в S3 остаются нетронутыми.

Лучшие практики безопасности

  • Ограничьте права IAM на минимально необходимый набор действий и префиксы S3.
  • Используйте уникальные SSH‑ключи для каждого внешнего клиента.
  • Включите логирование S3 и CloudTrail для аудита операций.
  • По возможности используйте VPC endpoint/Private endpoint для приватного доступа.
  • Настройте мониторинг и оповещения при подозрительных действиях.

Отладка и типичные ошибки

  1. Ошибка авторизации SSH: проверьте, что публичный ключ точно добавлен в учётную запись пользователя Transfer.
  2. Доступ к S3 запрещён: проверьте привязку роли IAM и её политику (правильные ARN бакета/префикса).
  3. Проблемы с endpoint: для публичного endpoint проверьте сетевые правила на стороне клиента (файервол, NAT).
  4. Файлы не появляются в 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)

  1. Подключиться: sftp -i @
  2. Выполнить: put /path/to/testfile
  3. Убедиться, что файл появился в S3 в правильном префиксе.
  4. Проверить логи 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 на указанный префикс.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Пересылка почты Outlook ↔ Gmail: полное руководство
Почта

Пересылка почты Outlook ↔ Gmail: полное руководство

Как узнать, что пора менять батарейку AirTag
Гаджеты

Как узнать, что пора менять батарейку AirTag

Как удалить устройства из Google Home
Умный дом

Как удалить устройства из Google Home

Вернуть «Open command window here» в Windows 11
Windows

Вернуть «Open command window here» в Windows 11

Подключение Bluetooth-наушников к Wear OS
Гаджеты

Подключение Bluetooth-наушников к Wear OS

Запустить успешную страницу на Patreon
Монетизация

Запустить успешную страницу на Patreon