FTP / SFTP доступ к корзине Amazon S3 [закрыт]

146

Есть ли способ подключиться к корзине Amazon S3 через FTP или SFTP вместо встроенного интерфейса передачи файлов Amazon в консоли AWS? Кажется странным, что это не легкодоступный вариант.

zgall1
источник
2
AWS, выпущенный в ноябре 2018 года, полностью управляет сервисом SFTP, который позволяет передавать файлы непосредственно в Amazon S3 и обратно. Трансфер AWS для SFTP
митака

Ответы:

100

Есть три варианта.

  • Вы можете использовать собственную управляемую SFTP-службу, недавно добавленную Amazon (которая проще в настройке).
  • Или вы можете смонтировать блок в файловую систему на сервере Linux и получить доступ к файлам, используя SFTP, как и любые другие файлы на сервере (что дает вам больший контроль).
  • Или вы можете просто использовать (GUI) клиент, который изначально поддерживает протокол S3 (что бесплатно).

Управляемая служба SFTP

  • В консоли Amazon AWS перейдите на страницу AWS Transfer for SFTP и создайте новый сервер.

  • На странице SFTP-сервера добавьте нового пользователя SFTP (или пользователей).

    • Полномочия пользователей регулируются связанной ролью AWS в службе IAM (для быстрого начала вы можете использовать политику AmazonS3FullAccess ).

    • Роль должна иметь доверительные отношения с transfer.amazonaws.com.

Подробнее см. Мое руководство Настройка доступа SFTP к Amazon S3 .


Монтирование Bucket на Linux Server

Просто подключите корзину с помощью s3fsфайловой системы (или аналогичной) к серверу Linux (например, Amazon EC2) и используйте встроенный SFTP-сервер сервера для доступа к корзине.

  • Установите s3fs
  • Добавьте свои учетные данные в форме access-key-id:secret-access-keyв/etc/passwd-s3fs
  • Добавьте запись установки ковша в fstab:

    <bucket> /mnt/<bucket> fuse.s3fs rw,nosuid,nodev,allow_other 0 0
    

Подробнее см. Мое руководство Настройка доступа SFTP к Amazon S3 .


Используйте S3 Client

Или используйте любой бесплатный «клиент FTP / SFTP» , который также является «клиентом S3» , и у вас ничего не настроено на стороне сервера. Например, мой WinSCP или Cyberduck .

WinSCP имеет даже сценарии и интерфейс .NET / PowerShell , если вам нужно автоматизировать передачу.

Мартин Прикрыл
источник
2
Смонтированное ведро, как rootпозже, создает permission deniedпроблемы с передачей при соединении ec2-userчерез SFTP. /mnt/<bucket>папка принадлежит rootи имеет группу root.
elvismdev
1
@elvismdev / others - Смонтируйте как пользователь ftp (используя параметры uid / gid) и убедитесь, что он смонтирован с allow_other(или -o allow_otherесли монтируется из командной строки s3fs) .. работает для меня. В моем случае также неплохо написать файлы с правами только для чтения (-o default_acl = public-read) (в приватной корзине).
bshea
66

Обновить

S3 теперь предлагает полностью управляемый SFTP Gateway Service для S3, который интегрируется с IAM и может администрироваться с помощью aws-cli.


Есть теоретические и практические причины, почему это не идеальное решение, но оно работает ...

Вы можете установить службу FTP / SFTP (например, proftpd) на сервере Linux, либо в EC2, либо в своем собственном центре обработки данных ... затем смонтировать контейнер в файловую систему, где сервер ftp настроен для chroot, используя s3fs .

У меня есть клиент, который обслуживает контент из S3, и контент предоставляется им третьей стороной, которая поддерживает только ftp-нажатия ... так, с некоторой нерешительностью (из-за несоответствия импеданса между S3 и реальной файловой системой), но не хватает время написать правильный пакет программного обеспечения сервера шлюза FTP / S3 (который я все еще собираюсь сделать на днях), я предложил и развернул для них это решение несколько месяцев назад, и они не сообщили о каких-либо проблемах с системой.

В качестве бонуса, поскольку proftpd может привязывать каждого пользователя к своему домашнему каталогу и «притворяться» (насколько пользователь может сказать), что файлы, принадлежащие пользователю proftpd, фактически принадлежат зарегистрированному пользователю, это разделяет каждого пользователя ftp на «подкаталог» корзины и делает файлы других пользователей недоступными.


