Dans le monde de la technologie moderne, le transfert de fichiers sécurisé et efficace est une nécessité essentielle pour de nombreuses organisations. AWS Transfer Family, une solution de transfert de fichiers sécurisée gérée proposée par Amazon Web Services, permet les transferts de fichiers à l'aide de protocoles standards tels que SFTP, FTPS, FTP et AS2. Lorsqu'elle est combinée avec Golang, un langage de programmation connu pour son efficacité et sa facilité d'utilisation, une combinaison puissante est créée pour gérer et automatiser efficacement les transferts de fichiers.
Dans cet article, nous explorerons comment intégrer AWS Transfer Family à Golang pour optimiser vos processus de transfert de fichiers. De la configuration d'AWS Transfer Family à la mise en œuvre d'un client SFTP avec Golang, je vous guiderai étape par étape pour que vous puissiez tirer le meilleur parti de ces technologies.
AWS Transfer Family est un service sécurisé et entièrement géré qui permet le transfert de fichiers vers et depuis des services de stockage AWS tels qu'Amazon S3 et Amazon EFS à l'aide de protocoles tels que SFTP, AS2, FTPS et FTP.
La conception architecturale proposée pour l'intégration d'AWS Transfer Family avec Golang se compose des composants suivants, comme illustré dans le schéma ci-dessous :
L'API proposée dans cet article sert d'exemple de base pour démontrer ses fonctionnalités fondamentales. Dans un scénario réel, l'API peut être plus complexe et inclure des fonctionnalités supplémentaires. Sa fonction principale est de télécharger des fichiers sur le serveur AWS Transfer Family SFTP et de les stocker dans un compartiment S3, que ce soit à des fins de sauvegarde ou d'intégration avec d'autres systèmes. Les cas d'utilisation varient et dépendent des besoins de chaque organisation. Voici quelques exemples de cas d'utilisation supplémentaires : Clients de la famille AWS Transfer.
De plus, l'API proposée dans cet article peut être déployée sur le cloud AWS à l'aide de services tels qu'AWS Elastic Beanstalk ou AWS Fargate pour obtenir une plus grande évolutivité et disponibilité, en fonction des exigences spécifiques de chaque organisation.
Commençons !
Générez une paire de clés publique et privée pour vous connecter au serveur SFTP AWS Transfer Family. Cela peut être fait localement sur notre machine à l'aide de la commande suivante.
$ ssh-keygen -t rsa -b 4096 -f
ssh-keygen -t rsa -b 4096 -f <PATH>/aws_example_ssh_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in <PATH>/aws_example_ssh_key Your public key has been saved in <PATH>/aws_example_ssh_key.pub The key fingerprint is: SHA256:P80TXbp10tjdzJLc3KAhtWP9YWQe+A181WvqUQyaTFc rodrigoquispe@0WJMD6M The key's randomart image is: +---[RSA 4096]----+ | ..oE+| | o ** +| | + O **+| | * *.^*| | S o % #| | . o + =.| | o = o | | . o | | | +----[SHA256]-----+
Connectez-vous à AWS Management Console, sélectionnez le service AWS Transfer Family et créez un serveur.
Sélectionnez SFTP (SSH File Transfer Protocol) pour un transfert de fichiers sécurisé et cliquez sur Suivant.
Choisissez un fournisseur d'identité et sélectionnez « Service géré ».
Dans la configuration du point de terminaison, sélectionnez « Accessible publiquement » et cliquez sur Suivant.
Nous sélectionnons « Amazon S3 » comme option de stockage et cliquons sur Suivant.
Dans la section « Configurer les détails supplémentaires », laissez les paramètres à leurs valeurs par défaut.
Révisez, cliquez sur Suivant et créez.
Une fois la création terminée, nous aurons quelque chose de similaire à ceci. Nous pouvons voir que nous n'avons pas encore d'utilisateurs et que cela démarrera sous peu via un point de terminaison public et en utilisant S3 comme stockage.
Créez un nouveau rôle pour la famille de transfert AWS vers le service s3. Pour ce faire, accédez au service IAM et créez un nouveau rôle de type de service AWS et dans le cas d'utilisation, sélectionnez transfert et suivant.
Politique d'autorisation, AmazonS3FullAccess pour avoir un accès complet au compartiment S3. Mais cette politique est tout à fait admissible et il n'est pas recommandé de l'utiliser en production. Et ensuite.
Nous procédons à l'attribution du nom du rôle "role-example-transfer-to-s3", nous le vérifions et cliquons sur "Créer un rôle".
Nous procédons à la création du bucket s3, pour ce faire nous allons sur le service s3 et créons un nouveau bucket.
Nous définissons le nom du bucket, en laissant la configuration par défaut et créons le bucket.
Nom du bucket : "bucket-example-transfer".
À la fin de la création, nous aurons quelque chose comme ceci :
Accédez au service AWS Transfer Family et sélectionnez le serveur que vous avez créé précédemment.
Pour suivre cet article, vous devrez fournir la clé publique qui a été générée au démarrage aws_example_ssh_key.pub.
Pour visualiser le contenu de la clé publique, utilisez la commande suivante :
$ cat aws_example_ssh_key.pub
La clé publique ressemble à ceci :
ssh-keygen -t rsa -b 4096 -f <PATH>/aws_example_ssh_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in <PATH>/aws_example_ssh_key Your public key has been saved in <PATH>/aws_example_ssh_key.pub The key fingerprint is: SHA256:P80TXbp10tjdzJLc3KAhtWP9YWQe+A181WvqUQyaTFc rodrigoquispe@0WJMD6M The key's randomart image is: +---[RSA 4096]----+ | ..oE+| | o ** +| | + O **+| | * *.^*| | S o % #| | . o + =.| | o = o | | . o | | | +----[SHA256]-----+
C'est la clé que nous devons inclure dans le champ "Clés publiques SSH". Assurez-vous de copier et coller l'intégralité de la clé avec précision dans ce champ pour permettre un accès sécurisé au serveur.
Après avoir créé l'utilisateur, vous devriez voir un écran de confirmation similaire à celui ci-dessous. Cela indique que l'utilisateur a été configuré avec succès et est prêt à utiliser le service SFTP.
Ci-dessous, nous fournissons un aperçu détaillé de la structure du projet Golang et incluons un lien vers le référentiel GitHub pour référence. Cet aperçu vous aidera à comprendre l'organisation du projet et comment les différentes composantes sont structurées et interconnectées.
ssh-rsa AAAAB3NzaC1yc2EBBAADAQABAAACAQC/qNMJaCz8+I3G71bTFf8Cpe+AAAA0BBBBBBBA6C+/a8fyl9Dw4wjj0huc4ItlX2auKG3skxTYP1ZgO5/7M7xmp2Hf+AAAA0BBBBBBBA6CynWwfwkS5XEIfNtoNWCSeB6ra4anljFdLJH4ZReOM18xxBZCyz2gGA7ePprM0nfpgoQKjp8eDoz6HFcvH4Qynea06W72D+tUWjCRH6bgPBsw/cCfj+VrcqsQXif/X8nViS679+V+AAAA0BBBBBBBA6C+t/5dD3uFPyc8yJn2fNEHB4kfIB9JR5fPIo4dVqPebloPg9vKT2M+AAAA0BBBBBBBA6C/AAAA0BBBBBBBA6C+XLTJSAljgq9JQ4l3vnT4RSsKuK+DX2um5DsN/Zwk9Qwf8JRJey/AAAA0BBBBBBBA6C+/AAAA0BBBBBBBA6CNkVaeDOYSIeGkMBUmmMaeVNeaR967SBLoHNzBfodKKaIpsmW2yHvIitg/YKu2YXKe/DnYU3G8om13uL8qIOB85CugVQ== rodrigoquispe@AAAA0BBBBBBBA6C
Les dépendances que nous utiliserons sont Gin et SFTP.
├── cmd │ └── main.go ├── go.mod ├── go.sum └── internal ├── app │ └── service.go ├── domain │ └── models.go ├── handler │ └── sftp_handler.go └── infra ├── config.go └── sftp_client.go
Définissez les informations d'identification suivantes dans le fichier config.go, où se trouvent la clé privée et les informations d'identification de l'utilisateur Transfer Family, pour vous connecter au serveur SFTP.
$ go get -u github.com/gin-gonic/gin $ go get -u github.com/pkg/sftp
Pensez également à définir le chemin où seront enregistrés les fichiers téléchargés sur le serveur SFTP. Dans mon cas, c'est /bucket-example-transfer/rodrigo.
// config.go func LoadConfig() *Config { return &Config{ Host: "<HOST>.server.transfer.us-east-1.amazonaws.com", Port: "<PORT>", User: "<USER>", PrivateKeyPath: "<PATH>/aws_example_ssh_key", } }
Fonction pour créer un nouveau client SFTP avec la configuration donnée :
// service.go func (u *Service) Upload(file *domain.File) error { return u.sftpClient.UploadFile(file, "/bucket-example-transfer/rodrigo/") }
Méthode pour télécharger un fichier sur le serveur SFTP.
ssh-keygen -t rsa -b 4096 -f <PATH>/aws_example_ssh_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in <PATH>/aws_example_ssh_key Your public key has been saved in <PATH>/aws_example_ssh_key.pub The key fingerprint is: SHA256:P80TXbp10tjdzJLc3KAhtWP9YWQe+A181WvqUQyaTFc rodrigoquispe@0WJMD6M The key's randomart image is: +---[RSA 4096]----+ | ..oE+| | o ** +| | + O **+| | * *.^*| | S o % #| | . o + =.| | o = o | | . o | | | +----[SHA256]-----+
Exécutez le projet à l'aide de la commande suivante :
$ allez exécuter cmd/main.go
Maintenant, nous téléchargeons un fichier sur le serveur SFTP à l'aide de Postman. Ensuite, nous naviguons vers S3 pour vérifier que le fichier a été téléchargé correctement.
Les fichiers ont été téléchargés avec succès sans aucun problème.
Merci d'avoir lu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!