자습서: 기본 Lambda@Edge 함수 생성 - Amazon CloudFront

자습서: 기본 Lambda@Edge 함수 생성

이 자습서에서는 CloudFront에서 실행되는 샘플 Node.js 함수를 생성하고 구성하는 과정을 통해 Lambda@Edge를 시작하는 방법을 보여줍니다. 이 예시에서는 CloudFront가 파일을 검색할 때 HTTP 보안 헤더를 응답에 추가합니다. (이를 통해 웹 사이트의 보안 및 개인 정보 보호를 개선할 수 있음)

이 자습서에는 자체 웹 사이트가 필요하지 않습니다. 그러나 자체 Lambda@Edge 솔루션을 생성하는 경우 비슷한 단계를 따르고 동일한 옵션 중에서 선택합니다.

1단계: AWS 계정 가입

아직 계정에 가입하지 않았다면 AWS 계정에 가입하세요. 자세한 내용은 AWS 계정에 등록 단원을 참조합니다.

2단계: CloudFront 배포 생성

예제 Lambda@Edge 함수를 만들려면 먼저 콘텐츠를 제공할 오리진이 있는 CloudFront 환경부터 갖춰야 합니다.

이 예제에서는 Amazon S3 버킷을 배포의 오리진으로 사용하는 CloudFront 배포를 만듭니다. 사용할 환경이 이미 있는 경우 이 단계를 건너뛸 수 있습니다.

Amazon S3 오리진을 사용하여 CloudFront 배포를 생성하려면
  1. 이미지 파일 등 샘플 콘텐츠가 될 파일 한두 개로 Amazon S3 버킷을 만듭니다. Amazon S3에 콘텐츠 업로드의 단계를 따르면 됩니다. 버킷의 객체에 대한 퍼블릭 읽기 액세스를 허용하는 권한을 설정해야 합니다.

  2. CloudFront 웹 배포 생성의 단계에 따라 CloudFront 배포를 만들고 오리진으로 S3 버킷을 추가합니다. 이미 배포가 있다면 버킷을 그 배포의 오리진으로 추가할 수 있습니다.

    작은 정보

    배포 ID를 기록해 둡니다. 이 자습서 후반부에서 함수의 CloudFront 트리거를 추가할 때 드롭다운 목록에서 배포 ID(예: E653W22221KDDL)를 선택해야 합니다.

3단계: 함수 생성

이 단계에서는 Lambda 콘솔에 있는 청사진 템플릿에서 Lambda 함수를 생성합니다. 이 함수는 CloudFront 배포의 보안 헤더를 업데이트하는 코드를 추가합니다.

