BLOG

[Techblog] Lambda @ Edge를 사용하여 Amazon CloudFront Origin에서 403 오류 페이지 사용자 지정하기
작성일: 2021-02-05

AWS 웹 애플리케이션 방화벽 (AWS WAF)은 일반적으로 Amazon CloudFront로 전달되는 HTTP 및 HTTPS 요청을 보호하는 데 사용됩니다. 이 접근 방식을 사용할 때 디폴트 403 오류 페이지는 AWS WAF 발생 오류인지 CloudFront 오리진 발생 오류인지를 구별하지는 않습니다.

 

AWS WAF 및 Amazon CloudFront 사용자는 요청이 AWS WAF (무단 액세스) 또는 Origin (Origin에서 페이지를 찾을 수 없음)에 의해 차단되었는지 여부에 따라 HTTP 403 오류에 대한 최종 사용자 환경을 사용자 지정할 수 있습니다.

 

이 블로그에서는 Lambda @ Edge 함수를 사용하여 오류 발생 원인에 따라 맞춤 오류 페이지를 표시하거나 4XX 오류 페이지를 마스킹하는 방법을 알아봅니다.

 

 

문제 설명

 

 그림 1: 최종 사용자는 기본 HTTP 403 오류 페이지만 표시됨

 

 

이전 아키텍처에서 예제 고객은 Amazon CloudFront 배포에 AWS WAF를 설정했습니다. 현재 고객은 요청이 AWS WAF에 의해 차단되었는지(AWS WAF 403 오류), 요청된 리소스가 오리진에 의해 금지되었는지 (원본 403 오류)에 따라 최종 사용자의 클라이언트에 맞춤화된 오류 페이지를 표시할 수 없습니다.

 

 

제안

 

그림 2: 최종 사용자 오류 페이지는 Lambda @ Edge 함수를 사용하여 에러 발생에 따라 지정

 

제안된 솔루션에서 예제 고객은 Lambda @ Edge 함수를 사용하여 Origin에서 발생하는 HTTP 403 오류에 대한 응답을 맞춤 지정할 수 있습니다. AWS WAF에서 발생하는 HTTP 403 오류의 경우 솔루션은CloudFront 배포에 설정된 기본 오류 페이지를 표시합니다.

 

그림 2의 솔루션이 작동하는 방식은 다음과 같습니다.

 

  1. 최종 사용자 클라이언트가 Amazon CloudFront에 요청을 보내면 요청이 Origin (S3)으로 전달됩니다.
  2. Origin은 최종 사용자 클라이언트에 403 오류 코드로 응답합니다.
  3. Lambda @ Edge 함수는 오리진 응답에서 호출됩니다.
  4. Lambda @ Edge는 302 상태 코드가 포함된 요청을 최종 사용자 클라이언트에 대한 응답으로 전송되는 404 오류 페이지 (사용 사례에 따라 오류 페이지를 맞춤 지정할 수 있음)로 리디렉션합니다.

 

 

솔루션 배포

 

1) Lambda 함수 생성

Lambda 함수는 모든 오리진 응답에서 트리거됩니다. 응답 상태 코드를 확인하도록 구성할 수 있습니다. 이 경우 응답에 400에서 599까지의 오류가 포함되어 있으면 응답을 404.html 파일로 리디렉션 합니다. 다음은 리디렉션을 수행하는 Python 3.7의 스 니펫입니다.

 

Python

#!/usr/bin/python

# -*- coding: utf-8 -*-

import json

 

 def lambda_handler(event, context):

response = event[‘Records’][0][‘cf’][‘response’]

request = event[‘Records’][0][‘cf’][‘request’] 

 

”’

This function updates your HTTP status code in the response to a 404, redirecting it to another path (cache behavior) that has a different origin configured. Note the following:

1. The function is triggered by an origin response

2. The response status from the origin server is an error status code (4xx)

”’ 

 

if int(response[‘status’]) >= 400 and int(response[‘status’]) <= 499

:redirect_path = ‘/404.html’

 

 

 response[‘status’] = 302

response[‘statusDescription’] = ‘Found’

 

 # Drop the body as it is not required for redirects

response[‘body’] =

response[‘headers’][‘location’] = [{‘key’: ‘Location’, ‘value’: redirect_path}] 

 

return response

 

2) Amazon CloudFront Origin 응답에 의해 호출되는 Lambda 함수 구성

이 구성을 통해 오리진에서 응답이 반환될 때마다 Lambda 함수가 트리거됩니다. Lambda 함수가 트리거되면 오리진 응답 상태 코드를 확인하고 필요한 경우 리디렉션합니다.

 

람다 기능의 Add trigger로 이동하여 Amazon CloudFront을 트리거 구성으로 선택하고 Deploy to Lambda@Edge를 선택합니다.

 

Deploy to Lambda@Edge에서 당신은 당신의 아마존 CloudFront를 배포 ARN을 선택하고 아마존 CloudFront를 Orgin Response로 선택했는지 확인하세요.

 

Lambda 트리거를 성공적으로 구성하면 Amazon CloudFront 모니터링 섹션에서 구성이 다음과 같이 표시됩니다.

 

 

결론

Amazon CloudFront는 맞춤형 오류 페이지를 생성하고 응답 코드를 변경하는 기능을 제공합니다. 이 블로그에서는, Lambda@Edge을 사용하는 HTTP 403에러에 대해 최종 사용자에게 나타나는 화면을 맞춤 설정하는 법을 배웠습니다. Amazon CloudFront and Lambda@Edge에 대해 더 알고 싶으시다면, Getting Started with Amazon CloudFront and Getting Started with Lambda@Edge 를 참고해 주시기 바랍니다. 

 

 아마존 CloudFront를 시작하기 및 람다 시작하기 @ 자세한 내용은 Edge 문서를 참조하십시오.

원문URL: https://aws.amazon.com/ko/blogs/networking-and-content-delivery/customize-403-error-pages-from-amazon-cloudfront-origin-with-lambdaedge/

 

메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글이나 관련 기사 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.