Come posso configurare un server SFTP supportato da S3 (o simile)


8

Devo configurare un server SFTP che, essenzialmente, ha una capacità molto grande. Devo fornire a uno dei nostri partner i dettagli di accesso SFTP a un server in cui caricheranno milioni di file, per un totale di alcune centinaia di Terabyte. Sarò quindi selettivo e leggerò abbastanza raramente alcuni di questi file. Questo è l'unico vero requisito, qualsiasi scelta tecnologica è in palio.

Quello che viene in mente come il modo più semplice è avere una sorta di istanza EC2 che esegue il server SFTP in modo tale che qualsiasi cosa caricata sia inviata direttamente a S3 o una sorta di processo scopra nuovi file quando vengono caricati, li copia in S3 e li elimina dal disco.

È questo il modo migliore? Esiste un altro modo per ottenere un server che abbia essenzialmente "spazio su disco infinito e magicamente crescente"?

Grazie per l'aiuto! Daniel


3
100 TB di trasferimento dati su S3 ti faranno guadagnare quasi $ 5.000. Il valore del tuo porno "partner" è probabilmente molto inferiore a quello.
HopelessN00b

2
code.google.com/p/s3fs è probabilmente la soluzione migliore. Oltre ai costi di trasferimento indicati da HopelessN00b, lo stesso 100 TB ti costerà $ 3k / mese da archiviare.
Ceejayoz,

2
Grazie per il tuo commento costruttivo @ HopelessN00b. Per chiunque sia stato dissuaso dal rispondere a quell'idea ... Abbiamo fatto i conti, sì, trasferire e conservare quella quantità di informazioni ci costerà un sacco di soldi. Avere i dati (sicuramente non porno) vale quel costo per la nostra attività.
Daniel Magliola,

1
Va bene, quindi la tua domanda è ...? Come installare SFTP su un'istanza di AWS? Come scrivere uno script per eliminare i file? Che cosa? Non per essere indelicato, ma penseresti che un'azienda che vuole spendere decine di migliaia di dollari al mese per queste "poche centinaia" di dati TB sarebbe disposta ad assumere un consulente per qualche centesimo per impostare questo sistema per loro.
HopelessN00b

2
Puoi spiegare il contesto perché non è pratico farli installare qualcosa alla loro estremità per caricarlo direttamente su S3 o impostare qualcosa come AWS Storage Gateway? Se stai caricando centinaia di Terabyte, sicuramente possono permettersi di dedicare un po 'di tempo all'installazione di un client S3 su un server con accesso diretto alla loro memoria.
thexacre,

Risposte:


10

Ho risposto a questa stessa domanda su Stack Overflow .

s3fs è davvero una soluzione ragionevole e, nel mio caso, l'ho abbinato a proftpd con risultati eccellenti, nonostante i problemi teorici / potenziali.

Al momento in cui ho scritto la risposta, l'avevo impostato solo per uno dei miei clienti di consulenza ... ma da allora ho anche iniziato a bere il mio kool-aid e lo sto usando nella produzione per il mio lavoro quotidiano. Le aziende che scambiamo dati con upload e download di file tutto il giorno sul mio server sftp, che memorizza tutto direttamente su S3. Come bonus, il mio sistema di esportazione dei report - che scrive fogli di calcolo Excel su S3 - può esportare i report "sul server FTP" semplicemente inserendoli direttamente nel bucket del server ftp, con metadati appropriati per mostrare uid, gid e modalità di ciascun file. (s3fs usa le intestazioni x-amz-meta-uid, -gid e -mode per emulare le autorizzazioni del filesystem). Quando il client accede al server, i file di report sono solo lì.

Penso che la soluzione ideale sarebbe probabilmente un servizio gateway SFTP per S3, ma non sono ancora riuscito a progettarne uno, dal momento che questa soluzione funziona davvero bene ... con alcuni avvertimenti, ovviamente:

Non tutti i valori predefiniti per s3fs sono sani. Probabilmente vorrai specificare queste opzioni:

-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

Probabilmente è meglio usare una regione diversa da quella degli Stati Uniti, perché è l'unica regione che non offre coerenza di lettura dopo scrittura su nuovi oggetti. (Oppure, se è necessario utilizzare lo standard USA, è possibile utilizzare il nome host quasi non documentato your-bucket.s3-external-1.amazonaws.comdella regione us-east-1 per impedire che le richieste vengano geo-indirizzate, il che può migliorare la coerenza.)

Ho abilitato il versioning degli oggetti sul bucket, di cui s3fs non è completamente a conoscenza. Il vantaggio di ciò è che anche se un file dovesse essere "calpestato", posso sempre passare al bucket versione per recuperare il file "sovrascritto". Il versioning degli oggetti in S3 è stato progettato in modo brillante in modo tale che i client S3 ignari del controllo delle versioni non siano in alcun modo disabilitati o confusi, perché se non si effettuano chiamate REST sensibili al controllo delle versioni, le risposte restituite da S3 sono compatibili con i client che hanno nessun concetto di versioning.

Si noti inoltre che il trasferimento di dati in S3 è privo di costi di trasferimento. Paghi solo il prezzo per richiesta. Anche il trasferimento di dati da S3 a EC2 all'interno di una regione è gratuito. È solo quando trasferisci da S3 a Internet, a Cloudfront o in un'altra regione AWS che paghi le spese di trasferimento. Se si desidera utilizzare l'archiviazione a ridondanza ridotta a basso costo, s3fs lo supporta con -o use_rrs.

