Wie kann ich einen SFTP-Server einrichten, der von S3 (oder ähnlichem) unterstützt wird?

8

Ich muss einen SFTP-Server einrichten, der im Wesentlichen eine sehr große Kapazität hat. Ich muss einem unserer Partner SFTP-Anmeldedaten an einen Server weitergeben, auf dem er Millionen von Dateien hochladen wird, insgesamt einige hundert Terabyte. Ich werde dann selektiv sein und einige dieser Dateien ziemlich selten lesen. Dies ist die einzige tatsächliche Anforderung. Jede Wahl der Technologie steht zur Auswahl.

Am einfachsten ist es, wenn eine Art EC2-Instanz den SFTP-Server so ausführt, dass alles, was hochgeladen wird, entweder direkt an S3 gesendet wird oder ein Prozess beim Hochladen neue Dateien erkennt und in diese kopiert S3 und löscht sie von der Festplatte.

Ist das der beste Weg? Gibt es eine andere Möglichkeit, einen Server zu bekommen, der im Wesentlichen "unendlich und magisch wachsenden Speicherplatz" hat?

Danke für Ihre Hilfe! Daniel

Daniel Magliola
quelle
3
100 TB Datenübertragung auf S3 kosten fast 5.000 US-Dollar. Der Wert Ihrer "Partner" -Pornos ist wahrscheinlich weitaus geringer.
HopelessN00b
2
code.google.com/p/s3fs ist wahrscheinlich die beste Wahl . Zusätzlich zu den Übertragungskosten @ HopelessN00b weist darauf hin, dass die Speicherung derselben 100 TB 3.000 USD / Monat kostet.
Ceejayoz
2
Vielen Dank für Ihren konstruktiven Kommentar @ HopelessN00b. Für alle anderen, die möglicherweise davon abgehalten wurden, mit dieser Idee zu antworten ... Wir haben die Mathematik durchgeführt, ja, das Übertragen und Speichern dieser Informationsmenge kostet uns viel Geld. Die Daten (definitiv keine Pornos) zu haben, ist diese Kosten für unser Geschäft wert.
Daniel Magliola
1
Okay, deine Frage ist also ...? Wie installiere ich SFTP auf einer AWS-Instanz? Wie schreibe ich ein Skript zum Löschen von Dateien? Was? Um nicht indelikat zu sein, aber Sie würden denken, ein Unternehmen, das Zehntausende von Dollar pro Monat für diese "paar hundert" TB Daten ausgeben möchte, wäre bereit, einen Berater für ein paar Riesen einzustellen, um dieses System für sie einzurichten.
HopelessN00b
2
Können Sie den Kontext erklären, warum es unpraktisch ist, wenn sie entweder etwas an ihrem Ende installieren, um es direkt in S3 hochzuladen, oder etwas wie AWS Storage Gateway einrichten? Wenn Sie Hunderte von Terabyte laden, können sie es sich sicherlich leisten, ein wenig Zeit damit zu verbringen, einen S3-Client auf einem Server mit direktem Zugriff auf ihren Speicher zu installieren.
Thexacre

Antworten:

10

Ich habe dieselbe Frage zu Stack Overflow beantwortet .

s3fs ist in der Tat eine vernünftige Lösung, und in meinem Fall habe ich es trotz der theoretischen / potenziellen Probleme mit proftpd mit hervorragenden Ergebnissen gekoppelt.

Zu dem Zeitpunkt, als ich die Antwort schrieb, hatte ich dies nur für einen meiner Beratungskunden eingerichtet ... aber seitdem habe ich auch angefangen, meine eigene Kool-Hilfe zu trinken und verwende sie in der Produktion bei meiner täglichen Arbeit. Unternehmen, bei denen wir den ganzen Tag über Daten mit Upload- und Download-Dateien auf meinem SFTP-Server austauschen, auf dem alles direkt in S3 gespeichert ist. Als Bonus kann mein Berichtsexportsystem, das Excel-Tabellen direkt in S3 schreibt, Berichte "auf den FTP-Server" exportieren, indem sie einfach direkt in den Bucket des FTP-Servers gestellt werden. Die entsprechenden Metadaten zeigen UID, GID und Modus jeder Datei. (s3fs verwendet die Header x-amz-meta-uid, -gid und -mode, um Dateisystemberechtigungen zu emulieren.) Wenn sich der Client beim Server anmeldet, sind die Berichtsdateien nur ... da.

Ich denke, die ideale Lösung wäre wahrscheinlich ein SFTP-zu-S3-Gateway-Dienst, aber ich bin immer noch nicht dazu gekommen, einen zu entwerfen, da diese Lösung wirklich gut funktioniert ... mit einigen Einschränkungen natürlich:

