FTP / SFTP-Zugriff auf einen Amazon S3-Bucket [geschlossen]

146

Gibt es eine Möglichkeit, eine Verbindung zu einem Amazon S3-Bucket mit FTP oder SFTP herzustellen, anstatt über die integrierte Amazon-Dateiübertragungsschnittstelle in der AWS-Konsole? Scheint seltsam, dass dies keine sofort verfügbare Option ist.

zgall1
quelle
2
AWS wurde im November 2018 veröffentlicht und verfügt über einen vollständig verwalteten SFTP-Dienst, der die Übertragung von Dateien direkt in und aus Amazon S3 ermöglicht. AWS Transfer für SFTP
Mitaka

Antworten:

100

Es gibt drei 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).
  • Oder Sie können einfach einen (GUI-) Client verwenden, der das S3-Protokoll nativ unterstützt (was kostenlos ist).

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 Benutzer) hinzu.

    • Die Berechtigungen von Benutzern werden von einer zugeordneten 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 .


Bucket Bucket auf Linux Server

Mounten Sie den Bucket einfach mit einem s3fsDateisystem (oder ähnlichem) auf einem Linux-Server (z. B. Amazon EC2) und verwenden Sie den integrierten SFTP-Server des Servers, um auf den Bucket zuzugreifen.

  • Installiere das s3fs
  • Fügen Sie Ihre Sicherheitsanmeldeinformationen in einem Formular access-key-id:secret-access-keyzu hinzu/etc/passwd-s3fs
  • Fügen Sie einen Schaufelmontageeintrag hinzu zu 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 .

WinSCP verfügt sogar über eine Skript- und .NET / PowerShell-Oberfläche , wenn Sie die Übertragungen automatisieren müssen.

Martin Prikryl
quelle
2
Wenn der Bucket wie montiert montiert wird, roottreten später Übertragungsprobleme auf permission denied, wenn eine Verbindung ec2-userüber SFTP hergestellt wird. /mnt/<bucket>Ordner gehört rootund hat die Gruppe rootauch.
Elvismdev
1
@elvismdev / Others - Als FTP-Benutzer bereitstellen (mithilfe der Optionen uid / gid) und sicherstellen, dass es mit allow_other(oder -o allow_otherwenn über die s3fs-Befehlszeile bereitgestellt wird) bereitgestellt wird. Funktioniert für mich. In meinem Fall (in einem privaten Bucket) ist es auch eine gute Idee, die Dateien als schreibgeschützte Berechtigungen (-o default_acl = public-read) zu schreiben.
bshea
66

Aktualisieren

S3 bietet jetzt einen vollständig verwalteten SFTP-Gateway-Dienst für S3 an , der in IAM integriert ist und mit aws-cli verwaltet werden kann.


Es gibt theoretische und praktische Gründe, warum dies keine perfekte Lösung ist, aber es funktioniert ...

Sie können einen FTP / SFTP-Dienst (z. B. proftpd) auf einem Linux-Server installieren, entweder in EC2 oder in Ihrem eigenen Rechenzentrum. Anschließend können Sie mithilfe von s3fs einen Bucket in das Dateisystem einbinden, in dem der FTP-Server für das Chroot konfiguriert ist .

Ich habe einen Client, der Inhalte aus S3 bereitstellt, und die Inhalte werden ihnen von einem Drittanbieter bereitgestellt, der nur FTP-Pushs unterstützt. Mit einigem Zögern (aufgrund der Impedanzfehlanpassung zwischen S3 und einem tatsächlichen Dateisystem), aber ohne Als ich die Zeit hatte, ein richtiges FTP / S3-Gateway-Server-Softwarepaket zu schreiben (was ich noch eines Tages vorhabe), schlug ich diese Lösung vor einigen Monaten für sie vor und stellte sie bereit, und sie haben keine Probleme mit dem System gemeldet.

Als Bonus kann proftpd jeden FTP-Benutzer in ein eigenes Home-Verzeichnis einbinden und so tun, als ob (soweit der Benutzer dies beurteilen kann) Dateien, die dem proftpd-Benutzer gehören, tatsächlich dem angemeldeten Benutzer gehören ein "Unterverzeichnis" des Buckets und macht den Zugriff auf die Dateien der anderen Benutzer unzugänglich.


Es gibt jedoch ein Problem mit der Standardkonfiguration.

Sobald Sie einige zehn oder hundert Dateien abrufen, tritt das Problem beim Abrufen einer Verzeichnisliste auf, da ProFTPd versucht, die .ftpaccessDateien immer und immer wieder und für jede Datei im Verzeichnis zu lesen. .ftpaccesswird überprüft, um festzustellen, ob der Benutzer es anzeigen darf.

Sie können dieses Verhalten in ProFTPd deaktivieren, aber ich würde vorschlagen, dass die korrekteste Konfiguration darin besteht, zusätzliche Optionen -o enable_noobj_cache -o stat_cache_expire=30in s3fs zu konfigurieren :

-o stat_cache_expire (Standard ist kein Ablaufdatum)

Geben Sie die Ablaufzeit (Sekunden) für Einträge im Statistik-Cache an

