Accès FTP / SFTP à un compartiment Amazon S3 [fermé]

146

Existe-t-il un moyen de se connecter à un compartiment Amazon S3 avec FTP ou SFTP plutôt qu'à l'interface de transfert de fichiers Amazon intégrée dans la console AWS? Cela semble étrange que ce ne soit pas une option facilement disponible.

zgall1
la source
2
AWS a publié en novembre 2018 un service SFTP entièrement géré qui permet le transfert de fichiers directement vers et depuis Amazon S3. Transfert AWS pour SFTP
mitaka

Réponses:

100

Il existe trois options.

  • Vous pouvez utiliser un service SFTP géré natif récemment ajouté par Amazon (qui est plus facile à configurer).
  • Ou vous pouvez monter le bucket sur un système de fichiers sur un serveur Linux et accéder aux fichiers en utilisant le SFTP comme tout autre fichier sur le serveur (ce qui vous donne un meilleur contrôle).
  • Ou vous pouvez simplement utiliser un client (GUI) qui prend en charge nativement le protocole S3 (ce qui est gratuit).

Service SFTP géré

  • Dans votre Amazon AWS Console, accédez à AWS Transfer for SFTP et créez un nouveau serveur.

  • Dans la page du serveur SFTP, ajoutez un nouvel utilisateur SFTP (ou des utilisateurs).

    • Les autorisations des utilisateurs sont régies par un rôle AWS associé dans le service IAM (pour un démarrage rapide, vous pouvez utiliser stratégie AmazonS3FullAccess ).

    • Le rôle doit avoir une relation de confiance avec transfer.amazonaws.com .

Pour plus de détails, consultez mon guide Configurer un accès SFTP à Amazon S3 .


Montage du bucket sur un serveur Linux

Montez simplement le seau en utilisant s3fs le système de fichiers (ou similaire) sur un serveur Linux (par exemple Amazon EC2) et utilisez le serveur SFTP intégré au serveur pour accéder au bucket.

  • Installez le s3fs
  • Ajoutez vos informations d'identification de sécurité dans un formulaire access-key-id:secret-access-key à/etc/passwd-s3fs
  • Ajoutez une entrée de montage de seau à fstab:

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

Pour plus de détails, consultez mon guide Configurer un accès SFTP à Amazon S3 .


Utiliser le client S3

Ou utilisez n'importe quel "client FTP / SFTP" gratuit , c'est aussi un "client S3" , et vous n'avez rien configuré côté serveur. Par exemple, mon WinSCP ou Cyberduck .

WinSCP a même des scripts et une interface .NET / PowerShell , si vous avez besoin d'automatiser les transferts.

Martin Prikryl
la source
2
Le fait de monter le seau entraîne des problèmes de roottransfert ultérieurs permission deniedlors de la connexion ec2-uservia SFTP. /mnt/<bucket>Le dossier appartient rootet contient également le groupe root.
elvismdev
1
@elvismdev / others - Montez en tant qu'utilisateur ftp (en utilisant les options uid / gid) et assurez-vous qu'il est monté avec allow_other(ou -o allow_othersi le montage à partir de la ligne de commande s3fs) .. fonctionne pour moi. C'est aussi une bonne idée d'écrire les fichiers en tant qu'autorisations en lecture seule (-o default_acl = public-read) dans mon cas (sur un bucket privé).
bshea
66

Mettre à jour

S3 propose désormais un service de passerelle SFTP entièrement géré pour S3 qui s'intègre à IAM et peut être administré à l'aide de aws-cli.


Il y a des raisons théoriques et pratiques pour lesquelles ce n'est pas une solution parfaite, mais cela fonctionne ...

Vous pouvez installer un service FTP / SFTP (tel que proftpd) sur un serveur Linux, soit dans EC2 ou dans votre propre centre de données ... puis monter un bucket dans le système de fichiers où le serveur ftp est configuré pour chroot, en utilisant s3fs .

J'ai un client qui sert du contenu en dehors de S3, et le contenu leur est fourni par un tiers qui ne prend en charge que les push ftp ... donc, avec une certaine hésitation (en raison de la discordance d'impédance entre S3 et un système de fichiers réel) mais manquant le temps d'écrire un progiciel de serveur de passerelle FTP / S3 approprié (ce que j'ai encore l'intention de faire un de ces jours), j'ai proposé et déployé cette solution pour eux il y a plusieurs mois et ils n'ont signalé aucun problème avec le système.

