Comment puis-je configurer un serveur SFTP soutenu par S3 (ou similaire)

8

J'ai besoin de configurer un serveur SFTP qui, essentiellement, a une très grande capacité. Je dois fournir à l'un de nos partenaires les informations de connexion SFTP à un serveur où ils téléchargeront des millions de fichiers, totalisant quelques centaines de téraoctets. Je serai alors sélectif et lirai assez rarement certains de ces fichiers. C'est la seule exigence réelle, tout choix technologique est à gagner.

Ce qui me vient à l'esprit comme le moyen le plus simple est d'avoir une sorte d'instance EC2 exécutant le serveur SFTP de telle sorte que tout ce qui est téléchargé soit soit directement envoyé à S3, soit une sorte de processus découvre les nouveaux fichiers lorsqu'ils sont téléchargés, les copie dans S3 et les supprime du disque.

Est-ce la meilleure façon? Existe-t-il un autre moyen d'obtenir un serveur qui dispose essentiellement d'un "espace disque infini et en croissance magique"?

Merci de votre aide! Daniel

Daniel Magliola
la source
3
100 To de transfert de données sur S3 vous coûteront près de 5 000 $. La valeur de votre porno "partenaires" est probablement bien inférieure à cela.
HopelessN00b
2
code.google.com/p/s3fs est probablement votre meilleur choix . En plus des coûts de transfert @ HopelessN00b souligne, ces mêmes 100 To vous coûteront 3 000 $ / mois pour le stockage.
ceejayoz
2
Merci pour votre commentaire constructif @ HopelessN00b. Pour quiconque qui aurait pu être dissuadé de répondre par cette idée ... Nous avons fait le calcul, oui, le transfert et la conservation de cette quantité d'informations nous coûteront beaucoup d'argent. Avoir les données (certainement pas pornographiques) vaut ce coût pour notre entreprise.
Daniel Magliola
1
D'accord, donc votre question est ...? Comment installer SFTP sur une instance AWS? Comment écrire un script pour supprimer des fichiers? Quelle? Pour ne pas être indélicat, mais vous penseriez qu'une entreprise souhaitant dépenser des dizaines de milliers de dollars par mois pour ces "quelques centaines" To de données serait prête à embaucher un consultant pour quelques milliers de dollars pour mettre en place ce système pour eux.
HopelessN00b
2
Pouvez-vous expliquer le contexte pour expliquer pourquoi il est impossible de les faire installer quelque chose de leur côté pour le télécharger directement sur S3 ou configurer quelque chose comme AWS Storage Gateway? Si vous chargez des centaines de téraoctets, ils peuvent certainement se permettre de passer un peu de temps à installer un client S3 sur un serveur avec un accès direct à leur stockage.
thexacre

Réponses:

10

J'ai répondu à cette même question sur Stack Overflow .

s3fs est en effet une solution raisonnable, et dans mon cas, je l'ai couplé avec proftpd avec d'excellents résultats, malgré les problèmes théoriques / potentiels.

Au moment où j'ai écrit la réponse, je n'avais mis cela en place que pour l'un de mes clients consultants ... mais depuis lors, j'ai également commencé à boire mon propre kool-aid et je l'utilise en production dans mon travail de jour. Les entreprises que nous échangeons des données avec téléchargement et téléchargement de fichiers toute la journée sur mon serveur sftp, qui stocke tout directement sur S3. En prime, mon système d'exportation de rapports - qui écrit directement des feuilles de calcul Excel vers S3 - peut exporter des rapports «vers le serveur FTP» en les plaçant simplement directement dans le compartiment du serveur ftp, avec les métadonnées appropriées pour afficher l'uid, le gid et mode de chaque fichier. (s3fs utilise les en-têtes x-amz-meta-uid, -gid et -mode pour émuler les autorisations du système de fichiers). Lorsque le client se connecte au serveur, les fichiers de rapport sont juste ... là.

Je pense que la solution idéale serait probablement un service de passerelle sftp vers S3, mais je n'ai toujours pas réussi à en concevoir un, car cette solution fonctionne très bien ... avec quelques mises en garde, bien sûr:

Les valeurs par défaut de s3fs ne sont pas toutes saines. Vous voudrez probablement spécifier ces options:

-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

Il est probablement préférable d'utiliser une région autre que US-Standard, car c'est la seule région qui n'offre pas de cohérence de lecture après écriture sur les nouveaux objets. (Ou, si vous devez utiliser US-Standard, vous pouvez utiliser le nom your-bucket.s3-external-1.amazonaws.comd' hôte presque non documenté de la région us-east-1 pour empêcher le géo-routage de vos demandes, ce qui peut améliorer la cohérence.)

J'ai le versionnage d'objet activé sur le compartiment, que s3fs ignore complètement. L'avantage de ceci est que même si un fichier doit être "écrasé", je peux toujours aller au bucketing pour récupérer le fichier "écrasé". La gestion des versions des objets dans S3 a été brillamment conçue de telle manière que les clients S3 qui ne connaissent pas la gestion des versions ne sont en aucun cas désactivés ou confus, car si vous ne faites pas d'appels REST prenant en charge la gestion des versions, les réponses renvoyées par S3 sont compatibles avec les clients qui ont aucun concept de versioning.

