Bagaimana saya bisa mengatur server SFTP yang didukung oleh S3 (atau serupa)

8

Saya perlu mengatur server SFTP yang, pada dasarnya, memiliki kapasitas yang sangat besar. Saya perlu memberikan salah satu detail login SFTP mitra kami ke server tempat mereka akan mengunggah jutaan file, berjumlah beberapa ratus Terabyte. Saya kemudian akan selektif dan sangat jarang membaca beberapa file ini. Ini adalah satu-satunya persyaratan aktual, semua pilihan teknologi siap diperebutkan.

Apa yang terlintas dalam pikiran sebagai cara termudah adalah memiliki semacam instance EC2 yang menjalankan server SFTP sedemikian rupa sehingga segala sesuatu yang diunggah dapat langsung dikirim ke S3, atau semacam proses menemukan file baru ketika mereka diunggah, menyalinnya ke S3, dan menghapusnya dari disk.

Apakah ini cara terbaik? Apakah ada cara lain untuk mendapatkan server yang pada dasarnya memiliki "ruang disk yang tak terbatas dan tumbuh secara ajaib"?

Terima kasih atas bantuan Anda! Daniel

Daniel Magliola
sumber
3
100 TB transfer data pada S3 akan membuat Anda hampir $ 5.000. Nilai pornografi "partner" Anda mungkin jauh lebih sedikit dari itu.
Putus
2
code.google.com/p/s3fs mungkin taruhan terbaik Anda. Di atas biaya transfer @ HopelessN00b menunjukkan, 100 TB yang sama akan dikenakan biaya $ 3rb / bulan untuk disimpan.
ceejayoz
2
Terima kasih atas komentar konstruktif Anda @ HopelessN00b. Untuk orang lain yang mungkin telah dibujuk untuk tidak menjawab oleh ide itu ... Kami sudah menghitung, ya, mentransfer dan menahan bahwa jumlah informasi akan menghabiskan banyak uang bagi kami. Memiliki data (jelas bukan pornografi) sepadan dengan biaya untuk bisnis kami.
Daniel Magliola
1
Baiklah, jadi pertanyaan Anda adalah ...? Bagaimana cara menginstal SFTP pada instance AWS? Bagaimana cara menulis skrip untuk menghapus file? Apa? Bukan untuk tidak sopan, tetapi Anda akan berpikir perusahaan yang ingin menghabiskan puluhan ribu dolar per bulan untuk "beberapa ratus" TB data ini akan bersedia untuk menyewa seorang konsultan untuk beberapa ribu untuk menyiapkan sistem ini untuk mereka.
Putus
2
Bisakah Anda menjelaskan konteksnya mengapa tidak praktis untuk menginstal sesuatu di ujung mereka untuk mengunggahnya langsung ke S3 atau mengatur sesuatu seperti AWS Storage Gateway? Jika Anda memuat ratusan Terabyte maka tentunya mereka mampu menghabiskan sedikit waktu menginstal klien S3 pada server dengan akses langsung ke penyimpanan mereka.
thexacre

Jawaban:

10

Saya menjawab pertanyaan yang sama di Stack Overflow .

s3fs memang solusi yang masuk akal, dan dalam kasus saya, saya telah memasangnya dengan proftpd dengan hasil yang sangat baik, terlepas dari masalah teoritis / potensial.

Pada saat saya menulis jawabannya, saya hanya mengatur ini untuk salah satu klien konsultan saya ... tetapi sejak itu, saya juga mulai meminum kool-aid saya sendiri dan menggunakannya dalam produksi di pekerjaan saya. Perusahaan kami bertukar data dengan mengunggah dan mengunduh file sepanjang hari di server sftp saya, yang menyimpan semuanya secara langsung di S3. Sebagai bonus, sistem ekspor laporan saya - yang menulis spreadsheet excel langsung ke S3 - dapat mengekspor laporan "ke server FTP" dengan hanya memasukkannya langsung ke dalam server ftp server, dengan metadata yang sesuai untuk menampilkan uid, gid, dan mode setiap file. (s3fs menggunakan header x-amz-meta-uid, -gid, dan -mode untuk meniru izin sistem file). Ketika klien masuk ke server, file laporan hanya ... ada.

