

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é
<a name="gateway-api-tutorial"></a>

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

**Topics**
+ [Conditions préalables](#prereq-api-gateway-tutorial)
+ [Étape 1 : créer une CloudFormation pile](#create-cf-stack)
+ [Étape 2 : Vérifiez la configuration de la méthode API Gateway pour votre serveur](#deploy-api-gateway)
+ [Étape 3 : Afficher les détails du serveur Transfer Family](#create-transfer-server)
+ [Étape 4 : vérifiez que votre utilisateur peut se connecter au serveur](#test-user-server-connect)
+ [Étape 5 : tester la connexion SFTP et le transfert de fichiers](#test-sftp-connection)
+ [Étape 6 : Limiter l'accès au bucket](#example-bucket)
+ [Mettre à jour Lambda si vous utilisez Amazon EFS](#lambda-posix)

## Conditions préalables
<a name="prereq-api-gateway-tutorial"></a>

Avant de créer les ressources 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 d'utilisateur**

1. En fonction du stockage que vous utilisez, consultez la documentation suivante :
   + Pour créer un compartiment Amazon S3, consultez [Comment créer un compartiment S3 ?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket-overview.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.
   + Pour créer un système de fichiers Amazon EFS, consultez[Configuration d'un système de fichiers Amazon EFS](configure-storage.md#requirements-efs).

1. Pour créer un rôle d'utilisateur, voir [Création d'un rôle et d'une politique IAM](requirements-roles.md)

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

## Étape 1 : créer une CloudFormation pile
<a name="create-cf-stack"></a>

**Pour créer une AWS CloudFormation pile à partir du modèle fourni**

1. Ouvrez la CloudFormation console à l'adresse [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

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

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

1. Copiez ce lien, [modèle de pile de base](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-apig.template.yml), et collez-le dans le champ **URL d'Amazon S3**. 

1. Cliquez sur **Suivant**. 

1. 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 détails du 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, voir[Étape 6 : Limiter l'accès au bucket](#example-bucket). 
   + Si vous souhaitez vous authentifier à l'aide d'une clé publique plutôt que 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. 

1. Choisissez **Next**, puis de nouveau **Next** sur la page **Configurer les options de pile**. 

1. Passez en revue les détails de la pile que vous créez, puis choisissez **Create stack**. 
**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
<a name="deploy-api-gateway"></a>

**Note**  
Pour améliorer la sécurité, vous pouvez configurer un pare-feu pour applications Web. AWS WAF est un pare-feu d'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](web-application-firewall.md).

**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 est inappropriée et non valide pour les demandes d'authentification pour les raisons suivantes :  
Chaque demande d'authentification est unique et nécessite une réponse en direct, et non une réponse en cache
La mise en cache n'apporte aucun avantage puisque 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 se traduira par des réponses non valides aux demandes d'authentification

**Pour vérifier la configuration de la méthode API Gateway pour votre serveur et la déployer**

1. <a name="step_invoke_url"></a>

   Ouvrez la console API Gateway à l'adresse [https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/). 

1. Choisissez l'**API du modèle de base Transfer Custom Identity Provider** générée par le CloudFormation modèle.

1. Dans le volet **Ressources**, choisissez **GET**, puis **Method Request**.

1. Pour **Actions**, choisissez **Deploy API**. Pour l'**étape de déploiement**, choisissez **prod**, puis **Deploy**.

   Une fois la méthode API Gateway déployée avec succès, consultez 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
<a name="create-transfer-server"></a>

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

**Pour consulter les détails de votre serveur Transfer Family**

1. Ouvrez la CloudFormation console à l'adresse [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

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

1. 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.](http://docs.aws.amazon.com/fr_fr/transfer/latest/userguide/images/apig-find-server-id.png)

   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**.

1. Ouvrez la AWS Transfer Family console à [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/), 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
<a name="test-user-server-connect"></a>

**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/](https://console.aws.amazon.com/transfer/).

1. Sur la page **Serveurs**, choisissez votre nouveau serveur, sélectionnez **Actions**, puis sélectionnez **Test**.

1. 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.

1. Pour le **protocole serveur**, sélectionnez **SFTP**, et pour l'**adresse IP source**, entrez**127.0.0.1**. 

1. 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 : tester la connexion SFTP et le transfert de fichiers
<a name="test-sftp-connection"></a>

**Pour tester la connexion SFTP**

1. Sur un appareil Linux ou macOS, ouvrez un terminal de commande. 

1. 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 clés, 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 indiquant Région AWS où se trouve votre serveur Transfer Family. Par exemple, si votre serveur se trouve dans l'est des États-Unis (Ohio), entrez**us-east-2**.

1.  À l'`sftp>`invite, assurez-vous que vous pouvez charger (`put`), télécharger (`get`) et afficher les répertoires et les fichiers (`pwd`et`ls`). 

## Étape 6 : Limiter l'accès au bucket
<a name="example-bucket"></a>

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

Dans cet exemple, nous avons défini 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 fort.
+ **UserPublicKey1**: `{{your-public-key}}`
+ **UserRoleArn**: `arn:aws:iam::{{role-id}}:role/myuser-api-gateway-role`

``**UserPublicKey1**Il 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 y est rattachée `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), utilisez`us-east-2`. 

 À l'`sftp`invite, vous êtes dirigé 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 afficher aucun répertoire situé 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
```

## Mettre à jour Lambda si vous utilisez Amazon EFS
<a name="lambda-posix"></a>

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

**Pour ajouter un profil Posix à votre fonction Lambda**

1. Ouvrez la console Lambda à l'adresse. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

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

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

1.  Dans le`response`, ajoutez la ligne suivante entre `Policy` et `HomeDirectory` : 

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

    Où {{uid-value}} et {{gid-value}} sont des nombres entiers, égaux ou supérieurs à 0, qui représentent respectivement l'ID utilisateur et l'ID de groupe. 

   Par exemple, après avoir 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 '/'
       };
   ```