Comment puis-je utiliser une API basée sur Lambda en tant que fournisseur d'identité personnalisé pour mon serveur Transfer Family sans utiliser CloudFormation ?

Date de la dernière mise à jour : 20/08/2020

Je souhaite utiliser une API Amazon API Gateway basée sur AWS Lambda en tant que fournisseur d'identité personnalisé pour mon serveur AWS Transfer Family. Cependant, je ne veux pas utiliser l'un des modèles de pile AWS CloudFormation pour ma configuration. Je veux personnaliser ma configuration. Comment puis-je configurer un fournisseur d'identité personnalisé de cette façon ?

Brève description

Vous pouvez configurer manuellement une API Gateway basée sur Lambda en tant que fournisseur d'identité personnalisé pour votre serveur Transfer Family au lieu d'utiliser l'un des modèles de pile CloudFormation. Pour ce faire, configurez directement une fonction Lambda et une API Gateway avec votre serveur.

Par exemple, pour obtenir la même configuration que le modèle de pile de base, procédez comme suit :

1.     Créez un rôle AWS Identity and Access Management (IAM) pour le rôle d'exécution Lambda.

2.     Créez la fonction Lambda.

3.     (Facultatif) Créez un rôle IAM pour le rôle de journalisation API Gateway.

4.     Configurez une API Gateway API en tant que fournisseur d'identité.

5.    Créez des rôles IAM pour le serveur Transfer Family et ses utilisateurs.

6.    Créez le serveur Transfer Family.

7.    Configurez votre magasin d'informations d'identification.

Résolution

Important : Cette configuration est un exemple de configuration de votre fournisseur d'identité personnalisé sans utiliser de modèle de pile CloudFormation. Vous devez modifier les étapes de configuration en fonction de vos besoins pour le fournisseur d'identité personnalisé.

Créer un rôle IAM pour le rôle d'exécution Lambda

1.    Utilisez la console IAM pour créer le rôle d'exécution.
Remarque : Pour cette configuration, vous n’avez besoin que des autorisations d'exécution de base. Cependant, veillez à personnaliser les autorisations pour votre cas d'utilisation.

2.    Modifiez la stratégie d'approbation du rôle pour ajouter l'instruction suivante :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Créer la fonction Lambda

Suivez les étapes pour créer une fonction Lambda à l'aide de la console. Veillez à configurer les éléments suivants :

1.    Pour le Rôle d'exécution, sélectionnez le rôle d'exécution Lambda que vous avez créé.

2.    Pour le Code de fonction, vous pouvez utiliser la fonction Lambda par défaut pour l'authentification. Vous pouvez également utiliser une fonction personnalisée.

(Facultatif) Créer un rôle IAM pour le rôle de journalisation API Gateway

Vous pouvez utiliser Amazon CloudWatch Logs pour vous aider à déboguer les erreurs avec votre API REST. Pour créer un rôle de journalisation, procédez comme suit :

1.    Créez un rôle IAM pour API Gateway et attachez la stratégie gérée AmazonAPIGatewayPushToCloudWatchLogs au rôle.

2.    Modifiez la stratégie d'approbation du rôle pour ajouter l'instruction suivante :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Configurer une API Gateway API en tant que fournisseur d'identité

1.    Ouvrez la console API Gateway.

2.    Dans le volet de navigation, choisissez API.

3.    Choisissez Créer une API.

4.    Pour Choisir un type d'API, accédez à API REST, puis choisissez Création. Ensuite, saisissez les éléments suivants :
Pour Sélectionner le protocole, sélectionnez REST.
Pour Créer une nouvelle API, sélectionnez Nouvelle API.
Pour Nom d'API, saisissez un nom pour votre API.
Pour Type de point d'extrémité, sélectionnez Régional.

Remarque : Ne générez pas votre API avec l'option REST API Private (API REST privée).

5.    Choisissez Créer une API.

6.    Dans le volet de navigation, choisissez Modèles. Ensuite, choisissez Créer.

7.    Pour Nom du modèle, saisissez UserConfigResponseModel.

8.    Pour Type de contenu, saisissez application/json.

9.    Pour Schéma du modèle, saisissez les éléments suivants :

