Dostęp FTP / SFTP do zasobnika Amazon S3 [zamknięty]

146

Czy istnieje sposób na połączenie się z zasobnikiem Amazon S3 za pomocą protokołu FTP lub SFTP zamiast wbudowanego interfejsu przesyłania plików Amazon w konsoli AWS? Wydaje się dziwne, że nie jest to łatwo dostępna opcja.

zgall1
źródło
2
AWS wydany w listopadzie 2018 r. W pełni zarządzana usługa SFTP, która umożliwia przesyłanie plików bezpośrednio do i z Amazon S3. Transfer AWS dla SFTP
Mitaka,

Odpowiedzi:

100

Istnieją trzy możliwości.

  • Możesz użyć natywnej zarządzanej usługi SFTP niedawno dodanej przez Amazon (która jest łatwiejsza do skonfigurowania).
  • Lub możesz zamontować wiadro w systemie plików na serwerze Linux i uzyskać dostęp do plików za pomocą SFTP, tak jak do innych plików na serwerze (co zapewnia większą kontrolę).
  • Lub możesz po prostu użyć klienta (GUI), który natywnie obsługuje protokół S3 (co jest bezpłatne).

Zarządzana usługa SFTP

  • W konsoli Amazon AWS przejdź do AWS Transfer for SFTP i utwórz nowy serwer.

  • Na stronie serwera SFTP dodaj nowego użytkownika (lub użytkowników) SFTP.

    • Uprawnienia użytkowników są zarządzane przez powiązaną rolę AWS w usłudze IAM (na szybki start można skorzystać z polityki AmazonS3FullAccess ).

    • Rola musi mieć relację zaufania do transfer.amazonaws.com.

Aby uzyskać szczegółowe informacje, zobacz mój przewodnik Konfigurowanie dostępu SFTP do Amazon S3 .


Wiadro do montażu na serwerze Linux

Po prostu zamontuj zasobnik za pomocą s3fssystemu plików (lub podobnego) na serwerze Linux (np. Amazon EC2) i użyj wbudowanego serwera SFTP serwera, aby uzyskać dostęp do zasobnika.

  • Zainstaluj s3fs
  • Dodaj swoje poświadczenia bezpieczeństwa w formularzu access-key-id:secret-access-keydo/etc/passwd-s3fs
  • Dodaj punkt mocowania łyżki do fstab:

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

Aby uzyskać szczegółowe informacje, zobacz mój przewodnik Konfigurowanie dostępu SFTP do Amazon S3 .


Użyj klienta S3

Lub użyj dowolnego bezpłatnego „klienta FTP / SFTP” , który jest również „klientem S3” i nie musisz niczego konfigurować po stronie serwera. Na przykład mój WinSCP lub Cyberduck .

WinSCP ma nawet obsługę skryptów i interfejs .NET / PowerShell , jeśli chcesz zautomatyzować transfery.

Martin Prikryl
źródło
2
Zamontowanie wiadra rootpowoduje późniejsze permission deniedproblemy z transferem przy połączeniu ec2-userprzez SFTP. /mnt/<bucket>folder jest własnością rooti również ma tę grupę root.
elvismdev
1
@elvismdev / others - Zamontuj jako użytkownik ftp (używając opcji uid / gid) i upewnij się, że jest zamontowany za pomocą allow_other(lub -o allow_otherjeśli montowanie z wiersza poleceń s3fs) .. działa dla mnie. W moim przypadku dobrym pomysłem jest zapisanie plików z uprawnieniami tylko do odczytu (-o default_acl = public-read) (na prywatnym wiadrze).
bshea
66

Aktualizacja

S3 oferuje teraz w pełni zarządzaną usługę bramy SFTP dla S3, która integruje się z IAM i może być administrowana za pomocą aws-cli.


Istnieją teoretyczne i praktyczne powody, dla których nie jest to idealne rozwiązanie, ale działa ...

Możesz zainstalować usługę FTP / SFTP (taką jak proftpd) na serwerze linux, w EC2 lub we własnym centrum danych ... następnie zamontuj wiadro w systemie plików, w którym serwer ftp jest skonfigurowany do chroot, używając s3fs .

Mam klienta, który obsługuje zawartość z S3, a treść jest im dostarczana przez firmę zewnętrzną, która obsługuje tylko wypychanie ftp ... więc z pewnym wahaniem (z powodu niezgodności impedancji między S3 a rzeczywistym systemem plików), ale brakuje jej czas na napisanie odpowiedniego pakietu oprogramowania do serwera bramy FTP / S3 (co nadal zamierzam zrobić któregoś z dni), zaproponowałem i wdrożyłem dla nich to rozwiązanie kilka miesięcy temu i nie zgłosili żadnych problemów z systemem.

Jako bonus, ponieważ proftpd może chrootować każdego użytkownika do jego własnego katalogu domowego i "udawać" (o ile użytkownik może stwierdzić), że pliki należące do użytkownika proftpd są faktycznie własnością zalogowanego użytkownika, to segreguje każdego użytkownika ftp na „podkatalog” zasobnika i sprawia, że ​​pliki innych użytkowników są niedostępne.