Notez également que le transfert de données vers S3 est exempt de frais de transfert de données. Vous ne payez que le prix par demande. Le transfert de données de S3 vers EC2 dans une région est également exempt de frais de transfert de données. Ce n'est que lorsque vous transférez de S3 vers Internet, vers Cloudfront ou vers une autre région AWS que vous payez des frais de transfert. Si vous souhaitez utiliser le stockage à redondance réduite moins cher, s3fs le prend en charge avec -o use_rrs.

En passant, vous aurez toujours une sensation floue et chaleureuse lorsque vous voyez les 256 téraoctets d'espace libre (et 0 utilisé, car un vrai calcul de tailles est impossible en raison du fait que S3 est un magasin d'objets, pas un système de fichiers ).

$ 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

Bien sûr, vous pouvez monter le godet n'importe où. Il se trouve que je l'ai dans / srv / s3fs.

Michael - sqlbot
la source
Bien qu'il ne réponde pas à la question qui a été réellement posée, si j'avais plusieurs téraoctets de données que je voulais charger dans S3, la Snowball Amazon Import / Export récemment annoncée serait ce que je lancerais dur au client pour le chargement initial des données . Un SAN de 50 To expédié à leur porte, le charger, le racheter, Amazon charge les données, à un prix bien inférieur à la bande passante pour transférer les données.
Michael - sqlbot
Avez-vous une expérience de l'exécution d'une interface graphique Web en plus de cette configuration FTP? Si oui, qu'est-ce qui a fonctionné ou qui a été problématique?
T. Brian Jones
@ T.BrianJones mon inclination est généralement d'éviter les interfaces graphiques car je préfère le comportement clair et évident que les fichiers de configuration modifiables manuellement offrent généralement. Pour mes configurations, j'ai un script personnalisé appelé setupftpuserqui appelle l' ftpasswdutilitaire de ProFTPd pour créer des utilisateurs, créer des répertoires personnels et définir des autorisations. Il sauvegarde également le fichier de mot de passe avant d'apporter des modifications. S'il est appelé sur un utilisateur existant, il vous indique que l'utilisateur est déjà configuré et vous demande si vous souhaitez modifier le mot de passe. Une interface graphique qui a géré essentiellement le même processus, et ça devrait aller si elle est bien écrite.
Michael - sqlbot
5

Découvrez la passerelle SFTP sur AWS Marketplace .

Nous avons rencontré des problèmes de fiabilité avec s3fs, nous avons donc développé une solution personnalisée spécialement à cet effet. Nous l'utilisons en production depuis plusieurs années sans problème et l'avons récemment publié sur AWS Marketplace.

Jeff
la source
notez que c'est unidirectionnel (le téléchargement vers sftp stocke le fichier dans s3, mais le fichier ne peut plus être téléchargé depuis sftp). De plus, placer des fichiers dans s3 ne les rend pas disponibles via sftp.
Vincent De Smet
Juste pour clarifier ... SFTP Gateway a également un répertoire de "téléchargement" qui se synchronise de S3 vers le serveur sftp. En séparant les téléchargements et les téléchargements, vous, en tant qu'administrateur, avez un contrôle total sur ce que les gens peuvent télécharger et télécharger.
Jeff
est-ce une fonctionnalité nouvellement ajoutée? Certainement n'existait pas lorsque ce commentaire a été publié il y a à peu près un an
Vincent De Smet
Oui, c'était une fonctionnalité ajoutée après ce post original. Nous le maintenons activement et continuons d'ajouter de nouvelles fonctionnalités comme la prise en charge du chiffrement côté serveur et les téléchargements partagés.
Jeff
1

Il y a deux 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 compartiment 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).

Service SFTP géré

  • Dans votre console Amazon AWS, 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 la stratégie AmazonS3FullAccess ).

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

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

Montage du compartiment sur le serveur Linux

Comme @Michael l'a déjà répondu , montez simplement le compartiment en utilisant le s3fssystème de fichiers (ou similaire) sur un serveur Linux (Amazon EC2) et utilisez le serveur SFTP intégré du serveur pour accéder au compartiment.

Voici les instructions de base:

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

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

Pour plus de détails, consultez mon guide Configuration d'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 .

Martin Prikryl
la source
0

AWS fournit désormais un service SFTP sur S3 appelé AWS Transfer For SFTP . Il présente les avantages du S3 (stockage distribué hautement durable et disponible) combiné au protocole SFTP bien connu et établi.

Par défaut, les utilisateurs s'authentifient à l'aide de paires de clés privées / publiques et à l'aide de stratégies IAM, vous pouvez configurer des autorisations pour les utilisateurs SFTP sur les compartiments S3. Vous pouvez ajouter des schémas d'authentification en implémentant vos propres fonctionnalités sur AWS API Gateway et AWS Lambda.

Nous avons enveloppé AWS Transfer for SFTP dans un module complémentaire Heroku appelé SFTP To Go pour à la fois fournir des schémas d'authentification flexibles et un coût total de possession inférieur (car un point de terminaison de service a un coût fixe sur AWS, mais peut être partagé par de nombreux utilisateurs sans aucune sécurité ou compromis sur les performances.

SNeumann
la source