Ohne diese Option stellen Sie weniger Anforderungen an S3, erkennen jedoch nicht immer zuverlässig Änderungen an Objekten, wenn externe Prozesse oder andere Instanzen von s3fs die Objekte im Bucket ebenfalls ändern. Der Wert "30" in meinem System wurde etwas willkürlich gewählt.

-o enable_noobj_cache (Standard ist deaktivieren)

Aktivieren Sie Cache-Einträge für das Objekt, das nicht vorhanden ist. s3fs muss immer prüfen, ob eine Datei (oder ein Unterverzeichnis) unter Objekt (Pfad) vorhanden ist, wenn s3fs einen Befehl ausführt, da s3fs ein Verzeichnis erkannt hat, das nicht vorhanden ist und Dateien oder Unterverzeichnisse unter sich hat. Es erhöht die ListBucket-Anforderung und beeinträchtigt die Leistung. Sie können diese Option für die Leistung angeben. S3fs merkt sich im Statistik-Cache, dass das Objekt (Datei oder Verzeichnis) nicht vorhanden ist.

Mit dieser Option kann sich s3fs daran erinnern, dass dies .ftpaccessnicht vorhanden war.


Unabhängig von den Leistungsproblemen, die bei ProFTPd auftreten können und durch die oben genannten Änderungen behoben werden, müssen Sie diese auch -o enable_content_md5in s3fs aktivieren.

-o enable_content_md5 (Standard ist deaktivieren)

Überprüfen hochgeladener Daten ohne mehrteilige Verwendung durch den Content-MD5-Header. Aktivieren Sie diese Option, um beim Hochladen eines Objekts ohne mehrteilige Veröffentlichung den Header "Content-MD5" zu senden. Wenn diese Option aktiviert ist, hat dies einige Einflüsse auf die Leistung von s3fs beim Hochladen kleiner Objekte. Da s3fs beim Hochladen eines großen Objekts immer MD5 überprüft, wirkt sich diese Option nicht auf ein großes Objekt aus.

Dies ist eine Option, die niemals eine Option gewesen sein sollte - sie sollte immer aktiviert sein, da dies eine kritische Integritätsprüfung umgeht und nur einen vernachlässigbaren Leistungsvorteil bietet. Wenn ein Objekt mit einem Content-MD5:Header in S3 hochgeladen wird, überprüft S3 die Prüfsumme und lehnt das Objekt ab, wenn es während der Übertragung beschädigt ist. So unwahrscheinlich dies auch sein mag, es scheint kurzsichtig, diese Sicherheitsüberprüfung zu deaktivieren.

Zitate stammen aus der Manpage von s3fs. Grammatikfehler sind im Originaltext enthalten.

Michael - sqlbot
quelle
4
Können Sie die Gründe erläutern, warum diese Lösung nicht ideal ist?
Fernio
2
@MarcoMarsala Die Fixes für große Verzeichnisse wurden der Antwort hinzugefügt.
Michael - sqlbot
1
@ Michael-sqlbot Haben Sie versucht, die Direktive "AllowOverride off" in der ProFTPd-Konfiguration zu verwenden, damit nicht mehr versucht wird, ".ftpaccess" -Dateien vollständig zu lesen?
Greg Dubicki
1
Ich habe alles versucht und kann nur Benutzer: Gruppe / Berechtigungen auf Ordnerebene festlegen, in der der S3-Bucket bereitgestellt ist. Diese Berechtigungen werden dann an alle Ordner in S3 weitergegeben. Ich habe viele Dinge ausprobiert, einschließlich vieler Variationen dieses S3FS-Befehls. sudo s3fs bucket-name /local-mount-folder-name/ -o iam_role=sftp-server -o allow_other -o umask=022 -o uid=501 -o gid=501Ich kann keine Berechtigungen für die Ordner im Mounted S3-Ordner ändern, sobald dieser erstellt wurde.
T. Brian Jones
1
@Sverre Ich verwende diese Lösung immer noch in der Produktion. Es gibt mir keine Probleme.
Michael - sqlbot
24

Antwort von 2014 für die Leute, die mich ablehnen:

Nun, S3 ist kein FTP. Es gibt jedoch sehr viele Clients, die S3 unterstützen.

Nahezu jeder namhafte FTP-Client unter OS X unterstützt, einschließlich Transmit und Cyberduck .

Wenn Sie unter Windows arbeiten, schauen Sie sich Cyberduck oder CloudBerry an .

Aktualisierte Antwort für 2019:

AWS hat kürzlich den AWS Transfer for SFTP- Dienst veröffentlicht, der möglicherweise das tut, wonach Sie suchen.

Ryan Parman
quelle
2
Cyberduck funktioniert fantastisch einfach, wenn Sie ein Server-Neuling wie ich sind. Klicken Sie einfach auf Verbindung öffnen, wählen Sie S3 aus der Dropdown-Liste aus und geben Sie meine Anmeldeinformationen ein. Viel einfacher als einige der oben genannten Optionen!
Marquizzo
7