Występuje jednak problem z domyślną konfiguracją.

Gdy zaczniesz pobierać kilkadziesiąt lub setki plików, problem ujawni się, gdy ściągniesz listę katalogów, ponieważ ProFTPd będzie próbował czytać .ftpaccesspliki w kółko, i znowu, i dla każdego pliku w katalogu,.ftpaccess jest zaznaczona, aby zobaczyć, czy użytkownik powinien mieć możliwość jego przeglądania.

Możesz wyłączyć to zachowanie w ProFTPd, ale sugerowałbym, że najbardziej poprawną konfiguracją jest skonfigurowanie dodatkowych opcji -o enable_noobj_cache -o stat_cache_expire=30w s3fs:

-o stat_cache_expire (domyślnie nie wygasa)

określ czas wygaśnięcia (w sekundach) dla wpisów w pamięci podręcznej statystyk

Bez tej opcji będziesz wysyłać mniej żądań do S3, ale nie zawsze będziesz niezawodnie wykrywać zmiany wprowadzone w obiektach, jeśli zewnętrzne procesy lub inne instancje s3fs również modyfikują obiekty w zasobniku. Wartość „30” w moim systemie została wybrana nieco arbitralnie.

-o enable_noobj_cache (domyślnie wyłączone)

włącz wpisy pamięci podręcznej dla obiektu, który nie istnieje. s3fs zawsze musi sprawdzić, czy plik (lub podkatalog) istnieje w obiekcie (ścieżce), gdy s3fs wykonuje jakąś komendę, ponieważ s3fs rozpoznał katalog, który nie istnieje i ma w sobie pliki lub podkatalogi. Zwiększa żądanie ListBucket i zmniejsza wydajność. Możesz określić tę opcję dla wydajności, s3fs zapamiętuje w pamięci podręcznej, że obiekt (plik lub katalog) nie istnieje.

Ta opcja pozwala s3fs zapamiętać, że tego .ftpaccessnie było.


Bez związku z problemami z wydajnością, które mogą wystąpić w ProFTPd, które są rozwiązane przez powyższe zmiany, musisz również włączyć -o enable_content_md5w s3fs.

-o enable_content_md5 (domyślnie wyłączone)

weryfikacja przesłanych danych bez multipart by content-md5 header. Włącz wysyłanie nagłówka „Content-MD5” podczas przesyłania obiektu bez przesyłania wieloczęściowego. Jeśli ta opcja jest włączona, ma to pewien wpływ na wydajność s3fs podczas ładowania małego obiektu. Ponieważ s3fs zawsze sprawdza MD5 podczas przesyłania dużego obiektu, ta opcja nie wpływa na duży obiekt.

Jest to opcja, która nigdy nie powinna była być opcją - zawsze powinna być włączona, ponieważ jej brak pomija krytyczne sprawdzenie integralności, co daje jedynie znikomy wpływ na wydajność. Gdy obiekt jest przesyłany do S3 z rozszerzeniemContent-MD5: nagłówkiem, S3 zweryfikuje sumę kontrolną i odrzuci obiekt, jeśli jest uszkodzony podczas . Jakkolwiek jest to mało prawdopodobne, wyłączenie tej kontroli bezpieczeństwa wydaje się krótkowzroczne.

Cytaty pochodzą ze strony podręcznika man s3fs. W oryginalnym tekście występują błędy gramatyczne.

Michael - sqlbot
źródło
4
czy mógłbyś wyjaśnić powody, dla których to rozwiązanie nie jest idealne?
fernio
2
@MarcoMarsala poprawki dotyczące dużych katalogów zostały dodane do odpowiedzi.
Michael - sqlbot
1
@ Michael-sqlbot Czy próbowałeś użyć dyrektywy „AllowOverride off” w konfiguracji ProFTPd, aby całkowicie przestał czytać pliki „.ftpaccess”?
Greg Dubicki
1
Próbowałem wszystkiego i mogę ustawić tylko użytkownik: grupa / uprawnienia na poziomie folderu, w którym jest zamontowany pojemnik S3. Następnie te uprawnienia są propagowane do każdego folderu na S3. Wypróbowałem wiele rzeczy, w tym wiele odmian tego polecenia S3FS 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- nie mogę zmienić żadnych uprawnień do folderów w folderze Mounted S3 po jego utworzeniu.
T. Brian Jones
1
@Sverre Nadal używam tego rozwiązania w produkcji. Nie sprawia mi to żadnych problemów.
Michael - sqlbot
24

Odpowiedź z 2014 roku dla osób, które głosują w dół:

Cóż, S3 to nie FTP. Jest jednak wielu klientów obsługujących S3.

Prawie każdy znaczący klient FTP na OS X ma wsparcie, w tym Transmit i Cyberduck .

Jeśli korzystasz z systemu Windows, spójrz na Cyberduck lub CloudBerry .

