View a markdown version of this page

Configuration d'une méthode Amazon API Gateway en tant que fournisseur d'identité personnalisé - AWS Transfer Family

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration d'une méthode Amazon API Gateway en tant que fournisseur d'identité personnalisé

Ce didacticiel explique comment configurer une méthode Amazon API Gateway et l'utiliser comme fournisseur d'identité personnalisé pour charger des fichiers sur un AWS Transfer Family serveur. Ce didacticiel utilise le modèle https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-apig.template.yml de pile de base et d'autres fonctionnalités de base à titre d'exemple uniquement.

Conditions préalables

Avant de créer les ressources de Transfer Family dans CloudFormation, créez votre espace de stockage et votre rôle d'utilisateur.

Pour spécifier le stockage et créer un rôle utilisateur
  1. Selon le stockage que vous utilisez, consultez la documentation suivante :

  2. Pour créer un rôle utilisateur, voir Création d'un rôle et d'une politique IAM

Vous entrez les informations relatives à votre stockage et à votre rôle d'utilisateur lorsque vous créez votre CloudFormation stack dans la section suivante.

Étape 1 : Création d'une CloudFormation pile

Pour créer un AWS CloudFormation empiler à partir du modèle fourni
  1. Ouvrez la CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation.

  2. Sélectionnez Créer une pile, puis choisissez Avec de nouvelles ressources (standard).

  3. Dans le volet Prérequis - Préparer un modèle, choisissez Choisir un modèle existant.

  4. Copiez ce lien, modèle de pile de base, et collez-le dans le champ URL Amazon S3.

  5. Cliquez sur Suivant.

  6. Spécifiez les paramètres, y compris le nom de votre pile. Veillez à effectuer les opérations suivantes :

    • Remplacez les valeurs par défaut pour UserName et UserPassword.

    • Pour UserHomeDirectory, entrez les informations relatives au stockage (un compartiment Amazon S3 ou un système de fichiers Amazon EFS) que vous avez créé précédemment.

    • Remplacez le rôle UserRoleArn par défaut par le rôle utilisateur que vous avez créé précédemment. Le rôle Gestion des identités et des accès AWS (IAM) doit disposer des autorisations appropriées. Pour un exemple de rôle IAM et de politique de compartiment, consultezÉtape 6 : Limiter l'accès au bucket.

    • Si vous souhaitez vous authentifier à l'aide d'une clé publique au lieu d'un mot de passe, entrez votre clé publique dans le UserPublicKey1 champ. La première fois que vous vous connectez au serveur via SFTP, vous fournissez la clé privée au lieu d'un mot de passe.

  7. Choisissez Suivant, puis cliquez à nouveau sur Suivant sur la page Configurer les options de pile.

  8. Passez en revue les détails de la pile que vous êtes en train de créer, puis choisissez Créer une pile.

    Note

    Au bas de la page, sous Fonctionnalités, vous devez reconnaître que des ressources IAM CloudFormation peuvent être créées.

Étape 2 : Vérifiez la configuration de la méthode API Gateway pour votre serveur

Note

Pour améliorer la sécurité, vous pouvez configurer un pare-feu pour applications Web. AWS WAF est un pare-feu pour applications Web qui vous permet de surveiller les requêtes HTTP et HTTPS qui sont transmises à Amazon API Gateway. Pour en savoir plus, consultez Ajouter un pare-feu pour applications Web.

Ne pas activer la mise en cache d'API Gateway

N'activez pas la mise en cache pour votre méthode API Gateway lorsque vous l'utilisez comme fournisseur d'identité personnalisé pour Transfer Family. La mise en cache n'est pas appropriée et n'est pas valide pour les demandes d'authentification car :

  • Chaque demande d'authentification est unique et nécessite une réponse en direct, et non une réponse mise en cache

  • La mise en cache ne présente aucun avantage, car Transfer Family n'envoie jamais de demandes dupliquées ou répétées à l'API Gateway.

  • L'activation de la mise en cache entraînera la réponse de l'API Gateway avec des données incompatibles, ce qui entraînera des réponses non valides aux demandes d'authentification