Saya pikir solusi yang ideal mungkin akan menjadi sftp ke layanan S3 gateway, tapi saya masih belum sempat mendesainnya, karena solusi ini bekerja sangat baik ... dengan beberapa peringatan, tentu saja:

Tidak semua nilai default untuk s3fs adalah waras. Anda mungkin ingin menentukan opsi ini:

-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

Mungkin lebih baik menggunakan wilayah selain US-Standard, karena itulah satu-satunya wilayah yang tidak menawarkan konsistensi baca-setelah-tulis pada objek baru. (Atau, jika Anda perlu menggunakan US-Standard, Anda dapat menggunakan nama host yang hampir tidak didokumentasikan your-bucket.s3-external-1.amazonaws.comdari wilayah us-east-1 untuk mencegah permintaan Anda dari geo-routed, yang dapat meningkatkan konsistensi.)

Saya telah mengaktifkan versi objek pada bucket, yang s3fs sama sekali tidak sadari. Keuntungan dari hal ini adalah bahwa bahkan jika suatu file harus di "stomped," saya selalu dapat membuka versi bucket untuk memulihkan file "ditimpa". Versi objek dalam S3 dirancang secara brilian sedemikian rupa sehingga klien S3 yang tidak menyadari versi sama sekali tidak dinonaktifkan atau bingung, karena jika Anda tidak melakukan panggilan REST yang sadar versi, respons yang dikembalikan S3 kompatibel dengan klien yang memiliki tidak ada konsep versi.

Perhatikan juga bahwa mentransfer data ke S3 bebas dari biaya transfer data. Anda hanya membayar harga per permintaan. Mentransfer data dari S3 ke EC2 di suatu wilayah juga bebas dari biaya transfer data. Hanya ketika Anda mentransfer S3 ke Internet, ke Cloudfront, atau ke wilayah AWS lain Anda membayar biaya transfer. Jika Anda ingin menggunakan penyimpanan redundansi pengurangan harga yang lebih rendah, s3fs mendukungnya -o use_rrs.

Sebagai tambahan yang lucu, Anda akan selalu mendapatkan perasaan hangat yang kabur ketika Anda melihat 256 terabyte ruang kosong (dan 0 digunakan, karena perhitungan ukuran yang sebenarnya tidak praktis karena fakta bahwa S3 adalah toko objek, bukan sistem file ).

$ 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

Tentu saja, Anda dapat memasang ember di mana saja. Saya kebetulan memilikinya di / srv / s3fs.

Michael - sqlbot
sumber
Meskipun tidak menjawab pertanyaan yang benar-benar bertanya, apakah aku punya beberapa terabyte data yang saya ingin memuat ke S3, baru-baru ini mengumumkan Amazon Impor / Ekspor Snowball akan apa yang saya ter klien keras untuk beban data awal . 50 TB SAN dikirimkan ke pintu mereka, memuatnya, menyimpannya kembali, Amazon memuat data, dengan harga yang jauh lebih rendah dari bandwidth untuk mentransfer data.
Michael - sqlbot
Apakah Anda punya pengalaman menjalankan GUI berbasis web di atas pengaturan FTP ini? Jika ya, apa yang berhasil atau bermasalah?
T. Brian Jones
@ T.BrianJones kecenderungan saya biasanya untuk menghindari GUI karena saya lebih suka perilaku yang jelas dan jelas yang biasanya ditawarkan oleh file konfigurasi yang dapat diedit secara manual. Untuk pengaturan saya, saya memiliki skrip khusus yang disebut setupftpuseryang memanggil ftpasswdutilitas ProFTPd untuk membuat pengguna, membuat direktori home, dan mengatur izin. Itu juga mencadangkan file kata sandi sebelum membuat perubahan. Jika dipanggil pada pengguna yang sudah ada, ini memberi tahu Anda bahwa pengguna sudah disediakan, dan menanyakan apakah Anda ingin mengubah kata sandi. GUI yang pada dasarnya mengelola proses yang sama, dan akan baik-baik saja jika ditulis dengan baik.
Michael - sqlbot
5

Lihatlah SFTP Gateway di AWS Marketplace .