Zaktualizowana odpowiedź na rok 2019:

AWS niedawno wydało usługę AWS Transfer for SFTP , która może zrobić to, czego szukasz.

Ryan Parman
źródło
2
Cyberduck działa niezwykle łatwo, jeśli jesteś nowicjuszem na serwerze, takim jak ja. Po prostu kliknąłem Otwórz połączenie, wybrałem S3 z listy rozwijanej i wprowadź moje poświadczenia. O wiele łatwiejsze niż niektóre z wyżej wymienionych opcji!
Marquizzo
7

Lub uruchom instancję Linux dla bramy SFTP w infrastrukturze AWS, która zapisuje przesłane pliki do zasobnika Amazon S3.

Obsługiwane przez Thorntech

mitaka
źródło
2
Używamy bramy SFTP w produkcji przy dużych projektach od kilku lat. Okazało się, że jest bardziej niezawodny niż s3fs
Jeff,
3

Filezilla właśnie udostępniła wersję Pro swojego klienta FTP. Łączy się z zasobnikami S3 w usprawniony sposób, podobny do FTP. Sam go używam (bez żadnej przynależności) i działa świetnie.

petezurich
źródło
3

WinSCp obsługuje teraz protokół S3

Najpierw upewnij się, że Twój użytkownik AWS z uprawnieniami dostępu S3 ma utworzony „Identyfikator klucza dostępu”. Musisz także znać „Tajny klucz dostępu”. Klucze dostępu są tworzone i zarządzane na stronie Użytkownicy w IAM Management Console.

Upewnij się, że wybrany jest nowy węzeł lokacji.

W węźle Nowa lokacja wybierz protokół Amazon S3.

Wprowadź identyfikator klucza dostępu użytkownika AWS i tajny klucz dostępu

Zapisz ustawienia witryny za pomocą przycisku Zapisz.

Zaloguj się za pomocą przycisku Zaloguj.

Subrata Fouzdar
źródło
2

Amazon wypuścił usługi SFTP dla S3, ale obsługują one tylko SFTP (nie FTP ani FTPES) i mogą być kosztowne w zależności od okoliczności.

Jestem założycielem DocEvent.io i zapewniamy bramy FTP / S dla Twojego segmentu S3 bez konieczności uruchamiania serwerów lub martwienia się o infrastrukturę.

Istnieją również inne firmy, które zapewniają samodzielny serwer FTP, za który płacisz co miesiąc, i który może łączyć się z wiadrem S3 poprzez konfigurację oprogramowania, na przykład brickftp.com .

Wreszcie istnieją również aplikacje AWS Marketplace, które mogą pomóc, oto link wyszukiwania . Wiele z tych instancji uruchamia się w Twojej własnej infrastrukturze - oznacza to, że będziesz musiał samodzielnie zarządzać instancjami i aktualizować je, co z czasem może być trudne w utrzymaniu i konfiguracji.

Mariusz
źródło
DocEvents wygląda dobrze, ale ma zbyt wiele ograniczeń w darmowym abonamencie ... Nie mogłem nawet wypróbować usługi ...
D.Dimitrioglo
1

Jak wskazywali inni plakaty, istnieją pewne ograniczenia związane z usługą AWS Transfer for SFTP. Musisz ściśle dostosować wymagania. Na przykład nie ma limitów, białych / czarnych list, ograniczeń typów plików, a dostęp nie oparty na kluczach wymaga usług zewnętrznych. Istnieje również pewien narzut związany z zarządzaniem użytkownikami i uprawnieniami dostępu, co może być problemem na dużą skalę.

Dla naszych klientów używamy bramy proxy SFTP S3 od około 5 lat. Podstawowe rozwiązanie jest opakowane w kolekcję usług Docker i wdrażane w dowolnym kontekście, nawet na lokalnych lub lokalnych serwerach programistycznych. Nasz przypadek użycia jest nieco inny, ponieważ nasze rozwiązanie koncentruje się na przetwarzaniu danych i potokach, a nie na udostępnianiu plików. W przykładzie Salesforce klient użyje SFTP jako metody transportu, wysyłając e-mail, kupując ... dane do punktu SFTP / S3. Jest to mapowane jako klucz obiektu na S3. Po przybyciu dane są pobierane, przetwarzane, kierowane i ładowane do magazynu. Mamy również dość duże wymagania audytowe dla każdego transferu, czego nie zapewniają dzienniki Cloudwatch dla AWS.

Jak wspomnieli inni, toczenie własnego jest również opcją. Korzystając z AWS Lightsail, możesz skonfigurować klaster, powiedzmy 4, instancji 10 $ 2 GB, używając Route 53 lub ELB.

Ogólnie rzecz biorąc, wspaniale jest widzieć, że AWS oferuje tę usługę i spodziewam się, że z czasem dojrzeje. Jednak w zależności od przypadku użycia alternatywne rozwiązania mogą być lepiej dopasowane.

Thomas Spicer
źródło