Pour vérifier la configuration de la méthode API Gateway pour votre serveur et le déployer
  1. Ouvrez la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway/.

  2. Choisissez le modèle d'API de base Transfer Custom Identity Provider généré par le CloudFormation modèle.

  3. Dans le volet Ressources, choisissez GET, puis choisissez Method Request.

  4. Pour Actions, choisissez Deploy API. Pour la phase de déploiement, choisissez prod, puis choisissez Deploy.

    Une fois la méthode API Gateway déployée avec succès, visualisez ses performances dans la section Stage Editor.

    Note

    Copiez l'adresse URL Invoke qui apparaît en haut de la page. Vous en aurez besoin pour la prochaine étape.

Étape 3 : Afficher les détails du serveur Transfer Family

Lorsque vous utilisez le modèle pour créer une CloudFormation pile, un serveur Transfer Family est automatiquement créé.

Pour consulter les informations relatives à votre serveur Transfer Family
  1. Ouvrez la CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation.

  2. Choisissez la pile que vous avez créée.

  3. Sélectionnez l'onglet Ressources.

    Écran qui affiche la liste des ressources créées lors de la création de la CloudFormation pile, avec les détails du serveur Transfer Family surlignés.

    L'ARN du serveur est affiché dans la colonne Physical ID de la TransferServer ligne. L'ID du serveur est contenu dans l'ARN, par exemple s-11112222333344445.

  4. Ouvrez la AWS Transfer Family console à l'https://console.aws.amazon.com/transfer/adresse et, sur la page Serveurs, choisissez le nouveau serveur.

    L'ID du serveur correspond à l'ID affiché pour la TransferServer ressource dans CloudFormation.

Étape 4 : Vérifiez que votre utilisateur peut se connecter au serveur

Pour vérifier que votre utilisateur peut se connecter au serveur, à l'aide de la console Transfer Family
  1. Ouvrez la AWS Transfer Family console à l'adresse https://console.aws.amazon.com/transfer/.

  2. Sur la page Serveurs, choisissez votre nouveau serveur, choisissez Actions, puis choisissez Tester.

  3. Entrez le texte de vos informations de connexion dans le champ Nom d'utilisateur et dans le champ Mot de passe. Il s'agit des valeurs que vous avez définies lorsque vous avez déployé la CloudFormation pile.

  4. Pour Server Protocol, sélectionnez SFTP, et pour Source IP, entrez127.0.0.1.

  5. Sélectionnez Tester).

    Si l'authentification de l'utilisateur réussit, le test renvoie une réponse StatusCode: 200 HTML et un objet JSON contenant les détails des rôles et des autorisations de l'utilisateur. Par exemple :

    { "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/my-user-role\",\"HomeDirectory\": \"/${transfer:HomeBucket}/\"}", "StatusCode": 200, "Message": "", "Url": "https://1a2b3c4d5e.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234abcd5678efgh0/users/myuser/config" }

    Si le test échoue, ajoutez l'une des politiques AWS gérées par API Gateway au rôle que vous utilisez pour votre API.

Étape 5 : Testez la connexion SFTP et le transfert de fichiers

Pour tester la connexion SFTP
  1. Sur un appareil Linux ou macOS, ouvrez un terminal de commande.

  2. Entrez l'une des commandes suivantes, selon que vous utilisez un mot de passe ou une paire de clés pour l'authentification.

    • Si vous utilisez un mot de passe, entrez cette commande :

      sftp -o PubkeyAuthentication=no myuser@server-ID.server.transfer.region-code.amazonaws.com

      Lorsque vous y êtes invité, saisissez votre mot de passe.

    • Si vous utilisez une paire de touches, entrez cette commande :

      sftp -i private-key-file myuser@server-ID.server.transfer.region-code.amazonaws.com

    Note

    Pour ces sftp commandes, insérez le code correspondant à l' Région AWS emplacement de votre serveur Transfer Family. Par exemple, si votre serveur se trouve dans l'est des États-Unis (Ohio), entrezus-east-2.

  3. Lorsque vous sftp> y êtes invité, assurez-vous que vous pouvez charger (put), télécharger (get) et afficher les répertoires et les fichiers (pwdetls).

