Как настроить SFTP-сервер, поддерживаемый S3 (или аналогичным)

8

Мне нужно настроить SFTP-сервер, который, по сути, имеет очень большую емкость. Мне нужно предоставить один из наших партнеров для входа в SFTP-систему на сервер, где они будут загружать миллионы файлов общим объемом несколько сотен терабайт. Затем я буду избирательным и довольно редко читаю некоторые из этих файлов. Это единственное актуальное требование, любой выбор технологии возможен.

Самое простое, что приходит на ум, - это иметь какой-то экземпляр EC2, работающий с SFTP-сервером таким образом, чтобы все загруженное либо напрямую отправлялось на S3, либо какой-то процесс обнаруживал новые файлы при их загрузке, копировал их S3, и удаляет их с диска.

Это лучший способ? Есть ли другой способ получить сервер, который по существу имеет «бесконечно и магически растущее дисковое пространство»?

Спасибо за вашу помощь! Даниил

Даниэль Маглиола
источник
3
100 ТБ передачи данных на S3 обойдутся вам почти в 5000 долларов. Стоимость ваших «партнеров» порно, вероятно , гораздо меньше , чем это.
HopelessN00b
2
code.google.com/p/s3fs - это, вероятно, ваш лучший выбор . Вдобавок к стоимости трансфера @ HopelessN00b указывает, что те же 100 ТБ обойдутся вам в $ 3k / month на хранение.
ceejayoz
2
Спасибо за ваш конструктивный комментарий @ HopelessN00b. Для кого-то еще, кто, возможно, был отговорен от ответа этой идеей ... Да, мы провели математику, да, передача и хранение такого количества информации обойдется нам в большие деньги. Имея данные (определенно не порно) стоит , что стоимость нашего бизнеса.
Даниэль Маглиола
1
Хорошо, так твой вопрос ...? Как установить SFTP на экземпляр AWS? Как написать скрипт для удаления файлов? Какая? Это не должно быть неприлично, но вы думаете, что компания, желающая тратить десятки тысяч долларов в месяц на эти «несколько сотен» ТБ данных, будет готова нанять консультанта на несколько тысяч, чтобы настроить эту систему для них.
HopelessN00b
2
Можете ли вы объяснить контекст, почему нецелесообразно, чтобы они либо устанавливали что-то на своем конце, чтобы загрузить его непосредственно в S3, либо настраивали что-то вроде AWS Storage Gateway? Если вы загружаете сотни терабайт, они наверняка могут позволить себе потратить немного времени на установку клиента S3 на сервер с прямым доступом к их хранилищу.
Thexacre

Ответы:

10

Я ответил на тот же вопрос о переполнении стека .

s3fs - действительно разумное решение, и в моем случае я связал его с proftpd с отличными результатами, несмотря на теоретические / потенциальные проблемы.

В то время, когда я писал ответ, я настроил это только для одного из моих клиентов-консультантов ... но с тех пор я также начал пить свою собственную помощь по курсу и использую ее в производстве на своей повседневной работе. Компании, которыми мы обмениваемся данными с загрузкой и загрузкой файлов в течение всего дня на моем сервере sftp, который хранит все непосредственно на S3. В качестве бонуса моя система экспорта отчетов, которая записывает таблицы Excel непосредственно на S3, может экспортировать отчеты «на FTP-сервер», просто помещая их непосредственно в корзину ftp-сервера с соответствующими метаданными для отображения uid, gid и режим каждого файла. (s3fs использует заголовки x-amz-meta-uid, -gid и -mode для эмуляции разрешений файловой системы). Когда клиент входит на сервер, файлы отчетов просто ... там.

Я действительно думаю, что идеальным решением, вероятно, будет sftp к сервису шлюза S3, но я до сих пор не удосужился спроектировать его, так как это решение работает очень хорошо ... с некоторыми оговорками, конечно:

Не все значения по умолчанию для s3fs являются нормальными. Возможно, вы захотите указать эти параметры:

-o enable_noobj_cache   # s3fs has a huge performance hit for large directories without this enabled
-o stat_cache_expire=30 # the ideal time will vary according to your usage
-o enable_content_md5   # it's beyond me why this safety check is disabled by default

Вероятно, лучше использовать регион, отличный от стандарта США, потому что это единственный регион, который не обеспечивает согласованность чтения-после-записи для новых объектов. (Или, если вам нужно использовать US-Standard, вы можете использовать почти недокументированное имя хоста your-bucket.s3-external-1.amazonaws.comиз региона us-east-1, чтобы предотвратить географическую маршрутизацию ваших запросов, что может улучшить согласованность.)

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