Oder drehen Sie die Linux-Instanz für SFTP Gateway in Ihrer AWS-Infrastruktur, die hochgeladene Dateien in Ihrem Amazon S3-Bucket speichert.

Unterstützt von Thorntech

Mitaka
quelle
2
Wir verwenden das SFTP-Gateway seit mehreren Jahren in der Produktion für große Projekte. Wir haben festgestellt, dass es zuverlässiger ist als s3fs
Jeff
3

Filezilla hat gerade eine Pro-Version seines FTP-Clients veröffentlicht. Es stellt eine Verbindung zu S3-Buckets in einer optimierten FTP-ähnlichen Erfahrung her. Ich benutze es selbst (überhaupt keine Zugehörigkeit) und es funktioniert großartig.

petezurich
quelle
3

WinSCp unterstützt jetzt das S3-Protokoll

Stellen Sie zunächst sicher, dass für Ihren AWS-Benutzer mit S3-Zugriffsberechtigungen eine „Zugriffsschlüssel-ID“ erstellt wurde. Sie müssen auch den „geheimen Zugangsschlüssel“ kennen. Zugriffsschlüssel werden auf der Seite Benutzer der IAM-Verwaltungskonsole erstellt und verwaltet.

Stellen Sie sicher, dass Neuer Standortknoten ausgewählt ist.

Wählen Sie auf dem Knoten Neuer Standort das Amazon S3-Protokoll aus.

Geben Sie Ihre AWS-Benutzerzugriffsschlüssel-ID und Ihren geheimen Zugriffsschlüssel ein

Speichern Sie Ihre Site-Einstellungen mit der Schaltfläche Speichern.

Melden Sie sich mit der Schaltfläche Anmelden an.

Subrata Fouzdar
quelle
2

Amazon hat SFTP-Dienste für S3 veröffentlicht, diese bieten jedoch nur SFTP (nicht FTP oder FTPES) und können je nach Ihren Umständen unerschwinglich sein.

Ich bin der Gründer von DocEvent.io und wir bieten FTP / S-Gateways für Ihren S3-Bucket, ohne Server hochfahren oder sich um die Infrastruktur kümmern zu müssen.

Es gibt auch andere Unternehmen, die einen eigenständigen FTP-Server bereitstellen, den Sie monatlich bezahlen und der über die Softwarekonfiguration eine Verbindung zu einem S3-Bucket herstellen kann, z. B. brandftp.com .

Schließlich gibt es auch einige AWS Marketplace-Apps, die helfen können. Hier ist ein Suchlink . Viele dieser Spin-up-Instanzen in Ihrer eigenen Infrastruktur - dies bedeutet, dass Sie die Instanzen selbst verwalten und aktualisieren müssen, was im Laufe der Zeit schwierig zu warten und zu konfigurieren sein kann.

Mariusz
quelle
DocEvents sieht gut aus, hat aber zu viele Einschränkungen beim kostenlosen Plan ... Ich konnte den Service nicht einmal ausprobieren ...
D.Dimitrioglo
1

Wie andere Poster bereits erwähnt haben, gibt es beim AWS Transfer for SFTP-Dienst einige Einschränkungen. Sie müssen die Anforderungen genau aufeinander abstimmen. Beispielsweise gibt es keine Kontingente, Whitelists / Blacklists, Dateitypbeschränkungen, und für den nicht schlüsselbasierten Zugriff sind externe Dienste erforderlich. Es gibt auch einen gewissen Overhead in Bezug auf Benutzerverwaltung und IAM, der im Maßstab zu einem Problem werden kann.

Wir betreiben seit ungefähr 5 Jahren ein SFTP S3 Proxy Gateway für unsere Kunden. Die Kernlösung ist in eine Sammlung von Docker-Diensten eingebunden und wird in jedem erforderlichen Kontext bereitgestellt, selbst auf lokalen oder lokalen Entwicklungsservern. Der Anwendungsfall für uns ist etwas anders, da unsere Lösung auf fokussierte Datenverarbeitung und Pipelines im Vergleich zu einer Dateifreigabe ausgerichtet ist. In einem Salesforce-Beispiel verwendet ein Kunde SFTP als Transportmethode, um E-Mail-, Kaufdaten an einen SFTP / S3-Punkt zu senden. Dies ist ein Objektschlüssel auf S3 zugeordnet. Bei der Ankunft werden die Daten abgeholt, verarbeitet, weitergeleitet und in ein Lager geladen. Wir haben auch ziemlich bedeutende Prüfungsanforderungen für jede Übertragung, was die Cloudwatch-Protokolle für AWS nicht direkt bieten.

Wie andere bereits erwähnt haben, ist es auch eine Option, eigene Rollen zu rollen. Mit AWS Lightsail können Sie mithilfe von Route 53 oder einer ELB einen Cluster (z. B. 4) mit 10 2-GB-Instanzen einrichten.

Im Allgemeinen ist es großartig zu sehen, dass AWS diesen Service anbietet, und ich gehe davon aus, dass er im Laufe der Zeit reifen wird. Abhängig von Ihrem Anwendungsfall sind alternative Lösungen möglicherweise besser geeignet.

Thomas Spicer
quelle