J'ai essayé d'utiliser Lambda @ Edge pour appliquer l'authentification de base au site, mais lorsque je recherche en japonais, je trouve généralement de nombreux articles tels que Node 6 et 8. Cependant, cette limitation était juste après la sortie générale de Lambda @ Edge, et j'ai senti que les informations étaient trop anciennes, j'ai donc vérifié à nouveau le statut de support actuel de Lambda @ Edge. À ce stade (8 octobre 2020), Lambda @ Edge peut être utilisé jusqu'à Python 3.8, j'ai donc décidé de l'utiliser pour l'authentification de base, ce qui est le but de cette fois.
L'environnement qui peut être exécuté au moment de la rédaction de l'article (8 octobre 2020) est le suivant.
Source: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html#lambda-requirements-lambda-function-configuration
Il pourrait être exécuté en Python ainsi que Node.js. En regardant quand ce changement est intervenu, il semble que Python 3.7 était disponible en août 2019, et Python 3.8 et Node 12 étaient aux alentours de mars 2020.
En exécutant AWS Lambda entre des requêtes Amazon CloudFront, le traitement requis peut être inséré séparément de l'application. Voir ci-dessous pour les cas d'utilisation officiellement introduits.
https://aws.amazon.com/jp/lambda/edge/
Cette fois, le but est d'effectuer l'authentification de base indépendamment du contenu d'origine en insérant le processus d'authentification de base avant que l'utilisateur (spectateur) n'accède à CloudFront et accède à son cache et à son origine. ..
CloudFront est un service global qui peut être utilisé dans n'importe quelle région, mais les ressources utilisées ici (comme le certificat utilisé par SSL Certificate Manager) doivent être créées dans la région us-east-1. Créez également la fonction Lambda dans cette région.
La procédure de création avec la console de gestion est illustrée ci-dessous. En tant que conditions préalables, il est supposé que vous avez le droit de créer un rôle Lambda ou IAM approprié et que vous avez déjà défini les paramètres pour CloudFront qui utilise l'authentification de base.
--Ouvrez la page Lambda et appuyez sur le bouton "Créer une fonction" pour commencer à créer la fonction --Effectuez les réglages initiaux conformément à la figure ci-dessous. --Lors de la création d'un nouveau rôle d'exécution
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Lambda pour l'authentification de base@La version Python d'Edge.
"""
import base64
def authenticate(user, password):
"""Authentification"""
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 illégal, etc.
return error_response
$ LATEST
--Créer une "nouvelle version" à partir de l'action
--Lambda @ Edge ne peut pas utiliser $ LATEST
, alors assurez-vous d'émettre une version corrigée.--Lorsque CloudFront est sélectionné dans les paramètres de déclenchement, l'élément pour définir Lambda @ Edge pour le CloudFront déjà défini s'affiche. ――Vous choisissez la distribution que vous souhaitez --Dans "Sélectionner le comportement du cache", il apparaîtra dans l'unité de chemin spécifiée dans Comportement de CloudFront, sélectionnez donc le comportement auquel Lambda @ Edge est appliqué.
Une fois le processus ci-dessus terminé et appliqué à CloudFront, une authentification de base sera requise pour l'accès.
Ce que j'ai vraiment fait.
--Lambda @ Edge ne renvoie pas les résultats attendus --Parce que la version n'a pas été corrigée. La version doit être corrigée correctement
/ aws / lambda / us-east-1.cloudfront-basic-auth
a été créé dans la région ap-nord-est-1, et les journaux ont été affichés ici. est défini pour ne pas circuler vers l'origine. Si Lambda @ Edge est inséré ici, le jeton d'authentification ne sera pas transmis à Lambda @ Edge en premier lieu, donc ʻerror_response
sera toujours retourné.Dans les premiers articles, j'avais l'impression que les paramètres initiaux étaient difficiles en raison de divers paramètres de rôle IAM, mais à ce stade, j'ai trouvé que l'utilisation de l'assistant facilite la réalisation de Lambda @ Edge sans avoir à réfléchir sérieusement. Il peut ne pas être disponible lors de la protection du site de développement contre l'accès général, de l'application de l'authentification de base au site en tant que service entièrement interne, ou de l'ajout de l'authentification de base au chemin racine de l'écran de gestion du site, etc. C'est ça?
Recommended Posts