Также обратите внимание, что передача данных в S3 бесплатна . Вы платите только цену за запрос. Передача данных из S3 в EC2 в пределах региона также бесплатна. Только при переводе из S3 в Интернет, в Cloudfront или в другой регион AWS вы оплачиваете перевод. Если вы хотите использовать более дешевое хранилище с уменьшенной избыточностью, s3fs поддерживает это с -o use_rrs.

Как забавно, вы всегда будете чувствовать себя нечетко, когда увидите 256 терабайт свободного пространства (и 0 использованных, поскольку реальный расчет размеров нецелесообразен из-за того, что S3 является хранилищем объектов, а не файловой системой). ).

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.4G  6.2G  18% /
s3fs            256T     0  256T   0% /srv/s3fs/example-bucket

Конечно, вы можете установить ведро в любом месте. У меня просто так получилось в / srv / s3fs.

Майкл - sqlbot
источник
Хотя это не дает ответа на вопрос , который был на самом деле задал, если бы у меня было несколько терабайт данных , которые я хотел загрузить в S3, недавно анонсированный Amazon Импорт / Экспорт Snowball будет то , что я бы передать клиенту трудно для начальной загрузки данных , 50 ТБ SAN отправлены к их дверям, загружают их, делают покупки обратно, Amazon загружает данные по цене, намного меньшей, чем пропускная способность для передачи данных.
Майкл - sqlbot
У вас есть опыт работы с веб-интерфейсом поверх этой настройки FTP? Если да, что сработало или было проблематичным?
Т. Брайан Джонс
@ T.BrianJones Обычно я склонен избегать GUI, так как я предпочитаю ясное и очевидное поведение, которое обычно предлагают редактируемые вручную файлы конфигурации. Для моих установок у меня есть собственный скрипт, setupftpuserкоторый вызывает ftpasswdутилиту ProFTPd для создания пользователей, создания домашних каталогов и установки разрешений. Он также создает резервную копию файла пароля перед внесением изменений. При вызове существующего пользователя он сообщает, что пользователь уже подготовлен, и спрашивает, хотите ли вы изменить пароль. Графический интерфейс, который управляет практически тем же процессом, и он должен быть хорошо написан.
Майкл - sqlbot
5

Проверьте шлюз SFTP на торговой площадке AWS .

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

Джефф
источник
обратите внимание, что это односторонний процесс (при загрузке в sftp файл сохраняется в s3, но файл больше не может быть загружен из sftp). Кроме того, размещение файлов в s3 не делает их доступными через sftp.
Винсент Де Смет
Просто чтобы уточнить ... SFTP-шлюз также имеет каталог для загрузки, который синхронизируется из S3 обратно на сервер sftp. Отделяя загрузки и загрузки, вы как администратор получаете полный контроль над тем, что люди могут загружать и загружать.
Джефф
это недавно добавленная функция? Конечно, не существовало, когда этот комментарий был опубликован почти год назад
Винсент Де Смет
Да, это была функция, добавленная после этого оригинального сообщения. Мы активно поддерживаем его и продолжаем добавлять новые функции, такие как поддержка шифрования на стороне сервера и общие загрузки.
Джефф
1

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

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

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

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

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

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

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

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

Как уже ответил @Michael , просто смонтируйте корзину с помощью 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 .

Мартин Прикрыл
источник
0

Теперь AWS предоставляет сервис SFTP через S3, который называется AWS Transfer For SFTP . Он обладает преимуществами S3 (высоконадежное, доступное, распределенное хранилище) в сочетании с хорошо известным и устоявшимся протоколом SFTP.

По умолчанию пользователи проходят проверку подлинности с использованием пар секретного / открытого ключей, а с помощью политик IAM можно настроить разрешения для пользователей SFTP в сегментах S3. Вы можете добавить схемы аутентификации, реализовав свои собственные функции в AWS API Gateway и AWS Lambda.

Мы включили AWS Transfer для SFTP в дополнение Heroku под названием SFTP To Go, чтобы обеспечить гибкие схемы аутентификации и снизить совокупную стоимость владения (поскольку конечная точка службы имеет фиксированную стоимость на AWS, но может совместно использоваться многими пользователями без какой-либо защиты или безопасности). компромисс производительности.

SNeumann
источник