CloudFront Embedder 가이드

본 문서에서는 Amazon CloudFront CDN을 사용하는 서비스 사이트를 위해 CloudFront용 워터마크 삽입 모듈을 Lambda@Edge로 적용하는 방법에 대하여 설명합니다.

sequenceDiagram
    participant A as 최종 사용자
    participant B as CloudFront CDN
    A ->> B: 세션 URL 재생 시작 (세그먼트 요청)
    Note right of B: CloudFront Embedder
    B -->> B: 세션 URL에 따른 0/1 세그먼트 조합
    B ->> A: 조합된 세그먼트 전달
    Note right of A: 조홥된 콘텐츠 재생

Lambda@Edge 설정에 필요한 CloudFront Embedder 파일은 샘플 다운로드 페이지에서 다운로드 받을 수 있습니다.

본 문서에 작성된 내용은 향후 AWS 측의 업데이트에 따라 최신 버전의 AWS 콘솔 UI와 맞지 않게 될 수 있습니다. 실제 AWS 콘솔과 상이한 부분이나 잘못된 가이드 문서 링크가 있는 경우, 헬프데스크를 통해 문의해 주시기 바랍니다.

Lambda@Edge 사용 가이드

Amazon CloudFront CDN에서의 Lambda@Edge 사용에 대해 익숙하지 않은 경우, 다음 단계로 진행하기 전에 아래 AWS 온라인 문서를 참고해 사용법을 숙지해 주실 것을 권장합니다.

IAM 권한 및 역할 생성

Lambda@Edge를 구성하기 위해서는 우선 해당 기능에 필요한 IAM 권한과 실행 역할을 생성해야 합니다. AWS 콘솔의 IAM 서비스 화면에서 해당 가이드를 참고해 다음과 같이 권한 및 역할을 생성합니다.

  • lambda:GetFunction, lambda:EnableReplication*, iam:CreateServiceLinkedRole, cloudfront:UpdateDistribution, cloudfront:CreateDistribution 권한을 추가하여 역할을 생성합니다.

권한 추가를 위해서는 우선 대상 서비스(Lambda)를 지정해야 합니다. 또한 lambda:EnableReplication* 권한을 추가하려면 우선 lambda:EnableReplication 권한 추가 후 JSON 코드를 수정해야 합니다.

  • Lambda access log를 cloudwatch logs로 수집하기 위해 logs 관련 권한을 추가합니다.

    {
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ],
        "Resource": "arn:aws:logs:*:*:*"
    }
    
  • 생성한 role의 Trust Relationship 탭에 아래 역할을 추가합니다.

    { 
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": { 
                    "Service": [
                        "lambda.amazonaws.com", 
                        "edgelambda.amazonaws.com" 
                    ] 
                }, 
                "Action": "sts:AssumeRole" 
            } 
        ] 
    }
    

Lambda@Edge 함수 생성

  • AWS 콘솔에서 Lambda 서비스로 이동해 함수 생성 버튼을 클릭합니다.
  • 콘솔 우측 상단의 AWS 리전을 미국 동부(버지니아 북부)로 선택합니다. (Lambda@Edge는 Virginia Region에 생성해야 사용 가능합니다.)

1. 함수 이름 및 Runtime 설정

  • 함수 이름: 임의의 이름으로 입력합니다. (예: fwm-cf-embedder)
  • 런타임: Node.js 12.x 이후 버전을 선택합니다. (12.x, 14.x, 16.x 등) 본 문서 작성 시점의 기본값은 Node.js 16.x입니다.
  • 아키텍처: 기본값인 x86_64를 사용합니다.

2. 실행 역할 설정

  • 기본 실행 역할 변경을 클릭 해 기존 역할 사용 항목을 선택하고, 이전 단계에서 생성한 IAM 역할을 선택합니다.
  • 화면 하단의 함수 생성 버튼을 클릭해 Lambda@Edge 함수를 생성합니다.

3. 샘플 코드 업로드 및 수정

  • 코드 소스 화면의 업로드 버튼을 클릭해 샘플 다운로드 페이지에서 다운받은 CloudFront Embedder zip 파일을 업로드합니다.

  • 업로드된 샘플 코드 내용을 확인하고 아래와 같은 사항을 수정합니다.

아래 안내된 부분 이외의 소스를 수정할 경우, 오류가 발생할 수 있으니 주의하시기 바랍니다.

  • config.json 소스에서 아래 테이블에 해당하는 변수의 값을 설정합니다.

    Name Required Description
    aesKey True PallyCon 콘솔 사이트에서 제공하는 사이트 키 값을 입력합니다.
    type True 전처리된 A/B 버전 세그먼트가 하나의 폴더에 함께 저장된 콘텐츠인 경우는 unlabeled_a_variant를 입력하고, 각각 01 폴더로 나뉘어 패키징된 경우는 directory_prefix를 입력합니다. 최신 버전의 FWM CLI 패키져를 이용하거나 SaaS 패키징 서비스 신규 고객인 경우에는 기본적으로 Unlabeled A Variant 형태로 패키징됩니다. (기본값: unlabeled_a_variant)
    availableInterval True 워터마크 적용을 위해 요청된 URL에는 timestamp 값이 포함되어 있습니다. 본 항목은 해당 timestamp의 유효 기간을 체크하기 위한 값입니다. 0으로 설정할 경우 timestamp 유효 기간을 체크하지 않습니다. (단위: 분)
  • 저장한 후 Action 버튼의 Publish new version을 클릭하여 version을 생성합니다.

  • 생성된 version이 포함된 ARN을 복사해 놓습니다. 우측 상단에 표시됩니다.

    • 예) arn:aws:lambda:us-east-1:{계정넘버}:function:{lambda이름}:{version}

CloudFront 설정

CloudFront는 이미 생성되어 있다는 가정 하에 Lambda@Edge를 적용하는 방법을 가이드 합니다.

Lambda@Edge 적용

AWS console 에 접속하여 CloudFront 메뉴 선택 후 lambda@Edge를 적용시킬 CloudFront를 선택합니다.

1. Behaviors 설정

  • Behaviors 탭을 선택 후 표시된 체크박스에 체크를 한 후에 Edit 버튼을 클릭합니다.

  • Lambda Function Associations 항목을 세팅합니다.

    • EventType : Viewer Request 선택
    • Lambda Function ARN : Lambda@Edge 생성 과정에서 복사해 놓았던 ARN 입력
  • Yes, Edit 버튼을 클릭합니다.

2. 설정 완료

CloudFront의 Status가 InProgress 상태로 변경되며, Lambda@Edge가 적용이 완료되면 Deployed로 상태가 변경이 되고 모든 설정이 완료됩니다.

자세한 Lambda@Edge 관련 내용은 AWS 에서 제공하는 CloudFront 가이드를 참조하시기 바랍니다.

이전