Passer au contenu

Comment envoyer des en-têtes de sécurité personnalisés via API Gateway pour les intégrations avec ou sans proxy Lambda ?

Lecture de 4 minute(s)
0

Je souhaite envoyer des en-têtes de sécurité personnalisés via Amazon API Gateway pour les intégrations avec ou sans proxy AWS Lambda.

Résolution

Pour ajouter des en-têtes de sécurité personnalisés dans les réponses d'API Gateway, suivez la méthode correspondant à votre type d'intégration.

Remarque : La résolution suivante s'applique uniquement aux API REST d’API Gateway. Les API HTTP ne prennent pas en charge les mappages de réponses de méthode ou de réponses d'intégration.

Intégrations de proxy Lambda

Pour les intégrations de proxy Lambda, API Gateway envoie la requête et la réponse entre le client et la fonction Lambda intégrée sans modifications. Pour envoyer des en-têtes de sécurité personnalisés depuis une API d’API Gateway vers une fonction Lambda, vous devez modifier le code source de la fonction.

Procédez comme suit :

  1. Ouvrez la console API Gateway.

  2. Dans le volet de navigation, sélectionnez API, puis votre API REST.

  3. Sélectionnez Créer une méthode.

  4. Dans le volet Créer une méthode, effectuez les actions suivantes :
    Pour Type de méthode, choisissez votre type de méthode.
    Pour Type d'intégration, sélectionnez Fonction Lambda.
    Vérifiez que vous avez activé l'intégration du proxy Lambda.
    Pour Fonction Lambda, sélectionnez votre fonction Lambda.
    Sélectionnez Créer une méthode.

  5. Dans le volet Requête d'intégration, sélectionnez votre fonction Lambda.

  6. Pour Code source, remplacez le code de la fonction par le code Python suivant ou le code Node.js dans l'éditeur de code.
    Python 3.14 et versions ultérieures :

    def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'headers': {
            "Strict-Transport-Security": "max-age=100000",
            "X-Frame-Options": "DENY",
            "X-Content-Type-Options": "nosniff",
            "Content-Security-Policy": "default-src 'self'"
         },
        'body': json.dumps("Hello from Lambda with security headers!")
    }

    Node.js 14 et versions ultérieures :

    exports.handler = async (event) => {
        const response = {
            statusCode: 200,
            headers: {
                'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
                'Content-Security-Policy': "default-src 'self'",
                'X-Frame-Options': 'DENY',
                'X-Content-Type-Options': 'nosniff'
            },
            body: JSON.stringify('Hello from Lambda with security headers!')
        };
        return response;
    };
  7. Sélectionnez Déployer.

Intégrations sans proxy

Pour envoyer des en-têtes de sécurité personnalisés via des intégrations non proxy ou personnalisées, telles que le service AWS et les types d'intégration HTTP, créez un modèle de mappage ou une méthode de réponse.

Créer un modèle de mappage

Procédez comme suit :

  1. Ouvrez la console API Gateway.

  2. Dans le volet de navigation, sélectionnez API, puis votre API REST.

  3. Dans le volet Créer une méthode, entrez votre type de méthode et type d'intégration, puis choisissez Créer une méthode.

  4. Dans le volet Requête d’intégration, sélectionnez Modifier.

  5. Développez Modèles de mappage, puis choisissez Ajouter un modèle de mappage.

  6. Pour Type de contenu, entrez votre type de contenu. Par exemple, application/json.

  7. Dans l'éditeur de corps de modèle, entrez le modèle de mappage suivant :

    #set($headersToReturn = {  
      "Strict-Transport-Security": "max-age=31536000; includeSubDomains"  
    })#foreach($header in $headersToReturn.keySet())  #set($context.responseOverride.header[$header] = $headersToReturn[$header])#end
  8. Sélectionnez Enregistrer.

  9. Sélectionnez Déployer l’API.

Créer une méthode de réponse

Procédez comme suit :

  1. Ouvrez la console API Gateway.
  2. Dans le volet de navigation, choisissez API, puis choisissez votre API REST.
  3. Dans le volet Méthode de réponse, choisissez Modifier.
  4. Pour Nom de l'en-tête, choisissez Ajouter un en-tête.
  5. Entrez le nom de l'en-tête personnalisé que vous souhaitez renvoyer, par exemple Strict-Transport-Security.
  6. Choisissez Ajouter un en-tête pour ajouter un autre en-tête que vous souhaitez renvoyer, par exemple Content-Security-Policy.
  7. Sélectionnez Enregistrer.
  8. Dans le volet Requête d’intégration, sélectionnez Modifier.
  9. Pour Mappages d'en-têtes, entrez les valeurs de mappage de vos en-têtes, par exemple max-age=100000 et self.
  10. Choisissez Enregistrer, puis Déployer l'API.

Tester votre configuration

Pour vérifier que les en-têtes personnalisés de sécurité sont inclus dans la réponse, exécutez la commande curl suivante pour appeler votre API REST :

curl -v https://your-api-id.execute-api.your-region.amazonaws.com/your-stage-name

Remarque : Remplacez your-api-id par l’ID de votre API REST, your-region par votre région AWS et your-stage-name par le nom de votre étape.

Informations connexes

Comment puis-je transmettre des en-têtes personnalisés via API Gateway à une fonction Lambda avec intégration (sans proxy) personnalisée Lambda ?

Transformations de modèles de mappage pour les API REST dans API Gateway

Comment puis-je résoudre les erreurs HTTP 502 provenant des API REST API Gateway avec une intégration de proxy Lambda ?

Didacticiel : Créer une API REST avec une intégration Lambda sans proxy

AWS OFFICIELA mis à jour il y a 7 mois