Nicht alle Standardwerte für s3fs sind normal. Sie möchten wahrscheinlich folgende Optionen angeben:

-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

Es ist wahrscheinlich am besten, eine andere Region als US-Standard zu verwenden, da dies die einzige Region ist, die keine Lese-nach-Schreib-Konsistenz für neue Objekte bietet. (Wenn Sie US-Standard verwenden müssen, können Sie den fast undokumentierten Hostnamen your-bucket.s3-external-1.amazonaws.comaus der Region us-east-1 verwenden, um zu verhindern, dass Ihre Anforderungen geografisch weitergeleitet werden, was die Konsistenz verbessern kann.)

Ich habe die Objektversionierung für den Bucket aktiviert, von der s3fs nichts weiß. Dies hat den Vorteil, dass ich, selbst wenn eine Datei "getrampelt" werden sollte, jederzeit zur Bucket-Versionierung gehen kann, um die "überschriebene" Datei wiederherzustellen. Die Objektversionierung in S3 wurde brillant so konzipiert, dass S3-Clients, die die Versionierung nicht kennen, in keiner Weise deaktiviert oder verwirrt sind. Wenn Sie keine versionierungsbewussten REST-Aufrufe ausführen, sind die Antworten, die S3 zurückgibt, mit Clients kompatibel kein Konzept der Versionierung.

Beachten Sie auch, dass die Übertragung von Daten in S3 kostenlos ist . Sie zahlen nur den Preis pro Anfrage. Die Übertragung von Daten aus S3 in EC2 innerhalb einer Region ist ebenfalls kostenlos. Nur wenn Sie von S3 ins Internet, in die Cloudfront oder in eine andere AWS-Region übertragen, zahlen Sie Übertragungsgebühren. Wenn Sie den günstigeren Speicher mit reduzierter Redundanz verwenden möchten, unterstützt s3fs dies mit -o use_rrs.

Abgesehen davon ist es amüsant, dass Sie immer ein warmes, unscharfes Gefühl bekommen, wenn Sie 256 Terabyte freien Speicherplatz sehen (und 0 verwendet werden, da eine echte Größenberechnung unpraktisch ist, da S3 ein Objektspeicher und kein Dateisystem ist ).

$ 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

Natürlich können Sie den Eimer überall montieren. Ich habe es einfach in / srv / s3fs.

Michael - sqlbot
quelle
Obwohl es die tatsächlich gestellte Frage nicht beantwortet, wenn ich mehrere Terabyte Daten hätte, die ich in S3 laden wollte, wäre der kürzlich angekündigte Amazon Import / Export-Schneeball das, was ich dem Client für das anfängliche Laden von Daten schwer machen würde . Ein 50-TB-SAN wird an die Tür geliefert, geladen, zurückgekauft, Amazon lädt die Daten zu einem Preis, der weit unter der Bandbreite für die Datenübertragung liegt.
Michael - sqlbot
Haben Sie Erfahrung mit der Ausführung einer webbasierten Benutzeroberfläche zusätzlich zu diesem FTP-Setup? Wenn ja, was hat funktioniert oder war problematisch?
T. Brian Jones
@ T.BrianJones Ich neige normalerweise dazu, GUIs zu vermeiden, da ich das klare und offensichtliche Verhalten bevorzuge, das manuell bearbeitbare Konfigurationsdateien normalerweise bieten. Für meine Setups habe ich ein benutzerdefiniertes Skript namens setupftpuser, das das ftpasswdDienstprogramm von ProFTPd aufruft , um Benutzer zu erstellen, Basisverzeichnisse zu erstellen und Berechtigungen festzulegen. Außerdem wird die Kennwortdatei gesichert, bevor Änderungen vorgenommen werden. Wenn ein vorhandener Benutzer angerufen wird, werden Sie darüber informiert, dass der Benutzer bereits bereitgestellt ist, und gefragt, ob Sie das Kennwort ändern möchten. Eine GUI, die im Wesentlichen den gleichen Prozess verwaltet, und es sollte in Ordnung sein, wenn sie gut geschrieben ist.
Michael - sqlbot
5

Überprüfen Sie das SFTP-Gateway auf dem AWS Marketplace .

Bei s3fs traten Zuverlässigkeitsprobleme auf, daher haben wir speziell für diesen Zweck eine benutzerdefinierte Lösung entwickelt. Wir verwenden es seit mehreren Jahren ohne Probleme in der Produktion und haben es kürzlich auf dem AWS Marketplace veröffentlicht.