Kami mengalami masalah keandalan dengan s3fs, jadi kami mengembangkan solusi khusus untuk tujuan ini. Kami telah menggunakannya dalam produksi selama beberapa tahun tanpa masalah dan baru-baru ini merilisnya ke AWS Marketplace.

Jeff
sumber
harap dicatat bahwa ini adalah satu arah (mengunggah ke sftp menyimpan file ke s3, tetapi file tersebut tidak lagi dapat diunduh dari sftp). Juga, menempatkan file di s3 tidak membuatnya tersedia melalui sftp.
Vincent De Smet
Hanya untuk memperjelas ... SFTP Gateway memang memiliki direktori "unduh" juga yang menyinkronkan dari S3 kembali ke server sftp. Dengan menjaga unggahan dan unduhan terpisah, Anda sebagai admin, memiliki kendali penuh atas apa yang dapat diunggah dan diunduh orang.
Jeff
apakah ini fitur yang baru ditambahkan? Tentu tidak ada ketika komentar ini diposting cukup banyak setahun yang lalu
Vincent De Smet
Ya, itu adalah fitur yang ditambahkan setelah posting asli ini. Kami secara aktif mempertahankannya dan terus menambahkan fitur baru seperti dukungan enkripsi sisi server dan unduhan bersama.
Jeff
1

Ada dua opsi. Anda dapat menggunakan layanan SFTP yang dikelola asli yang baru-baru ini ditambahkan oleh Amazon (yang lebih mudah diatur). Atau Anda dapat memasang bucket ke sistem file di server Linux dan mengakses file menggunakan SFTP seperti file lain di server (yang memberi Anda kontrol lebih besar).

Layanan SFTP yang Dikelola

  • Di Konsol AWS Amazon Anda, buka AWS Transfer untuk SFTP dan buat server baru.

  • Di halaman server SFTP, tambahkan pengguna SFTP baru (atau pengguna).

    • Izin pengguna diatur oleh peran AWS terkait dalam layanan IAM (untuk memulai cepat, Anda dapat menggunakan kebijakan AmazonS3FullAccess ).

    • Peran tersebut harus memiliki hubungan kepercayaan transfer.amazonaws.com.

Untuk detailnya, lihat panduan saya Menyiapkan akses SFTP ke Amazon S3 .

Mounting Bucket ke Server Linux

Seperti yang sudah dijawab @Michael, pasang saja bucket menggunakan s3fssistem file (atau yang serupa) ke server Linux (Amazon EC2) dan gunakan server SFTP bawaan server untuk mengakses bucket.

Ini instruksi dasar:

  • Pasang s3fs
  • Tambahkan kredensial keamanan Anda dalam formulir access-key-id:secret-access-keyke/etc/passwd-s3fs
  • Tambahkan entri pemasangan bucket ke fstab:

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

Untuk detailnya, lihat panduan saya Menyiapkan akses SFTP ke Amazon S3 .

Gunakan Klien S3

Atau gunakan "FTP / SFTP client" gratis , itu juga "klien S3" , dan Anda tidak memiliki pengaturan apa pun di sisi server. Sebagai contoh, saya WinSCP atau Cyberduck .

Martin Prikryl
sumber
0

AWS sekarang menyediakan layanan SFTP lebih dari S3 yang disebut AWS Transfer Untuk SFTP . Ini memiliki manfaat S3 (penyimpanan sangat tahan lama, tersedia, didistribusikan) dikombinasikan dengan protokol SFTP yang terkenal dan mapan.

Secara default, pengguna mengautentikasi menggunakan pasangan kunci publik / publik, dan menggunakan kebijakan IAM Anda dapat mengatur izin untuk pengguna SFTP pada bucket S3. Anda dapat menambahkan skema otentikasi dengan mengimplementasikan fungsionalitas Anda sendiri di AWS API Gateway dan AWS Lambda.

Kami telah membungkus AWS Transfer untuk SFTP dalam add-on Heroku yang disebut SFTP To Go untuk keduanya menyediakan skema otentikasi yang fleksibel dan TCO yang lebih rendah (karena titik akhir layanan memiliki biaya tetap pada AWS, tetapi dapat dibagikan oleh banyak pengguna tanpa keamanan atau kompromi kinerja.

SNeumann
sumber