Lambda 함수를 생성하는 방법
  1. AWS Management Console에 로그인한 다음 AWS Lambda에서 https://console.aws.amazon.com/lambda/ 콘솔을 엽니다.

    중요

    현재 US-East-1(버지니아 북부) AWS 리전(us-east-1)에 있는지 확인합니다. 이 리전에 있어야 Lambda@Edge 함수를 만들 수 있습니다.

  2. 함수 생성을 선택합니다.

  3. 함수 생성 페이지에서 청사진 사용을 선택한 다음 검색 필드에 cloudfront를 입력하여 CloudFront 청사진을 필터링합니다.

    참고

    CloudFront 청사진은 US-East-1(버지니아 북부) 리전(us-east-1)에서만 사용 가능합니다.

  4. 함수에 대한 템플릿으로 HTTP 응답 헤더 수정 청사진을 선택합니다.

  5. 다음과 같이 함수에 대한 정보를 입력합니다.

    • 함수 이름 - 함수의 이름을 입력합니다.

    • 실행 역할 - 함수에 대한 권한 설정 방법을 선택합니다. 권장되는 기본 Lambda@Edge 권한 정책 템플릿을 사용하려면 AWS 정책 템플릿에서 새 역할 생성(Create a new role from AWS policy templates)을 선택합니다.

    • 역할 이름 - 정책 템플릿이 생성하는 역할 이름을 입력합니다.

    • 정책 템플릿 - CloudFront 청사진을 함수의 기본으로 선택했으므로 Lambda는 정책 템플릿 기본 Lambda@Edge 권한을 자동으로 추가합니다. 이 정책 템플릿은 CloudFront가 전 세계 CloudFront 로케이션에서 Lambda 함수를 실행할 수 있도록 하는 실행 역할 권한을 추가합니다. 자세한 내용은 Lambda@Edge에 대한 IAM 권한 및 역할 설정 단원을 참조하십시오.

  6. 페이지 하단에서 함수 생성을 선택합니다.

  7. Lambda@Edge에 배포 창이 나타나면 취소를 선택합니다. (이 자습서에서는 함수를 Lambda@Edge에 배포하기 전에 함수 코드를 수정해야 합니다.)

  8. 아래로 스크롤하여 페이지의 코드 소스 섹션으로 이동합니다.

  9. 템플릿 코드를 오리진에서 반환하는 보안 헤더를 수정하는 함수로 바꿉니다. 예를 들면 다음과 비슷한 코드를 사용할 수 있습니다.

    'use strict'; export const handler = (event, context, callback) => { //Get contents of response const response = event.Records[0].cf.response; const headers = response.headers; //Set new headers headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age= 63072000; includeSubdomains; preload'}]; headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}]; headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}]; headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}]; headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}]; //Return modified response callback(null, response); };
  10. 파일을 선택하여 저장하고 업데이트된 코드를 저장합니다.

  11. 배포를 선택합니다.

다음 섹션으로 이동하여 함수를 실행할 CloudFront 트리거를 추가합니다.

4단계: 함수를 실행할 CloudFront 트리거 추가

이제 보안 헤더를 업데이트할 Lambda 함수가 생성되었으므로, 그 함수를 실행하여 오리진에서 해당 배포에 대해 CloudFront로 보내는 모든 응답에 헤더를 추가할 CloudFront 트리거를 구성해야 합니다.

함수의 CloudFront 트리거를 구성하려면
  1. Lambda 콘솔의 함수 개요 페이지에서 해당 함수에 대한 함수 개요 페이지에서 트리거 추가를 선택합니다.

  2. 트리거 구성에서 CloudFront를 선택합니다.

  3. Lambda@Edge에 배포를 선택합니다.

  4. Lambda@Edge 배포 창에서 CloudFront 트리거 구성 아래에 다음 정보를 입력합니다.

    • 배포 - 함수와 연결할 CloudFront 배포 ID입니다. 드롭다운 목록에서 배포 ID를 선택합니다.

    • 캐시 동작 - 트리거에 사용할 캐시 동작입니다. 이 예제에서는 *로 설정된 값을 그대로 둡니다. 이 값은 해당 배포의 기본 캐시 동작을 의미합니다. 자세한 내용은 캐시 동작 설정 주제에서 배포 설정 참조 단원을 참조하세요.

    • CloudFront 이벤트 - 언제 함수를 실행할지 지정하는 트리거입니다. 여기서는 CloudFront가 오리진에서 응답을 반환할 때마다 보안 헤더 함수가 실행되도록 하겠습니다. 드롭다운 목록에서 오리진 응답을 선택합니다. 자세한 내용은 Lambda@Edge 함수에 대한 트리거 추가 단원을 참조하십시오.

  5. Lambda@Edge로의 배포 확인의 확인란을 선택합니다.

  6. 배포를 선택하여 트리거를 추가하고 함수를 전 세계 AWS 위치에 복제합니다.

  7. 함수가 복제될 때까지 기다립니다. 일반적으로 몇 분 정도 걸립니다.

    CloudFront 콘솔로 이동하여 해당 배포를 보고 복제가 완료되었는지 확인할 수 있습니다. 배포 상태가 배포 중에서 날짜 및 시간으로 변경될 때까지 기다립니다. 이는 함수가 복제되었음을 의미합니다. 함수가 작동하는지 확인하려면 다음 단원의 단계를 따릅니다.

5단계: 함수 실행 확인

Lambda 함수를 만들고 CloudFront 배포에 대해 이를 실행하는 트리거를 구성했으니 이제 이 함수가 원하는 결과를 달성하는지 확인해야 합니다. 이 예제에서는 CloudFront가 반환하는 HTTP 헤더를 확인하여 보안 헤더가 추가되었는지 알아봅니다.

Lambda@Edge 함수가 보안 헤더를 추가하는지 확인하려면
  1. 브라우저에서 S3 버킷에 있는 파일의 URL을 입력합니다. 예를 들면 https://d111111abcdef8.cloudfront.net/image.jpg와 비슷한 URL을 사용할 수 있습니다.

    파일 URL에 사용할 CloudFront 도메인 이름에 대한 자세한 내용은 CloudFront에서 파일에 대한 URL 형식 사용자 지정 단원을 참조하세요.

  2. 브라우저에서 웹 개발자 도구 모음을 엽니다. 예를 들어 Chrome 브라우저 창에서는 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 연 다음 Inspect(검사)를 선택합니다.

  3. 네트워크 탭을 선택합니다.

  4. 페이지를 새로 고쳐 이미지를 확인한 다음 왼쪽 창에서 HTTP 요청을 선택합니다. HTTP 헤더가 별도의 창에 표시됩니다.

  5. HTTP 헤더 목록을 살펴보면서 원하는 보안 헤더가 목록에 포함되어 있는지 확인합니다. 예를 들어 다음 스크린샷에 표시된 것과 비슷한 헤더가 보일 것입니다.

    원하는 보안 헤더가 강조 표시된 HTTP 헤더 목록.

추가한 보안 헤더가 헤더 목록에 있으면 완료된 것입니다. 첫 번째 Lambda@Edge 함수가 생성되었습니다. CloudFront에서 오류를 반환하거나 다른 문제가 있는 경우에는 계속해서 다음 단계로 넘어가 문제를 해결하세요.

6단계: 문제 해결

CloudFront가 오류를 반환하거나 원하는 보안 헤더를 추가하지 않는 경우, CloudWatch Logs를 조사하여 함수의 실행 상태를 확인할 수 있습니다. 함수를 실행한 위치와 가장 가까운 AWS 위치에 저장된 로그를 사용해야 합니다.

예를 들어, 런던에서 파일을 볼 때는 CloudWatch 콘솔에서 리전을 유럽(런던)으로 변경해야 합니다.

Lambda@Edge 함수에 대한 CloudWatch 로그를 검사하려면
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 리전을 브라우저에서 파일을 볼 때 표시되는 위치로 변경합니다. 이는 함수가 실행되고 있는 리전입니다.

  3. 왼쪽 창에서 로그를 선택하여 해당 배포의 로그를 봅니다.

자세한 내용은 Amazon CloudWatch를 사용한 CloudFront 지표 모니터링 단원을 참조하십시오.

7단계: 예제 리소스 정리

이 자습서에 사용할 용도로만 Amazon S3 버킷과 CloudFront 배포를 만들었다면 할당한 AWS 리소스를 삭제하여 더 이상 요금이 발생하지 않도록 하세요. AWS 리소스를 삭제한 뒤에는 추가한 콘텐츠를 이용할 수 없게 됩니다.

작업

S3 버킷 삭제

Amazon S3 버킷을 삭제하기 전에 버킷에 대한 로깅이 비활성화되어 있는지 확인하세요. 그렇지 않으면 삭제해도 AWS이(가) 해당 버킷에 계속 로그를 기록합니다.

버킷에 대한 로깅 사용 중지
  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷을 선택한 다음, 속성를 선택합니다.

  3. 속성에서 로깅을 선택합니다.

  4. 사용(Enabled) 확인란의 선택을 취소합니다.

  5. 저장을 선택합니다.

이제 버킷을 삭제할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service Console 사용 설명서 버킷 삭제를 참조하십시오.

Lambda 함수 삭제

Lambda 함수 연결 및 선택적으로 함수 자체를 삭제하는 지침은 Lambda@Edge 함수 및 복제본 삭제 단원을 참조합니다.

CloudFront 배포 삭제

CloudFront 배포를 삭제하기 전에 반드시 배포를 비활성화해야 합니다. 비활성화된 배포가 작동하지 않아 요금이 발생하지 않습니다. 언제든지 비활성화된 배포를 활성화할 수 있습니다. 비활성화된 배포를 삭제한 뒤에는 사용할 수 없습니다.

CloudFront 배포를 사용하지 않도록 설정하고 삭제하려면
  1. 에서 CloudFront 콘솔을 엽니다https://console.aws.amazon.com/cloudfront/v4/home

  2. 사용 중지하려는 배포를 선택한 후 사용 중지를 선택합니다.

  3. 확인 메시지가 표시되면 예, 사용 중지를 선택합니다.

  4. 사용 중지된 배포를 선택한 후 삭제를 선택합니다.

  5. 확인 메시지가 나타나면 예, 삭제합니다를 선택합니다.

관련 정보

Lambda@Edge 함수의 작동 방식에 대한 기본적인 내용을 배웠습니다. 이제 다음 자료를 읽고 자세히 알아보십시오.