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.
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.
Antworten:
Es gibt drei Möglichkeiten.
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 .
Mounten Sie den Bucket einfach mit einem s3fs
Dateisystem (oder ähnlichem) auf einem Linux-Server (z. B. Amazon EC2) und verwenden Sie den integrierten SFTP-Server des Servers, um auf den Bucket zuzugreifen.
s3fs
access-key-id:secret-access-key
zu 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 .
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.
root
treten später Übertragungsprobleme auf permission denied
, wenn eine Verbindung ec2-user
über SFTP hergestellt wird. /mnt/<bucket>
Ordner gehört root
und hat die Gruppe root
auch.
allow_other
(oder -o allow_other
wenn ü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.
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 .ftpaccess
Dateien immer und immer wieder und für jede Datei im Verzeichnis zu lesen. .ftpaccess
wird ü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=30
in 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 .ftpaccess
nicht 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_md5
in 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.
sudo s3fs bucket-name /local-mount-folder-name/ -o iam_role=sftp-server -o allow_other -o umask=022 -o uid=501 -o gid=501
Ich kann keine Berechtigungen für die Ordner im Mounted S3-Ordner ändern, sobald dieser erstellt wurde.
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.
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
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.
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.
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.
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.