Однако существует проблема с конфигурацией по умолчанию.

Как только вы начнете получать несколько десятков или сотен файлов, проблема проявится, когда вы извлечете список каталогов, потому что ProFTPd будет пытаться читать .ftpaccessфайлы снова и снова, и снова, и для каждого файла в каталоге, .ftpaccessпроверяется, чтобы увидеть, разрешено ли пользователю просматривать его.

Вы можете отключить это поведение в ProFTPd, но я бы сказал, что наиболее правильная конфигурация - настроить дополнительные параметры -o enable_noobj_cache -o stat_cache_expire=30в s3fs:

-o stat_cache_expire (по умолчанию не истекает)

указать время истечения (в секундах) для записей в кэше статистики

Без этой опции вы будете делать меньше запросов к S3, но вы также не всегда будете надежно обнаруживать изменения, внесенные в объекты, если внешние процессы или другие экземпляры s3fs также изменяют объекты в корзине. Значение «30» в моей системе было выбрано несколько произвольно.

-o enable_noobj_cache (по умолчанию отключено)

включить записи кэша для объекта, который не существует. s3fs всегда должен проверять, существует ли файл (или подкаталог) в объекте (пути), когда s3fs выполняет какую-либо команду, поскольку s3fs распознал каталог, который не существует, и имеет файлы или подкаталоги внутри себя. Это увеличивает запрос ListBucket и ухудшает производительность. Вы можете указать эту опцию для производительности, s3fs запоминает в кэше статистики, что объект (файл или каталог) не существует.

Эта опция позволяет s3fs запомнить, чего .ftpaccessтам не было.


Независимо от проблем с производительностью, которые могут возникнуть с ProFTPd, которые -o enable_content_md5устраняются с помощью вышеуказанных изменений, вы также должны включить их в s3fs.

-o enable_content_md5 (по умолчанию отключено)

проверка загруженных данных без составных частей с помощью заголовка content-md5. Включите отправку заголовка «Content-MD5» при загрузке объекта без составной публикации. Если эта опция включена, она влияет на производительность s3fs при загрузке небольших объектов. Поскольку s3fs всегда проверяет MD5 при загрузке большого объекта, эта опция не влияет на большой объект.

Это вариант, который никогда не должен был быть - он всегда должен быть включен, потому что без этого обходится проверка критической целостности только для незначительного выигрыша в производительности. Когда объект загружен в S3 с Content-MD5:заголовком, S3 проверит контрольную сумму и отклонит объект, если он был поврежден при передаче. Как бы маловероятно это ни было, кажется, близоруко отключить эту проверку безопасности.

Цитаты взяты из справочной страницы s3fs. Грамматические ошибки в оригинальном тексте.

Майкл - sqlbot
источник
4
Не могли бы вы уточнить причины, по которым это решение не идеально?
Fernio
2
@MarcoMarsala исправления для больших каталогов были добавлены в ответ.
Майкл - sqlbot
1
@ Michael-sqlbot Вы пытались использовать директиву AllowOverride off в конфигурации ProFTPd, чтобы она перестала пытаться полностью прочитать файлы ".ftpaccess"?
Грег Дубицки
1
Я перепробовал все и могу установить только user: group / permissions на уровне папок, где смонтирована корзина S3. Затем эти разрешения распространяются на каждую папку на S3. Я попробовал много вещей, включая множество вариантов этой команды S3FS sudo s3fs bucket-name /local-mount-folder-name/ -o iam_role=sftp-server -o allow_other -o umask=022 -o uid=501 -o gid=501- я не могу изменить какие-либо разрешения для папок в папке Mounting S3 после ее создания.
Т. Брайан Джонс
1
@Sverre Я до сих пор использую это решение в производстве. Это не доставляет мне проблем.
Майкл - sqlbot
24

Ответ с 2014 года для людей, которые голосуют против меня:

Ну, S3 не FTP. Однако есть множество клиентов, которые поддерживают S3.

Практически каждый известный FTP-клиент в OS X имеет поддержку, включая Transmit и Cyberduck .

Если вы работаете в Windows, взгляните на Cyberduck или CloudBerry .

Обновленный ответ на 2019 год:

