Ich habe versucht, Lambda @ Edge zu verwenden, um die Standardauthentifizierung auf die Site anzuwenden, aber wenn ich auf Japanisch suche, finde ich normalerweise viele Artikel wie Knoten 6 und 8. Diese Einschränkung trat jedoch unmittelbar nach der allgemeinen Veröffentlichung von Lambda @ Edge auf, und ich hatte das Gefühl, dass die Informationen zu alt waren, sodass ich den aktuellen Supportstatus von Lambda @ Edge erneut überprüfte. Zu diesem Zeitpunkt (08. Oktober 2020) kann Lambda @ Edge bis zu Python 3.8 verwendet werden. Daher habe ich mich dazu entschlossen, die Standardauthentifizierung anzuwenden, was der Zweck dieser Zeit ist.
Die Umgebung, die zum Zeitpunkt des Schreibens des Artikels (08. Oktober 2020) ausgeführt werden kann, ist wie folgt.
Quelle: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html#lambda-requirements-lambda-function-configuration
Es könnte sowohl in Python als auch in Node.js ausgeführt werden. Wenn man sich diese Änderung ansieht, scheint Python 3.7 im August 2019 verfügbar zu sein, und Python 3.8 und Node 12 waren um März 2020 verfügbar.
Durch Ausführen von AWS Lambda zwischen Amazon CloudFront-Anforderungen kann die erforderliche Verarbeitung separat von der Anwendung eingefügt werden. Unten finden Sie die offiziell eingeführten Anwendungsfälle.
https://aws.amazon.com/jp/lambda/edge/
Dieses Mal besteht der Zweck darin, die Basisauthentifizierung unabhängig vom ursprünglichen Inhalt durchzuführen, indem der Basisauthentifizierungsprozess eingefügt wird, bevor der Benutzer (Viewer) auf CloudFront zugreift und auf dessen Cache und Ursprung zugreift. ..
CloudFront ist ein globaler Dienst, der in jeder Region verwendet werden kann. Die hier verwendeten Ressourcen (z. B. das vom SSL Certificate Manager verwendete Zertifikat) müssen jedoch in der Region us-east-1 erstellt werden. Erstellen Sie die Lambda-Funktion auch in dieser Region.
Das Verfahren zum Erstellen mit der Verwaltungskonsole ist unten dargestellt. Als Voraussetzung wird davon ausgegangen, dass Sie das Recht haben, eine geeignete Lambda- oder IAM-Rolle zu erstellen, und dass Sie die Einstellungen für CloudFront, das die Standardauthentifizierung verwendet, bereits abgeschlossen haben.
--Öffnen Sie die Lambda-Seite und klicken Sie auf die Schaltfläche "Funktion erstellen", um die Funktion zu erstellen
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Lambda für die Basisauthentifizierung@Die Python-Version von Edge.
"""
import base64
def authenticate(user, password):
"""Authentifizierung"""
return user == 'cloudfront' and password == 'CL0UDFR0NT'
def lambda_handler(event, context):
request = event['Records'][0]['cf']['request']
headers = request['headers']
error_response = {
'status': '401',
'statusDescription': 'Unauthorized',
'body': 'Authentication Failed',
'headers': {
'www-authenticate': [
{
'key': 'WWW-Authenticate',
'value': 'Basic realm="Basic Authentication"'
}
]
}
}
if 'authorization' not in headers:
return error_response
try:
auth_values = headers['authorization'][0]['value'].split(" ")
auth = base64.b64decode(auth_values[1]).decode().split(":")
(user, password) = (auth[0], auth[1])
return request if authenticate(user, password) else error_response
except Exception:
#Format illegal etc.
return error_response
$ LATEST
anzuwenden
--Erstellen Sie eine "neue Version" aus der AktionSobald der oben beschriebene Vorgang abgeschlossen und auf CloudFront angewendet wurde, ist eine grundlegende Authentifizierung für den Zugriff erforderlich.
Was ich tatsächlich getan habe.
In den frühen Artikeln hatte ich den Eindruck, dass die anfänglichen Einstellungen aufgrund verschiedener IAM-Rolleneinstellungen schwierig waren, aber an diesem Punkt stellte ich fest, dass die Verwendung des Assistenten es einfach macht, Lambda @ Edge zu realisieren, ohne lange überlegen zu müssen. Es ist möglicherweise nicht verfügbar, wenn Sie die Entwicklungssite vor dem allgemeinen Zugriff schützen, die Basisauthentifizierung als vollständig internen Dienst auf die Site anwenden oder anschließend die Basisauthentifizierung zum Stammpfad des Site-Verwaltungsbildschirms usw. hinzufügen. Ist es?
Recommended Posts