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

Создание публичного 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
Автор
Редакция

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

Как включить безопасный режим на Android
Руководство

Как включить безопасный режим на Android

Как защитить ваш первый DSLR — 6 ошибок
Фототехника

Как защитить ваш первый DSLR — 6 ошибок

Как выйти из iCloud на Mac, iPhone и iPad
Руководство

Как выйти из iCloud на Mac, iPhone и iPad

Сканирование документов на Android — полное руководство
Android.

Сканирование документов на Android — полное руководство

iCloud: синхронизация Рабочего стола и Документов
macOS

iCloud: синхронизация Рабочего стола и Документов

Проверить отзыв MacBook и оформить бесплатный ремонт
MacBook

Проверить отзыв MacBook и оформить бесплатный ремонт