AWS недавно выпустила сервис AWS Transfer for SFTP , который может сделать то, что вы ищете.

Райан Парман
источник
2
Cyberduck работает фантастически легко, если вы новичок на сервере, как я. Просто нажмите на Open Connection, выберите S3 из выпадающего списка и введите мои учетные данные. Гораздо проще, чем некоторые из упомянутых выше вариантов!
Маркизцо
7

Или раскрутить экземпляр Linux для SFTP-шлюза в свою инфраструктуру AWS, которая сохраняет загруженные файлы в корзину Amazon S3.

Поддерживается Thorntech

Митака
источник
2
Уже несколько лет мы используем шлюз SFTP в производстве для крупных проектов. Мы нашли его более надежным, чем s3fs
Джефф
3

Filezilla только что выпустила Pro версию своего FTP-клиента. Он подключается к блокам S3 в обтекаемом FTP-режиме. Я использую это сам (никакой принадлежности вообще), и это прекрасно работает.

petezurich
источник
3

WinSCp теперь поддерживает протокол S3

Сначала убедитесь, что у вашего пользователя AWS с разрешениями доступа S3 создан «Идентификатор ключа доступа». Вы также должны знать «Секретный ключ доступа». Ключи доступа создаются и управляются на странице «Пользователи» IAM Management Console.

Убедитесь, что выбран новый узел сайта.

На узле Новый сайт выберите протокол Amazon S3.

Введите свой идентификатор ключа доступа пользователя AWS и секретный ключ доступа

Сохраните настройки своего сайта с помощью кнопки Сохранить.

Авторизуйтесь, используя кнопку «Войти».

Субрата Фоуздар
источник
2

Amazon выпустила SFTP-сервисы для S3, но они выполняют только SFTP (не FTP или FTPES), и они могут быть слишком дорогими в зависимости от ваших обстоятельств.

Я являюсь основателем DocEvent.io , и мы предоставляем шлюзы FTP / S для вашей корзины S3 без необходимости раскручивать серверы или беспокоиться об инфраструктуре.

Есть также другие компании, которые предоставляют отдельный FTP-сервер, который вы платите за месяц и который может подключаться к корзине S3 через конфигурацию программного обеспечения, например brickftp.com .

Наконец, есть также несколько приложений AWS Marketplace, которые могут помочь, вот ссылка для поиска . Многие из этих экземпляров раскручиваются в вашей собственной инфраструктуре - это означает, что вам придется самостоятельно управлять и обновлять экземпляры, которые со временем могут быть сложны в обслуживании и настройке.

Мариуш
источник
DocEvents выглядит хорошо, но у него слишком много ограничений на бесплатный тарифный план ... Я даже не смог попробовать сервис ...
D.Dimitrioglo
1

Как отмечали другие авторы, сервис AWS Transfer for SFTP имеет некоторые ограничения. Вам необходимо тщательно согласовать требования. Например, отсутствуют квоты, белые / черные списки, ограничения на типы файлов, а для доступа без ключа требуются внешние службы. Есть также определенные накладные расходы, связанные с управлением пользователями и IAM, что может стать проблемой в масштабе.

У нас работает шлюз SFTP S3 Proxy около 5 лет для наших клиентов. Основное решение заключено в набор сервисов Docker и развернуто в любом контексте, даже на локальных или локальных серверах разработки. Вариант использования для нас немного отличается, поскольку наше решение сфокусировано на обработке данных и конвейерах, а не на общем файловом ресурсе. В примере с Salesforce клиент будет использовать SFTP в качестве способа передачи, отправляющего электронную почту, покупая ... данные в точку SFTP / S3. Это сопоставлено ключу объекта на S3. По прибытии данные собираются, обрабатываются, маршрутизируются и загружаются на склад. Мы также предъявляем довольно значительные требования к аудиту для каждой передачи, что в журналах Cloudwatch для AWS напрямую не предусмотрено.

Как уже упоминалось, прокатка тоже возможна. Используя AWS Lightsail, вы можете настроить кластер, скажем, 4, из 10 экземпляров по 2 ГБ, используя Route 53 или ELB.

В целом, приятно видеть, что AWS предлагает эту услугу, и я ожидаю, что со временем она станет более зрелой. Однако, в зависимости от вашего варианта использования, альтернативные решения могут быть более подходящими.

Томас Спайсер
источник