A parte il divertimento, avrai sempre una calda sensazione confusa quando vedi i 256 terabyte di spazio libero (e 0 utilizzati, poiché un vero calcolo delle dimensioni è impraticabile a causa del fatto che S3 è un archivio oggetti, non un filesystem ).

$ 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

Certo, puoi montare il secchio ovunque. Mi è capitato di averlo in / srv / s3fs.


Anche se non risponde alla domanda che è stato effettivamente chiesto, se avessi più terabyte di dati che ho voluto caricare in S3, il recentemente annunciato Amazon Importa / Esporta Snowball sarebbe quello che avevo la passo il cliente difficile per il carico iniziale dei dati . Una SAN da 50 TB spedita alla loro porta, caricarla, acquistarla, Amazon carica i dati, ad un prezzo molto inferiore alla larghezza di banda per trasferire i dati.
Michael - sqlbot,

Hai esperienza nell'esecuzione di una GUI basata sul Web in aggiunta a questa configurazione FTP? Se sì, cosa ha funzionato o è stato problematico?
T. Brian Jones,

@ T.BrianJones la mia inclinazione è di solito quella di evitare le GUI poiché preferisco il comportamento chiaro ed ovvio che solitamente offrono i file di configurazione modificabili manualmente. Per le mie configurazioni, ho uno script personalizzato chiamato setupftpuserche chiama l' ftpasswdutilità di ProFTPd per creare utenti, creare home directory e impostare autorizzazioni. Esegue inoltre il backup del file delle password prima di apportare modifiche. Se chiamato su un utente esistente ti dice che l'utente è già sottoposto a provisioning e ti chiede se desideri cambiare la password. Una GUI che ha gestito essenzialmente lo stesso processo, e dovrebbe andare bene se è ben scritta.
Michael - sqlbot,

5

Dai un'occhiata al gateway SFTP sul mercato AWS .

Abbiamo riscontrato problemi di affidabilità con s3fs, quindi abbiamo sviluppato una soluzione personalizzata appositamente per questo scopo. Lo usiamo in produzione da diversi anni senza problemi e lo abbiamo recentemente rilasciato sul mercato AWS.


nota che questo è unidirezionale (il caricamento su sftp memorizza il file su s3, ma il file non può più essere scaricato da sftp). Inoltre, mettere i file in s3 non li rende disponibili tramite sftp.
Vincent De Smet,

Giusto per chiarire ... SFTP Gateway ha anche una directory di "download" che si sincronizza da S3 con il server sftp. Mantenendo upload e download separati, tu come amministratore, hai il controllo completo su ciò che le persone possono caricare e scaricare.
Jeff,

è questa una funzionalità aggiunta di recente? Certamente non esisteva quando questo commento è stato pubblicato quasi un anno fa
Vincent De Smet il

Sì, è stata aggiunta una funzionalità dopo questo post originale. Lo stiamo mantenendo attivamente e continuiamo ad aggiungere nuove funzionalità come il supporto della crittografia lato server e download condivisi.
Jeff

1

Vi sono due opzioni. Puoi utilizzare un servizio SFTP gestito nativo recentemente aggiunto da Amazon (che è più facile da configurare). Oppure puoi montare il bucket su un file system su un server Linux e accedere ai file utilizzando SFTP come qualsiasi altro file sul server (che ti dà un maggiore controllo).

Servizio SFTP gestito

  • Nella tua console Amazon AWS, vai su AWS Transfer per SFTP e crea un nuovo server.

  • Nella pagina del server SFTP, aggiungi un nuovo utente (o utenti) SFTP.

    • Le autorizzazioni degli utenti sono regolate da un ruolo AWS associato nel servizio IAM (per un avvio rapido, è possibile utilizzare la politica AmazonS3FullAccess ).

    • Il ruolo deve avere una relazione di fiducia con transfer.amazonaws.com.

Per i dettagli, consultare la mia guida Impostazione di un accesso SFTP ad Amazon S3 .

Montaggio benna su server Linux

Come ha già risposto @Michael , basta montare il bucket utilizzando il s3fsfile system (o simile) su un server Linux (Amazon EC2) e utilizzare il server SFTP integrato del server per accedere al bucket.

Ecco le istruzioni di base:

  • Installa il s3fs
  • Aggiungi le tue credenziali di sicurezza in un modulo access-key-id:secret-access-keya/etc/passwd-s3fs
  • Aggiungi una voce di montaggio benna a fstab:

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

Per i dettagli, consultare la mia guida Impostazione di un accesso SFTP ad Amazon S3 .

Usa client S3

Oppure utilizza qualsiasi "client FTP / SFTP" gratuito , che sia anche un "client S3" e non hai impostato nulla sul lato server. Ad esempio, il mio WinSCP o Cyberduck .


0

AWS ora fornisce un servizio SFTP su S3 chiamato AWS Transfer For SFTP . Ha i vantaggi di S3 (memoria durevole, disponibile, distribuita) combinata con il protocollo SFTP ben noto e consolidato.

Per impostazione predefinita, gli utenti eseguono l'autenticazione utilizzando coppie di chiavi private / pubbliche e utilizzando criteri IAM è possibile impostare autorizzazioni per gli utenti SFTP su bucket S3. Puoi aggiungere schemi di autenticazione implementando le tue funzionalità su AWS API Gateway e AWS Lambda.

Abbiamo integrato AWS Transfer per SFTP in un componente aggiuntivo Heroku chiamato SFTP To Go per fornire sia schemi di autenticazione flessibili sia un TCO inferiore (poiché un endpoint del servizio ha un costo fisso su AWS, ma può essere condiviso da molti utenti senza alcuna sicurezza o compromesso prestazionale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.