{"$schema":"http://json-schema.org/draft-04/schema#","title":"UserUserConfig","type":"object","properties":{"Role":{"type":"string"},"Policy":{"type":"string"},"HomeDirectory":{"type":"string"},"PublicKeys":{"type":"array","items":{"type":"string"}}}}

10.    Choisissez Créer modèle.

11.    Dans le volet de navigation, choisissez Ressources.

12.    Développez Actions, puis choisissez Créer une ressource.

13.    Créez une ressource pour vos serveurs Transfer Family. Pour Nom de la ressource, saisissez Serveurs. Pour Chemin de ressource, saisissez serveurs.

14.    Créez une ressource pour l'ID du serveur. Pour Nom de la ressource, saisissez ServerID. Pour Chemin de ressource, saisissez {serverId}.

15.    Créez une ressource pour les utilisateurs de votre serveur. Pour Nom de la ressource, saisissez Utilisateurs. Pour Chemin de ressource, saisissez utilisateurs.

16.    Créez une ressource pour les noms d'utilisateur. Pour Nom de la ressource, saisissez Nom d'utilisateur. Pour Chemin de ressource, saisissez {username}.

17.    Créez une ressource pour les configurations utilisateur. Pour Nom de la ressource, saisissez GetUserConfig. Pour Chemin de ressource, saisissez config.

18.    Développez Actions, puis choisissez Créer une méthode.

19.    Dans le menu déroulant, sélectionnez GET. Ensuite, pour créer la méthode, choisissez l'icône de vérification en regard de GET.

20.    Pour GET - Setup (GET - Configuration), saisissez les éléments suivants :
Pour Type d'intégration, sélectionnez Fonction Lambda.
Pour Région Lambda, sélectionnez la région AWS dans laquelle se trouve votre fonction Lambda.
Pour Fonction Lambda, sélectionnez la fonction que vous avez créée.

21.    Choisissez Enregistrer.

22.    Choisissez Demande de méthode. Ensuite, saisissez les éléments suivants :
Pour Autorisation, sélectionnez AWS_IAM.
Pour En-têtes de demande HTTP, choisissez Ajouter un en-tête. Ensuite, saisissez Password (Mot de passe) comme nom d'en-tête.
Pour Paramètres de chaîne de requête d'URL, choisissez Ajouter une chaîne de requête. Ensuite, entrez le protocole en tant que nom de chaîne de requête.
Choisissez Add query string again (Ajouter une nouvelle chaîne de requête), puis saisissez sourceIp comme autre nom de chaîne de requête.

23.    Dans la barre de navigation de la méthode GET, choisissez Exécution de la méthode pour revenir à la page GET - Method Execution (GET - Exécution de la méthode).

24.    Choisissez Demande d'intégration. Développez Modèles de mappage.

25.    Pour Transmission du corps de la demande, sélectionnez Lorsqu'aucun modèle ne correspond à l'en-tête Content-Type de la demande.

26.    Pour Content-Type, saisissez application/json. Pour confirmer, sélectionnez l'icône de vérification.

27.    Pour le modèle, saisissez ce qui suit :

{ "username": "$input.params('username')", "password": "$util.escapeJavaScript($input.params('Password')).replaceAll("\\'","'")", "serverId": "$input.params('serverId')", "protocol": "$input.params('protocol')","sourceIp": "$input.params('sourceIp')" }

28.     Choisissez Enregistrer.

29.    Dans la barre de navigation de la méthode GET, choisissez Exécution de la méthode pour revenir à la page GET - Method Execution (GET - Exécution de la méthode).

30.    Sélectionnez Réponse d'intégration. Vérifiez qu'il n'y a pas de modèles de mappage et que le corps de la réponse est transmis à la réponse de la méthode.

31.    Dans la barre de navigation de la méthode GET, choisissez Exécution de la méthode pour revenir à la page GET - Method Execution (GET - Exécution de la méthode).

32.    Sélectionnez Réponse de méthode. Ensuite, développez 200.

33.    Pour Corps de réponse pour 200, modifiez la valeur Modèles, puis sélectionnez le modèle UserConfigResponseModel que vous avez créé aux étapes 7 à 10. Pour confirmer, sélectionnez l'icône de vérification.