Jeff
quelle
Beachten Sie, dass dies eine Einbahnstraße ist (beim Hochladen auf sftp wird die Datei auf s3 gespeichert, die Datei kann jedoch nicht mehr vom sftp heruntergeladen werden). Wenn Sie Dateien in s3 einfügen, werden sie nicht über sftp verfügbar.
Vincent De Smet
Nur zur Verdeutlichung ... SFTP Gateway verfügt auch über ein "Download" -Verzeichnis, das von S3 zurück zum SFTP-Server synchronisiert wird. Indem Sie Uploads und Downloads getrennt halten, haben Sie als Administrator die vollständige Kontrolle darüber, was Personen hochladen und herunterladen können.
Jeff
Ist dies eine neu hinzugefügte Funktion? Sicherlich nicht vorhanden, als dieser Kommentar vor ziemlich einem Jahr veröffentlicht wurde
Vincent De Smet
Ja, es war eine Funktion, die nach diesem ursprünglichen Beitrag hinzugefügt wurde. Wir pflegen es aktiv und fügen weiterhin neue Funktionen wie serverseitige Verschlüsselungsunterstützung und freigegebene Downloads hinzu.
Jeff
1

Es gibt zwei Möglichkeiten. Sie können einen nativen verwalteten SFTP-Dienst verwenden, der kürzlich von Amazon hinzugefügt wurde (was einfacher einzurichten ist). Sie können den Bucket auch in ein Dateisystem auf einem Linux-Server einbinden und über SFTP wie alle anderen Dateien auf dem Server auf die Dateien zugreifen (wodurch Sie eine bessere Kontrolle erhalten).

Verwalteter SFTP-Dienst

  • Wechseln Sie in Ihrer Amazon AWS Console zu AWS Transfer for SFTP und erstellen Sie einen neuen Server.

  • Fügen Sie auf der SFTP-Serverseite einen neuen SFTP-Benutzer (oder neue Benutzer) hinzu.

    • Die Berechtigungen von Benutzern werden durch eine zugeordnete AWS-Rolle im IAM-Dienst geregelt (für einen schnellen Start können Sie die AmazonS3FullAccess- Richtlinie verwenden).

    • Die Rolle muss eine Vertrauensbeziehung zu haben transfer.amazonaws.com.

Weitere Informationen finden Sie in meinem Handbuch Einrichten eines SFTP-Zugriffs auf Amazon S3 .

Mounting Bucket auf Linux Server

Wie @Michael bereits geantwortet hat , mounten Sie den Bucket einfach mit dem s3fsDateisystem (oder ähnlichem) auf einem Linux-Server (Amazon EC2) und verwenden Sie den integrierten SFTP-Server des Servers, um auf den Bucket zuzugreifen.

Hier sind grundlegende Anweisungen:

  • Installiere das s3fs
  • Fügen Sie Ihre Sicherheitsanmeldeinformationen in einem Formular access-key-id:secret-access-keyzum hinzu/etc/passwd-s3fs
  • Fügen Sie einen Eintrag zur Schaufelmontage hinzu fstab:

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

Weitere Informationen finden Sie in meinem Handbuch Einrichten eines SFTP-Zugriffs auf Amazon S3 .

Verwenden Sie den S3-Client

Oder verwenden Sie einen kostenlosen "FTP / SFTP-Client" , der auch ein "S3-Client" ist , und Sie haben auf der Serverseite nichts eingerichtet. Zum Beispiel mein WinSCP oder Cyberduck .

Martin Prikryl
quelle
0

AWS bietet jetzt einen SFTP über S3-Dienst namens AWS Transfer For SFTP . Es bietet die Vorteile von S3 (äußerst langlebiger, verfügbarer, verteilter Speicher) in Kombination mit dem bekannten und etablierten SFTP-Protokoll.

Standardmäßig authentifizieren sich Benutzer mit privaten / öffentlichen Schlüsselpaaren. Mithilfe von IAM-Richtlinien können Sie Berechtigungen für SFTP-Benutzer für S3-Buckets einrichten. Sie können Authentifizierungsschemata hinzufügen, indem Sie Ihre eigenen Funktionen in AWS API Gateway und AWS Lambda implementieren.

Wir haben AWS Transfer für SFTP in ein Heroku-Add-On namens SFTP To Go eingebunden, um sowohl flexible Authentifizierungsschemata als auch niedrigere Gesamtbetriebskosten bereitzustellen (da ein Service-Endpunkt in AWS feste Kosten verursacht, aber von vielen Benutzern ohne Sicherheit oder Sicherheit gemeinsam genutzt werden kann Leistungskompromiss.

SNeumann
quelle