En prime, puisque proftpd peut chrooter chaque utilisateur dans son propre répertoire personnel et "faire semblant" (pour autant que l'utilisateur puisse le dire) que les fichiers appartenant à l'utilisateur proftpd appartiennent réellement à l'utilisateur connecté, cela sépare chaque utilisateur ftp en un "sous-répertoire" du bucket, et rend les fichiers des autres utilisateurs inaccessibles.


Il y a cependant un problème avec la configuration par défaut.

Une fois que vous commencez à obtenir quelques dizaines ou centaines de fichiers, le problème se manifestera lorsque vous tirerez une liste de répertoires, car ProFTPd tentera de lire les .ftpaccessfichiers encore et encore, et pour chaque fichier du répertoire, .ftpaccessest vérifié pour voir si l'utilisateur doit être autorisé à le consulter.

Vous pouvez désactiver ce comportement dans ProFTPd, mais je suggérerais que la configuration la plus correcte consiste à configurer des options supplémentaires -o enable_noobj_cache -o stat_cache_expire=30dans s3fs:

-o stat_cache_expire (la valeur par défaut n'est pas d'expiration)

spécifier l'heure d'expiration (secondes) pour les entrées dans le cache de statistiques

Sans cette option, vous ferez moins de requêtes à S3, mais vous ne découvrirez pas toujours de manière fiable les modifications apportées aux objets si des processus externes ou d'autres instances de s3fs modifient également les objets du compartiment. La valeur «30» dans mon système a été choisie de manière quelque peu arbitraire.

-o enable_noobj_cache (la valeur par défaut est désactivée)

activer les entrées de cache pour l'objet qui n'existe pas. s3fs doit toujours vérifier si le fichier (ou sous-répertoire) existe sous l'objet (chemin) lorsque s3fs exécute une commande, car s3fs a reconnu un répertoire qui n'existe pas et contient des fichiers ou des sous-répertoires sous lui-même. Il augmente la demande de ListBucket et rend les performances mauvaises. Vous pouvez spécifier cette option pour les performances, s3fs mémorise dans le cache de statistiques que l'objet (fichier ou répertoire) n'existe pas.

Cette option permet à s3fs de se souvenir que ce .ftpaccessn'était pas là.


Sans rapport avec les problèmes de performances qui peuvent survenir avec ProFTPd, qui sont résolus par les modifications ci-dessus, vous devez également activer -o enable_content_md5dans s3fs.

-o enable_content_md5 (la valeur par défaut est désactivée)

vérification des données téléchargées sans multipart par l'en-tête content-md5. Permet d'envoyer l'en-tête "Content-MD5" lors du téléchargement d'un objet sans publication en plusieurs parties. Si cette option est activée, elle a des influences sur les performances de s3fs lors du téléchargement de petits objets. Comme s3fs vérifie toujours MD5 lors du téléchargement d'un objet volumineux, cette option n'affecte pas les objets volumineux.

C'est une option qui n'aurait jamais dû être une option - elle devrait toujours être activée, car ne pas faire cela contourne une vérification d'intégrité critique pour seulement un avantage de performance négligeable. Lorsqu'un objet est téléchargé vers S3 avec un en- Content-MD5:tête, S3 validera la somme de contrôle et rejettera l'objet s'il est corrompu en transit. Aussi improbable que cela puisse être, il semble à courte vue de désactiver ce contrôle de sécurité.

Les citations proviennent de la page de manuel de s3fs. Les erreurs grammaticales se trouvent dans le texte original.

Michael - sqlbot
la source
4
pourriez-vous expliquer les raisons pour lesquelles cette solution n'est pas idéale?
fernio
2
@MarcoMarsala les correctifs pour les grands répertoires ont été ajoutés à la réponse.
Michael - sqlbot
1
@ Michael-sqlbot avez-vous essayé d'utiliser la directive "AllowOverride off" dans la configuration ProFTPd pour l'empêcher d'essayer de lire complètement les fichiers ".ftpaccess"?
Greg Dubicki
1
J'ai tout essayé et je ne peux définir l'utilisateur: groupe / autorisations qu'au niveau du dossier où le compartiment S3 est monté. Ensuite, ces autorisations se propagent à chaque dossier sur S3. J'ai essayé beaucoup de choses, y compris de nombreuses variantes de cette commande 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- Je ne peux pas modifier les autorisations sur les dossiers dans le dossier Mounted S3 une fois qu'il est créé.
T.Brian Jones
1
@Sverre J'utilise toujours cette solution en production. Cela ne me pose aucun problème.
Michael - sqlbot
24

Réponse de 2014 pour les personnes qui me votent contre:

Eh bien, S3 n'est pas FTP. Cependant, de nombreux clients prennent en charge S3.

Presque tous les clients FTP notables sur OS X prennent en charge, y compris Transmit et Cyberduck .

Si vous êtes sous Windows, jetez un œil à Cyberduck ou CloudBerry .

Réponse mise à jour pour 2019:

AWS a récemment publié le service AWS Transfer for SFTP , qui peut faire ce que vous recherchez.

Ryan Parman
la source
2
Cyberduck fonctionne extrêmement facilement si vous êtes un débutant en serveur comme moi. Il suffit de cliquer sur Ouvrir la connexion, de sélectionner S3 dans la liste déroulante et de saisir mes informations d'identification. Beaucoup plus facile que certaines des options mentionnées ci-dessus!
Marquizzo
7

Ou faites tourner l'instance Linux pour la passerelle SFTP dans votre infrastructure AWS qui enregistre les fichiers téléchargés dans votre compartiment Amazon S3.

Soutenu par Thorntech

Mitaka
la source
2
Nous utilisons la passerelle SFTP en production pour de grands projets depuis plusieurs années. Nous l'avons trouvé plus fiable que s3fs
Jeff
3

Filezilla vient de publier une version Pro de son client FTP. Il se connecte aux compartiments S3 dans une expérience simplifiée de type FTP. Je l'utilise moi-même (aucune affiliation du tout) et cela fonctionne très bien.

Petezurich
la source
3

WinSCp prend désormais en charge le protocole S3

Tout d'abord, assurez-vous que votre utilisateur AWS avec des autorisations d'accès S3 a créé un «ID de clé d'accès». Vous devez également connaître la «clé d'accès secrète». Les clés d'accès sont créées et gérées sur la page Utilisateurs de la console de gestion IAM.

Assurez-vous que Nouveau nœud de site est sélectionné.

Sur le nœud Nouveau site, sélectionnez le protocole Amazon S3.

Entrez votre ID de clé d'accès utilisateur AWS et votre clé d'accès secrète

Enregistrez les paramètres de votre site à l'aide du bouton Enregistrer.

Connectez-vous à l'aide du bouton Connexion.

Subrata Fouzdar
la source
2

Amazon a publié des services SFTP pour S3, mais ils ne font que SFTP (pas FTP ou FTPES) et ils peuvent être prohibitifs en fonction de vos circonstances.

Je suis le fondateur de DocEvent.io et nous fournissons des passerelles FTP / S pour votre compartiment S3 sans avoir à faire tourner des serveurs ou à vous soucier de l'infrastructure.

Il existe également d'autres entreprises qui fournissent un serveur FTP autonome que vous payez au mois et qui peut se connecter à un compartiment S3 via la configuration logicielle, par exemple brickftp.com .

Enfin, il existe également des applications AWS Marketplace qui peuvent vous aider, voici un lien de recherche . Beaucoup de ces instances tournantes dans votre propre infrastructure - cela signifie que vous devrez gérer et mettre à niveau vous-même les instances, ce qui peut être difficile à maintenir et à configurer au fil du temps.

Mariusz
la source
DocEvents a l'air bien mais a trop de restrictions sur le plan gratuit ... Je n'ai même pas pu essayer le service ...
D.Dimitrioglo
1

Comme d'autres affiches l'ont souligné, le service AWS Transfer for SFTP présente certaines limitations. Vous devez aligner étroitement les exigences. Par exemple, il n'y a pas de quotas, de listes blanches / noires, de limites de type de fichier et l'accès non basé sur des clés nécessite des services externes. Il existe également une certaine surcharge liée à la gestion des utilisateurs et à l'IAM, qui peut devenir pénible à grande échelle.

Nous exploitons une passerelle proxy SFTP S3 depuis environ 5 ans maintenant pour nos clients. La solution principale est enveloppée dans une collection de services Docker et déployée dans le contexte nécessaire, même sur des serveurs de développement sur site ou locaux. Le cas d'utilisation pour nous est un peu différent car notre solution est axée sur le traitement des données et les pipelines par rapport à un partage de fichiers. Dans un exemple Salesforce, un client utilisera SFTP comme méthode de transport pour envoyer des e-mails, des achats ... des données à un enpoint SFTP / S3. Il s'agit d'une clé d'objet sur S3. À l'arrivée, les données sont collectées, traitées, acheminées et chargées vers un entrepôt. Nous avons également des exigences d'audit assez importantes pour chaque transfert, ce que les journaux Cloudwatch pour AWS ne fournissent pas directement.

Comme d'autres l'ont mentionné, rouler le vôtre est également une option. En utilisant AWS Lightsail, vous pouvez configurer un cluster, disons 4, de 10 $ d'instances de 2 Go à l'aide de Route 53 ou d'un ELB.

En général, c'est formidable de voir AWS proposer ce service et je m'attends à ce qu'il évolue avec le temps. Cependant, selon votre cas d'utilisation, des solutions alternatives peuvent être plus adaptées.

Thomas Spicer
la source