34.    Dans le volet de navigation Ressources sélectionnez GET, puis Actions et Déployer une API. Saisissez les éléments suivants :
Pour Étape de déploiement, choisissez [Nouvelle étape].
Pour Nom de l'étape, saisissez un nom pour l'étape.

35.    Sélectionnez Déployer.

36.    Dans le volet de navigation, sélectionnez Étapes. Ensuite, sélectionnez Créer et entrez les éléments suivants :
Pour Nom de l'étape, saisissez prod.
Pour Déploiement, sélectionnez le déploiement que vous avez créé en tant que nouvelle étape.

37.    Choisissez Créer.

Créer des rôles IAM pour le serveur Transfer Family et ses utilisateurs

1.    Créez un rôle IAM pour le serveur Transfer Family, qui accorde des autorisations pour appeler l'API que vous avez créée, de la même manière que ce qui suit :

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Action": [
              "execute-api:Invoke"
          ],
          "Resource": "arn:aws:execute-api:{Region}:{AWS-Account-ID}:{API-Gateway-id}/{stage}/GET/*",
          "Effect": "Allow"
      },
      {
          "Action": [
              "apigateway:GET"
          ],
          "Resource": "*",
          "Effect": "Allow"
      }
  ]
}

2.    Modifiez la stratégie d'approbation du rôle pour ajouter l'instruction suivante :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "transfer.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3.    Créez un rôle IAM pour les utilisateurs du serveur Transfer Family, qui accorde l'accès au compartiment Amazon Simple Storage Service (Amazon S3). Ensuite, modifiez la stratégie d'approbation du rôle pour ajouter l'instruction de l'étape 2.

4.    Créez un rôle IAM pour le serveur Transfer Family, qui envoie des journaux à CloudWatch. Ensuite, modifiez la stratégie d'approbation du rôle pour ajouter l'instruction de l'étape 2.

Créer le serveur Transfer Family

Suivez les étapes pour créer un serveur Transfer Family. Veillez à configurer les éléments suivants :

1.    Pour Identity provider type (Type de fournisseur d'identité), sélectionnez Personnalisé. Ensuite, pour Custom provider (Fournisseur personnalisé), entrez l'API que vous avez créée.

2.    Pour Invocation role (Rôle d'appel), sélectionnez le rôle IAM qui accorde au serveur les autorisations pour appeler l'API que vous avez créée.

3.    Pour Logging role (Rôle de journalisation), sélectionnez le rôle IAM du serveur, qui envoie les journaux à CloudWatch.

Configurer votre magasin d'informations d'identification

Vous devez configurer votre magasin d'informations d'identification pour la configuration utilisateur. Pour plus d'informations sur la configuration d'un magasin d'informations d'identification, consultez Default Lambda function (Fonction Lambda par défaut) et Enable password authentication for AWS Transfer for SFTP using AWS Secrets Manager (Activer l'authentification par mot de passe pour AWS Transfer for SFTP à l'aide d'AWS Secrets Manager).

Au minimum, vous devez configurer les champs suivants pour que les utilisateurs puissent effectuer des actions sur le compartiment Amazon S3 :

  • Nom utilisateur
  • Mot de passe
  • Répertoire d'accueil
  • Rôle

Remarque : Le rôle est l'Amazon Resource Name (ARN) du rôle IAM que vous avez créé pour accorder aux utilisateurs du serveur l'accès au compartiment Amazon S3.

Test et dépannage de votre configuration

Vous pouvez tester votre configuration de la manière suivante :

Si vous rencontrez des problèmes avec votre configuration, tentez les procédures suivantes :

  • Vérifiez la réponse du fournisseur d'identité de test. Si le code d'état n'est pas 200, il peut y avoir des problèmes avec la configuration de l'API.
  • Vérifiez que les rôles IAM que vous avez créés disposent des autorisations et des relations d'approbation correctes.
  • Cette configuration active la journalisation, de sorte que vous pouvez consulter les journaux d'exécution Lambda, les journaux API Gateway et les journaux Transfer Family pour identifier les problèmes.
  • Si la configuration du fournisseur d'identité personnalisé dont vous avez besoin correspond à l'une des piles CloudFormation disponibles, vous pouvez essayer de déployer le modèle CloudFormation et de le comparer avec votre configuration pour identifier les problèmes.

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?