Ich möchte den Lambda @ Edge zu einem unserer Dienste hinzufügen. Das Ziel besteht darin, die URL für bestimmte Werte neu festzulegen und diese mit einem Headerwert zu vergleichen, um die Autorisierung sicherzustellen. Wenn der Wert vorhanden ist, wird er verglichen, und wenn er zurückgewiesen wird, sollte 403 sofort an den Benutzer zurückgegeben werden. Wenn der verglichene Wert übereinstimmt oder die URL keinen bestimmten Wert enthält, wird die Anfrage als autorisierte Anfrage fortgesetzt.Implementierung der Lambda @ Edge-Authentifizierung für CloudFront
Anfangs dachte ich, dass dies mit einem "Viewer Request" Ereignis auftreten würde. Einige der Posts und Kommentare zu SO deuten darauf hin, dass die "Ursprungsanfrage" für diese Überprüfung ideal ist. Aber im Moment habe ich versucht, mit den Beispielen in der Dokumentation zu einem unserer CF-Endpunkte herumzuspielen, aber ich sehe keine erwarteten Ergebnisse. Der Code ist die folgende:
'use strict';
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
request.headers["edge-test"] = [{
key: 'edge-test',
value: Date.now().toString()
}];
console.log(require('util').inspect(event, { depth: null }));
callback(null, request);
};
Ich würde erwarten, dass es ein angemeldeter Wert innerhalb Cloudwatch sein sollte und ein neuer Header Wert in der Anforderung, aber ich sehe keine Protokolle noch bin ich den Header-Wert sehen, wenn die Anfrage kommt rein.
Kann jemand etwas Licht in die Frage bringen, warum die Dinge scheinbar nicht ausgeführt werden, was meiner Meinung nach die Antwort sein sollte? Ist mein Verständnis davon, was die erwartete Ausgabe falsch ist? Gibt es eine Konfiguration, die ich vermisse (Meine Verteilungs-ID im Auslöser ist auf die gewünschte Instanz eingestellt und das Verhalten wurde auf '*' gesetzt)? Jede Hilfe wird geschätzt :)
Ich denke, ich habe Ihr Hauptproblem unten angesprochen, aber es ist erwähnenswert, dass wenn Sie Ihre Lambda-Funktion aktualisieren und einen neuen Auslöser drücken, Ihre Website für ein paar Sekunden ungeschützt sein wird. Trigger-Updates scheinen nicht atomar zu sein, zumindest nicht, wenn du Lambda erlaubst, sie zu steuern ... es ist ein delete + add. –