Wie sende ich benutzerdefinierte Sicherheitsheader über API Gateway für Lambda-Proxy- oder -Nicht-Proxy-Integrationen?
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:
-
Öffne die API-Gateway-Konsole.
-
Wähle im Navigationsbereich APIs und dann deine REST-API aus.
-
Wähle Methode erstellen.
-
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. -
Wähle im Bereich Integrationsanforderung deine Lambda-Funktion aus.
-
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; }; -
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:
-
Öffne die API-Gateway-Konsole.
-
Wähle im Navigationsbereich APIs und dann deine REST-API aus.
-
Gib im Bereich Methode erstellen deinen Methodentyp und Integrationstyp ein und wähle dann Methode erstellen aus.
-
Wähle im Bereich Integrationsanfrage die Option Bearbeiten aus.
-
Erweitere Zuordnungsvorlagen und wähle dann Zuordnungsvorlage hinzufügen aus.
-
Gib unter Inhaltstyp deinen Inhaltstyp ein. Beispielsweise application/json.
-
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 -
Wähle Speichern aus.
-
Wähle API bereitstellen aus.
Methodenantwort erstellen
Gehe wie folgt vor:
- Öffne die API-Gateway-Konsole.
- Wähle im Navigationsbereich APIs und dann die REST-API aus.
- Wähle im Bereich Methodenantwort die Option Bearbeiten aus.
- Wähle unter Headername die Option Header hinzufügen aus.
- Gib den Namen des benutzerdefinierten Headers ein, den du zurückgeben möchtest, z. B. Strict-Transport-Security.
- Wähle Header hinzufügen aus, um einen weiteren Header hinzuzufügen, den du zurückgeben möchtest, z. B. Content-Security-Policy.
- Wähle Speichern aus.
- Wähle im Bereich Integrationsanfrage die Option Bearbeiten aus.
- Gib unter Header-Zuweisungen die Zuweisungswerte für deine Header ein, z. B. max-age=100000 und self.
- 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
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
- Sprache
- Deutsch
