Skip to main content

Cloudfront 통합 가이드

NetFUNNEL Cloudfront 에이전트는 AWS Lambda@Edge에서 NetFUNNEL 서버와 통신하는 전용 클라이언트입니다.


1. IAM 설정

1.1 IAM 역할 생성

  1. AWS의 IAM 콘솔로 이동하세요.

  2. 역할을 클릭한 다음 역할 생성을 클릭합니다.

  3. 신뢰할 수 있는 엔터티로 AWS 서비스를 선택하고 사용 사례로 Lambda를 선택합니다.

  4. 다음: 권한을 클릭하세요.

1.2 Trust Entity 설정

  1. 역할을 생성한 후 Trust Entity 탭으로 이동합니다.

  2. Trust Entity를 편집하고 아래의 JSON을 붙여넣습니다.

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

1.3 정책 첨부

info

이 정책을 사용하면 Lambda 함수가 CloudWatch 로그를 생성하고 쓸 수 있습니다.

  1. 역할의 권한 탭으로 이동하세요.

  2. 권한 추가를 클릭한 다음 인라인 정책 만들기를 클릭합니다.

  3. JSON 탭에 아래의 정책을 붙여넣습니다.

CloudWatch Logs Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
"Resource": "*"
}
]
}

2. Lambda 함수 생성

warning

Lambda 함수는 us-east-1(N. Virginia) 리전에서 만들어야 합니다. 이는 AWS의 요구 사항으로, 이 리전은 함수를 전 세계적으로 복제하기 위한 중앙 위치 역할을 하기 때문입니다.

2.1 Lambda 함수 생성

  1. us-east-1 지역의 Lambda 콘솔로 이동합니다.

  2. 함수 생성을 클릭하세요.

  3. 처음부터 작성을 선택하세요.

  4. 함수에 이름을 지정합니다. (예: "netfunnel-agent")

  5. 런타임으로 Node.js를 선택하세요.

  6. Step 1에서 위에서 생성한 IAM 역할을 선택하세요.

  7. 함수 생성을 클릭하세요.

2.2 Lambda 함수 설정

  1. 에이전트 파일을 다운로드합니다.

    Download

  2. 코드 탭에서 코드 소스에 netfunnel-cloudfront-agent-latest.js 파일을 넣어주세요.

  3. index.mjs 파일을 열고 아래 코드를 참고해 작성해주세요.

  4. package.json 파일을 생성하고 아래 코드를 붙여넣습니다.

  5. 작성을 완료하면 Deploy 버튼을 눌러주세요.

  6. 버전 탭으로 가서 새 버전 발행을 눌러주세요.

tip

CLIENT_ID는 NetFUNNEL 콘솔에서 확인하세요.

index.mjs
import handleEvent from './netfunnel-cloudfront-agent-latest.js';

const config = {
clientID: getClientId(), // src/utils/cookieHandler.js에서 가져온 함수
};

export const handler = async event => {
return await handleEvent(event, config);
};
package.json
{
"name": "cloudfront-agent",
"type": "module",
"dependencies": {}
}

3. Cloudfront 설정

3.1 Cloudfront에 Lambda@Edge 연결

  1. Lambda@Edge를 적용할 Cloudfront ID를 선택합니다.

  2. 동작 탭에서 항목을 선택하고 편집을 누릅니다.

  3. 제일 하단의 함수 연결에서 뷰어 요청과 뷰어 응답에 위에서 생성한 람다 함수의 ARN을 입력하세요.

  4. 변경 사항 저장을 클릭합니다.

warning

뒤에 버전명을 꼭 넣어주세요. (버전이 1일 경우 :1을 추가하면 됩니다.)

