Direkt zum Inhalt

Wie sende ich benutzerdefinierte Sicherheitsheader über API Gateway für Lambda-Proxy- oder -Nicht-Proxy-Integrationen?

Lesedauer: 3 Minute
0

Ich möchte benutzerdefinierte Sicherheitsheader über Amazon API Gateway für AWS-Lambda-Proxy- oder -Nicht-Proxy-Integrationen senden.

Lösung

Führe die für deinen Integrationstyp vorgesehene Methode aus, um benutzerdefinierte Sicherheitsheader in API-Gateway-Antworten hinzuzufügen.

Hinweis: Die folgende Lösung gilt nur für API-Gateway-REST-APIs. HTTP-APIs unterstützen keine Zuordnungen für Methodenantworten oder Integrationsantworten.

Lambda-Proxy-Integrationen

Bei Lambda-Proxy-Integrationen sendet API Gateway die Anforderung und Antwort ohne Änderungen zwischen dem Client und der integrierten Lambda-Funktion. Um benutzerdefinierte Sicherheitsheader von einer API-Gateway-API an eine Lambda-Funktion zu senden, musst du den Quellcode der Funktion ändern.

Gehe wie folgt vor:

  1. Öffne die API-Gateway-Konsole.

  2. Wähle im Navigationsbereich APIs und dann deine REST-API aus.

  3. Wähle Methode erstellen.

  4. Führe im Bereich Methode erstellen die folgenden Aktionen aus:
    Wähle für Methodentyp deinen Methodentyp aus.
    Wähle als Integrationstyp die Option Lambda-Funktion aus.
    Bestätige, dass du die Lambda-Proxy-Integration aktiviert hast.
    Wähle für Lambda-Funktion deine Lambda-Funktion aus.
    Wähle Methode erstellen.

  5. Wähle im Bereich Integrationsanforderung deine Lambda-Funktion aus.

  6. Ersetze unter Codequelle den Code der Funktion im Code Editor durch den folgenden Python- oder Node.js-Code.
    Python 3.14 und höher:

    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 und höher:

    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. Wähle Bereitstellen aus.

Nicht-Proxy-Integrationen

Um benutzerdefinierte Sicherheitsheader über Nicht-Proxy- oder benutzerdefinierte Integrationen wie AWS-Service- und HTTP-Integrationstypen zu senden, erstelle eine Zuordnungsvorlage oder Methodenantwort.

Zuordnungsvorlage erstellen

Gehe wie folgt vor:

  1. Öffne die API-Gateway-Konsole.

  2. Wähle im Navigationsbereich APIs und dann deine REST-API aus.

  3. Gib im Bereich Methode erstellen deinen Methodentyp und Integrationstyp ein und wähle dann Methode erstellen aus.

  4. Wähle im Bereich Integrationsanfrage die Option Bearbeiten aus.

  5. Erweitere Zuordnungsvorlagen und wähle dann Zuordnungsvorlage hinzufügen aus.

  6. Gib unter Inhaltstyp deinen Inhaltstyp ein. Beispielsweise application/json.

  7. Gib im Editor für Vorlagentext die folgende Zuordnungsvorlage ein:

    #set($headersToReturn = {  
      "Strict-Transport-Security": "max-age=31536000; includeSubDomains"  
    })#foreach($header in $headersToReturn.keySet())  #set($context.responseOverride.header[$header] = $headersToReturn[$header])#end
  8. Wähle Speichern aus.

  9. Wähle API bereitstellen aus.

Methodenantwort erstellen

Gehe wie folgt vor:

  1. Öffne die API-Gateway-Konsole.
  2. Wähle im Navigationsbereich APIs und dann die REST-API aus.
  3. Wähle im Bereich Methodenantwort die Option Bearbeiten aus.
  4. Wähle unter Headername die Option Header hinzufügen aus.
  5. Gib den Namen des benutzerdefinierten Headers ein, den du zurückgeben möchtest, z. B. Strict-Transport-Security.
  6. Wähle Header hinzufügen aus, um einen weiteren Header hinzuzufügen, den du zurückgeben möchtest, z. B. Content-Security-Policy.
  7. Wähle Speichern aus.
  8. Wähle im Bereich Integrationsanfrage die Option Bearbeiten aus.
  9. Gib unter Header-Zuweisungen die Zuweisungswerte für deine Header ein, z. B. max-age=100000 und self.
  10. Wählen Speichern und dann API bereitstellen.

Setup testen

Führe den folgenden curl-Befehl aus, um zu bestätigen, dass die benutzerdefinierten Sicherheitsheader in der Antwort enthalten sind und deine REST-API aufzurufen:

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

Hinweis: Ersetze your-api-id durch deine REST-API, your-region durch deine AWS-Region und your-stage-name durch deinen Stufennamen.

Weitere Informationen

Wie übergebe ich benutzerdefinierte Header über API Gateway an eine Lambda-Funktion mit benutzerdefinierter Lambda-Integration (ohne Proxy)?

Transformationen von Zuordnungsvorlagen für REST-APIs in API Gateway

Wie behebe ich HTTP-502-Fehler bei REST-APIs in API Gateway mit Lambda-Proxy-Integration?

Tutorial: Eine REST-API mit einer Lambda-Nicht-Proxy-Integration erstellen