

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 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](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. 

**Topics**
+ [Conditions préalables](#prereq-api-gateway-tutorial)
+ [Étape 1 : Création d'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 : Testez la connexion SFTP et le transfert de fichiers](#test-sftp-connection)
+ [Étape 6 : Limiter l'accès au bucket](#example-bucket)
+ [Mettez à 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 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 :
   + Pour créer un compartiment Amazon S3, voir [ 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 utilisateur, voir [Création d'un rôle et d'une politique IAM](requirements-roles.md)

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
<a name="create-cf-stack"></a>

**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](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 un 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 ** 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 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](#example-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. 

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

1. 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
<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 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](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 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. <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 le modèle d'API ** de base ** Transfer Custom Identity Provider généré par le CloudFormation modèle.

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

1. 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
<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 informations relatives à 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.](https://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 à l'[https://console.aws.amazon.com/transfer/](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
<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, choisissez ** Actions**, puis choisissez ** Tester**.

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 ** Server Protocol**, sélectionnez ** SFTP**, et pour ** Source IP**, 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 : Testez 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 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), entrez**us-east-2**.

1.  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 (`pwd`et`ls`). 

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

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`

``**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 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), utilisez`us-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
<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 pour votre pile. 

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

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

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

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 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 '/'
       };
   ```