3.2 Cloudfront 무효화

  1. 무효화 탭으로 이동하여 무효화 생성을 클릭합니다.

  2. 객체 경로에 /*을 입력하고 무효화 생성을 클릭합니다.

  3. 무효화가 완료되면 Cloudfront에 Lambda@Edge의 연결이 적용됩니다.


4. 부가 기능

4.1 Good Bot 예외 처리

Lambda 설정을 통해 특정 User-Agent 값이 포함되어 있을 경우 에이전트 동작으로부터 예외 처리할 수 있습니다.

4.1.1 Lambda 설정

  1. NetFUNNEL 에이전트를 적용한 Lambda 함수를 엽니다.

  2. index.mjs 파일을 엽니다.

  3. 아래 코드를 참고하여 config 객체의 goodBots에 추가하고자 하는 굿 봇의 User-Agent 값을 배열로 넣습니다.

  4. 작성을 완료하면 Deploy 버튼을 눌러주세요.

  5. 버전 탭으로 가서 새 버전 발행을 눌러 버전을 업데이트해주세요.

tip

Google, Microsoft, Yahoo, Apple, Facebook 봇을 예외 처리한 예시입니다.

index.mjs
// Added to top of lamda function
const NF_CLIENT_ID = '{CLIENT_ID}';

4.1.2 Cloudfront 설정 업데이트

  1. Lambda@Edge를 적용한 Cloudfront ID를 선택합니다.

  2. 동작 탭에서 항목을 선택하고 편집을 누릅니다.

  3. 하단의 함수 연결에서 뷰어 요청과 뷰어 응답을 새 버전으로 수정해주세요.

  4. 변경 사항 저장을 클릭합니다.

4.1.3 Cloudfront 무효화

  1. 무효화 탭으로 이동하여 무효화 생성을 클릭합니다.

  2. 객체 경로에 /*을 입력하고 무효화 생성을 클릭합니다.

  3. 무효화가 완료되면 수정한 Lambda@Edge가 적용됩니다.

4.2 진입 키 자동 반납 처리

NetFUNNEL Cloudfront 에이전트는 진입 후 넷퍼넬 키를 자동으로 반납하여 다음 대기자가 진입할 수 있도록 처리하고 있습니다. 만약 넷퍼넬 키를 바로 반납하지 않고 세그먼트에서 설정한 타임아웃 시간에 넷퍼넬 키를 반납하고 싶은 경우에 사용할 수 있는 기능입니다.

4.3 대기실 도메인 변경

NetFUNNEL 대기실 페이지의 도메인은 agent-lib.stclab.com입니다. 해당 도메인을 서비스 중인 도메인에 맞게 변경하려면 NetFUNNEL 서비스팀을 통해 원하는 도메인을 알려주시고, Lambda 설정을 변경해야 합니다.

4.3.1 Lambda 설정

  1. viewer-request에 적용한 Lambda 함수를 엽니다.

  2. index.mjs 파일을 엽니다.

  3. 아래 config 객체의 vwrPageDomain에 변경하고자 하는 대기실의 주소를 입력합니다.

  4. 작성을 완료하면 Deploy 버튼을 눌러주세요.

  5. 버전 탭으로 가서 새 버전 발행을 눌러 버전을 업데이트해주세요.

index.mjs
// Added to top of lamda function
const NF_VWR_PAGE_DOMAIN = 'http(s)://{CLIENT_ID}.stclab.com';

4.3.2 Cloudfront 설정 및 무효화

앞서 4.1.2 Cloudfront 설정 업데이트4.1.3 Cloudfront 무효화 과정을 반드시 진행합니다.

4.4 쿠키 도메인 설정

NetFUNNEL 서버에서 발급한 키를 쿠키에 저장할 때 현재 페이지의 도메인을 기준으로 저장합니다. 만약 서로 다른 서브도메인 간에 키를 공유해야할 경우 메인 도메인이 쿠키에 저장되도록 설정합니다.develop.stclab.comstaging.stclab.com와 같이 서브도메인이 서로 다른 페이지에서 쿠키를 공유하도록 .stclab.com으로 설정합니다.

4.4.1 Lambda 설정

  1. viewer-request에 적용한 Lambda 함수를 엽니다.

  2. index.mjs 파일을 엽니다.

  3. 아래 config 객체의 cookieDomain에 .MAIN_DOMAIN 형식으로 입력합니다.

  4. 작성을 완료하면 Deploy 버튼을 눌러주세요.

  5. 버전 탭으로 가서 새 버전 발행을 눌러 버전을 업데이트해주세요.

index.mjs
const config = {
// ...
cookieDomain: '.stclab.com',
};

4.4.2 Cloudfront 설정 및 무효화

앞서 4.1.2 Cloudfront 설정 업데이트4.1.3 Cloudfront 무효화 과정을 반드시 진행합니다.


4. 트리거 규칙 설정

info

대기열 제어 지점은 NetFUNNEL 콘솔의 세그먼트 트리거 규칙을 통해 설정할 수 있습니다. 사용자가 접속한 페이지의 URL과 트리거 규칙을 비교하여 일치하는 경우 대기열이 적용됩니다.

트리거 규칙 설정 방법은 트리거 규칙 설정 가이드를 참고하세요.