Étape 6 : Limiter l'accès au bucket

Vous pouvez limiter l'accès à un compartiment Amazon S3 spécifique. L'exemple suivant montre les paramètres à utiliser dans votre CloudFormation stack et dans la politique que vous sélectionnez pour votre utilisateur.

Dans cet exemple, nous définissons les paramètres suivants pour la CloudFormation pile :

  • CreateServer: true

  • UserHomeDirectory: /amzn-s3-demo-bucket1

  • UserName: myuser

  • UserPassword: MySuperSecretPassword

    Important

    Il s'agit d'un exemple de mot de passe. Lorsque vous configurez votre méthode API Gateway, assurez-vous de saisir un mot de passe sécurisé.

  • UserPublicKey1: your-public-key

  • UserRoleArn: arn:aws:iam::role-id:role/myuser-api-gateway-role

UserPublicKey1Il s'agit d'une clé publique que vous avez générée dans le cadre d'une paire de public/private clés.

Le role-id est propre au rôle d'utilisateur que vous créez. La politique qui s'y rattache myuser-api-gateway-role est la suivante :

{ "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:PutObjectAcl", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }

Pour vous connecter au serveur via SFTP, entrez l'une des commandes suivantes à l'invite.

  • Si vous utilisez un mot de passe pour vous authentifier, exécutez la commande suivante :

    sftp -o PubkeyAuthentication=no myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

    Lorsque vous y êtes invité, saisissez votre mot de passe.

  • Si vous utilisez une paire de clés pour vous authentifier, exécutez la commande suivante :

    sftp -i private-key-file myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

Note

Pour ces sftp commandes, utilisez l'ID correspondant à l' Région AWS emplacement de votre serveur Transfer Family. Par exemple, si votre serveur se trouve dans l'est des États-Unis (Ohio), utilisezus-east-2.

Lorsque vous y êtes sftp invité, vous êtes redirigé vers votre répertoire personnel, que vous pouvez consulter en exécutant la pwd commande. Par exemple :

sftp> pwd Remote working directory: /amzn-s3-demo-bucket1

L'utilisateur ne peut pas afficher les répertoires situés au-dessus du répertoire de base. Par exemple :

sftp> pwd Remote working directory: /amzn-s3-demo-bucket1 sftp> cd .. sftp> ls Couldn't read directory: Permission denied

Mettez à jour Lambda si vous utilisez Amazon EFS

Si vous avez sélectionné Amazon EFS comme option de stockage pour votre serveur Transfer Family, vous devez modifier la fonction lambda pour votre pile.

Pour ajouter un profil Posix à votre fonction Lambda
  1. Ouvrez la console Lambda à https://console.aws.amazon.com/lambda/ l'adresse.

  2. Sélectionnez la fonction Lambda que vous avez créée précédemment. La fonction Lambda stack-name est au format stack-name - GetUserConfigLambda - lambda-identifier, où sont le nom de la CloudFormation pile et lambda-identifier l'identifiant de la fonction.

  3. Dans l'onglet Code, sélectionnez index.js pour afficher le code de la fonction.

  4. Dans leresponse, ajoutez la ligne suivante entre Policy et HomeDirectory :

    PosixProfile: {"Uid": uid-value, "Gid": gid-value},

    Où uid-value et gid-value sont des entiers, 0 ou plus, qui représentent respectivement l'ID utilisateur et l'ID de groupe.

    Par exemple, une fois que vous avez ajouté le profil Posix, le champ de réponse peut ressembler à ce qui suit :

    response = { Role: 'arn:aws:iam::123456789012:role/api-gateway-transfer-efs-role', // The user will be authenticated if and only if the Role field is not blank Policy: '', // Optional JSON blob to further restrict this user's permissions PosixProfile: {"Gid": 65534, "Uid": 65534}, HomeDirectory: '/fs-fab2c234' // Not required, defaults to '/' };