Erreichen Sie eine grundlegende Authentifizierung mit CloudFront Lambda @ Edge mit Python 3.8

Einführung

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.

HINWEIS: Eine funktionsfähige Lambda-Umgebung

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.

Was ist Lambda @ Edge?

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. ..

Erstellen Sie eine Lambda-Funktion für Lambda @ Edge

Erstellen Sie eine Lambda-Funktion in der Region Nord-Virginia (USA-Ost-1)

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

SnapCrab_NoName_2020-10-8_22-24-48_No-00.png SnapCrab_NoName_2020-10-8_22-25-11_No-00.png

#!/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

SnapCrab_NoName_2020-10-8_22-39-6_No-00.png

SnapCrab_NoName_2020-10-8_22-42-28_No-00.png

Sobald der oben beschriebene Vorgang abgeschlossen und auf CloudFront angewendet wurde, ist eine grundlegende Authentifizierung für den Zugriff erforderlich.

Hinweis: Fehlerbehebung

Was ich tatsächlich getan habe.

Zusammenfassung

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?

Referenz

Recommended Posts

Erreichen Sie eine grundlegende Authentifizierung mit CloudFront Lambda @ Edge mit Python 3.8
Einrichten der Basisauthentifizierung mit Python @Lambda
Senden Sie HTTP mit dem Standardauthentifizierungsheader in Python
Betreiben Sie TwitterBot mit Lambda, Python
[Python] Verwenden von OpenCV mit Python (Basic)
[Python] [SQLite3] Betreiben Sie SQLite mit Python (Basic)
Grundlegende Authentifizierung mit verschlüsseltem Passwort (.htpasswd) mit Flasche in Python
Scraping mit Selen in Python (Basic)
Gesichtserkennung mit Lambda (Python) + Erkennung
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Basisauthentifizierung, Digest-Authentifizierung mit Flask
1. Mit Python 1-1 gelernte Statistiken. Grundlegende Statistiken (Pandas)
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)
Grundlegendes Studium von OpenCV mit Python
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Erste Schritte mit Python3 # 1 Grundkenntnisse erlernen
Passwortlose Authentifizierung mit RDS und IAM (Python)
Bearbeiten von DynamoDB-Daten mit Lambda (Node & Python)
Python lernen! Vergleich mit Java (Grundfunktion)
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Versuchen Sie, Python: Lambda zuzuweisen oder zu wechseln
Suchtpunkt beim Durchlaufen des http-Proxys mit grundlegender Authentifizierung in Python
Einrichten der Digest-Authentifizierung mit Python @Lambda
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Kantenextraktion mit Python + OpenCV (Sobel-Filter, Laplace-Filter)
LINE BOT mit Python + AWS Lambda + API Gateway
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
Erreichen Sie das Scraping mit Python & CSS Selector in 1 Minute
Exportieren Sie den RDS-Snapshot mit Lambda (Python) nach S3.
Laden Sie Dateien mit Lambda (Python) auf Google Drive hoch.
Flow, um die Slack-Authentifizierung mit Flask (Python) abzuschließen
[Einführung in Python] Grundlegende Verwendung von Lambda-Ausdrücken
FizzBuzz in Python3
Scraping mit Python
RF Python Basic_01
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python-Grundschrift
Python beginnt mit ()
mit Syntax (Python)
Grundlegende Grammatik von Python3
Bingo mit Python
Zundokokiyoshi mit Python
RF Python Basic_02
Python-HTTP-Authentifizierung
Excel mit Python
Flask Basic-Zertifizierung
Mikrocomputer mit Python
Mit Python besetzen
Erstellen Sie eine Python-Version der Lambda-Funktion (+ Lambda-Schicht) mit Serverless Framework