Classic/VPC 환경에서 이용 가능합니다.
네이버 클라우드 플랫폼 콘솔에서 CDN 서비스를 신청하는 방법을 설명합니다.
CDN 신청
Global CDN 서비스를 새로 신청하는 방법은 다음과 같습니다.
- 네이버 클라우드 플랫폼 콘솔에서
> Services > Content Delivery > Global CDN 메뉴를 차례대로 클릭해 주십시오. - [CDN 신청] 버튼을 클릭해 주십시오.
- 다음 단계를 차례대로 진행해 주십시오.
1. 서비스 설정
서비스 이름, 프로토콜, 도메인 등 CDN 서비스와 관련된 속성을 설정해 주십시오. 설정하는 항목은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| 서비스 이름 | 서비스를 구별할 고유의 이름 입력
|
| 서비스 프로토콜 | CDN 서비스에서 사용할 프로토콜 설정
|
| 서비스 도메인 | 클라이언트가 접근하는 CDN 도메인 설정
|
| Access Log | CDN에 유입되는 요청 정보 로그를 Object Storage 안에 저장할지 여부 선택
|
| 설명 | 필요 시 CDN에 대한 간단한 메모 입력 |
- 로그 저장 기능 사용 시 Object Storage의 이용 신청 및 버킷 생성이 완료되어 있어야 합니다. 서비스 이용에 대한 자세한 설명은 Object Storage 사용 가이드를 참고해 주십시오.
- 로그 파일은 여러 항목을 포함하며, 각 항목은 공백으로 구분됩니다. 데이터가 없는 경우에는 "-"로 표시됩니다.
- 로그 파일 포맷
client_ip - - [date] "http_method url_stem HTTP/1.1" status_code total_bytes "referrer" "user_agent" "cookie"client_ip: 클라이언트 IP- -: 미사용 값[date]: 요청 일시"http_method url_stem HTTP/1.1": HTTP 요청 메소드, URI, HTTP 버전status_code: 응답 코드total_bytes: 서버가 클라이언트에게 응답한 전체 용량"referrer": 요청 시 referrer 정보"user_agent": 클라이언트의 에이전트 정보"cookie": 요청 시 쿠키 값- <예시>
211.249.40.9 - - [09/Feb/2018:03:50:01 +0000] "GET /nrbjdrlsuogw479257.gcdn.ntruss.com/sample_mv.mp4 HTTP/1.1" 200 20444604 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-"
2. 원본 설정
Object Storage를 Global CDN에 연동하는 경우, 공개되서는 안되는 정보를 Object Storage 버킷에 저장해서는 안됩니다.
콘텐츠 원본의 위치를 지정하고, 원본 서버와 CDN 캐시 서버 간 통신에 관련된 속성을 설정해 주십시오. 설정하는 항목은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| 원본 위치 | CDN 서비스를 이용할 콘텐츠 원본의 위치 지정
|
| 원본 경로(선택) | 실제 콘텐츠 원본이 위치한 상세 디렉터리 입력. 원본 위치 전체 경로가 아닌 특정 경로를 사용할 경우에만 추가로 지정.
|
| Forward Host Header | CDN에서 원본 서버로 요청할 때 전달되는 호스트 헤더 설정. 원본 위치가 Object Storage일 경우 Origin Hostname만 설정 가능.
|
| Cache Key Hostname | 콘텐츠의 고유 식별자인 캐시 키 설정. 서비스 특성에 따라 적절하게 선택 시 캐싱 효율 향상.
|
| Gzip Compression | 콘텐츠의 압축 전송 여부 선택
|
| Custom Header (원본요청) | 원본 요청 시 헤더를 추가/변경/삭제하여 요청하도록 설정. 원본에 대한 접근 제어 목적으로 활용 가능.
|
유효 인증 기관(Certificate Authority)
HTTPS 사용 시 'man-in-the-middle(MITM)' 공격을 예방하기 위해 원본 서버의 인증서 유효 여부를 확인합니다. 다음의 Certificate Authority(CA)에서 발급받은 인증서는 유효성이 확인됩니다.
| Certificate Authority |
|---|
| VeriSign Class 4 Public Primary Certification Authority - G3 |
| AddTrust External CA Root |
| Class 2 Primary CA |
| Network Solutions Certificate Authority |
| Entrust Root Certification Authority |
| thawte Primary Root CA |
| DigiCert Assured ID Root CA |
| QuoVadis Root CA 2 G3 |
| GlobalSign Root CA |
| America Online Root Certification Authority 2 |
| QuoVadis Root Certification Authority |
| QuoVadis Root CA 3 |
| SwissSign Silver CA - G2 |
| Certum CA |
| GlobalSign |
| SwissSign Gold CA - G2 |
| SecureTrust CA |
| AffirmTrust Commercial |
| Go Daddy Root Certificate Authority - G2 |
| Entrust Root Certification Authority - G2 |
| Global Chambersign Root |
| thawte Primary Root CA - G3 |
| Starfield Services Root Certificate Authority - G2 |
| Baltimore CyberTrust Root |
| VeriSign Class 3 Public Primary Certification Authority - G5 |
| VeriSign Universal Root Certification Authority |
| GeoTrust Global CA |
| AffirmTrust Premium |
| DigiCert High Assurance EV Root CA |
| QuoVadis Root CA 2 |
| UTN-USERFirst-Hardware |
| Entrust.net Certification Authority (2048) |
| GeoTrust Primary Certification Authority |
| AffirmTrust Networking |
| GeoTrust Primary Certification Authority - G3 |
| DST Root CA X3 |
| COMODO Certification Authority |
| UTN - DATACorp SGC |
| VeriSign Class 3 Public Primary Certification Authority - G3 |
| TC TrustCenter Class 2 CA II |
| Cybertrust Global Root |
| DigiCert Global Root CA |
3. 캐싱 설정
Global CDN의 캐싱 옵션, 캐싱 만료 시간 등 캐싱과 관련 속성을 설정해 주십시오. 설정하는 항목은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| Caching Option | 기본적인 캐시 정책 설정
|
| Force Revalidation of Stale Objects | 원본 서버와 통신이 어려울 경우, 캐싱된 콘텐츠의 제공 여부 선택
|
| Cache expiry | 캐싱된 콘텐츠와 원본을 비교하여 변경 여부를 확인하는 주기 지정
|
| Ignore Query String | 원본 서버에 콘텐츠 요청 시 클라이언트 요청문의 쿼리 문자열을 무시할지 여부 선택. 캐싱 효율을 위해 사용 가능.
|
| Remove Vary Header | 원본에서 Vary 헤더를 응답할 경우 헤더의 삭제 여부 선택. 캐싱 효율을 위해 사용 가능.
|
| Large File Optimization | 대용량 파일을 서비스할 때 캐싱 효율을 위한 최적화 전송 여부 선택
|
4. Viewer 전송 설정
CDN 캐시 서버에서 사용자에게 콘텐츠를 전송할 때 적용할 속성을 설정해 주십시오. 설정하는 항목은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| Gzip Compression | 클라이언트에게 콘텐츠 전송 시 압축 전송 여부 선택
|
| Referrer Domain | 특정 도메인 레퍼러가 포함된 요청만 응답하도록 설정. 접근 제어 목적으로 활용.
|
| Security Token | 토큰 인증으로 허용된 요청만 응답하도록 설정
|
| Custom Header (사용자 응답) | 응답 시 헤더를 추가/변경/삭제하여 응답하도록 설정
|
인증 토큰 생성
Security Token 사용 시 다음의 내용을 참고하여 인증 토큰을 생성해 주십시오.
- 토큰은 언어별로 제공되는 SDK를 통해 생성할 수 있습니다.
- Python: https://github.com/akamai/EdgeAuth-Token-Python
- Java: https://github.com/akamai/EdgeAuth-Token-Java
- Ruby: https://github.com/akamai/EdgeAuth-Token-Ruby
- NodeJS: https://github.com/akamai/EdgeAuth-Token-Node
- Golang: https://github.com/mobilerider/EdgeAuth-Token-Golang
- C#: https://github.com/BookBeat/EdgeAuth-Token-CSharp
- 토큰 생성에 필요한 파라미터는 다음과 같습니다.
- 토큰명: 'token'으로 일괄 적용
- Start(st)/End times(exp): 토큰이 유효한 시작/종료 시간
- Key: Security Token 설정 시 자동으로 발급되어 인증암호로 표시되는 값
- ACL(Acess Control List): 토큰으로 접근을 허용할 대상 URI. 와일드카드(*)를 활용해 특정 경로 단위로 설정 가능.
- <예시>
- Java로 인증 토큰 생성
- 토큰 생성 샘플 코드
package com.akamai.edgeauth; public class ExampleEdgeAuth { public static void main(String[] args) { String hostname = "example.cdn.ntruss.com"; // 서비스 도메인명 String ET_ENCRYPTION_KEY = "b2b1"; // 토큰을 생성하기 위한 key String tokenName = "token"; // 토큰명은 'token' 고정 long duration = 3600L; // 3600 seconds = 1 hour try { EdgeAuth ea = new EdgeAuthBuilder() .key(ET_ENCRYPTION_KEY) .startTime(EdgeAuth.NOW) .windowSeconds(duration) .tokenName(tokenName) .escapeEarly(false) .build(); String acl = "/sample.pdf*"; //*/ String file_url = "/sample.pdf"; String token = ea.generateACLToken(acl); String url = String.format("http://%s%s?%s=%s", hostname, file_url, tokenName, token); System.out.println(url); } catch (EdgeAuthException e) { e.printStackTrace(); } } }- 코드 실행 후 생성된 요청 URL
http://example.cdn.ntruss.com/sample.pdf?token=st=1592202370~exp=1592205970~acl=/sample.pdf*~hmac=d422a548ae769bbaddc1d27f03fe6e096a4ba492928f3eb9c09824f93d78f507 - Python으로 인증 토큰 생성
- 토큰 생성 샘플 코드
$ python cms_edgeauth.py -k b2b1 -n token -s now -w 3600 -a /sample.pdf* 예시와 같이 입력어 입력 => 다음과 같은 결과 출력 token=st=1592204787~exp=1592208387~acl=/sample.pdf*~hmac=79872098f16596c8c40ebab649ae2aac8cce3e3bece204b641c99b6cfac42779- 코드 실행 후 생성된 요청 URL
http://example.cdn.ntruss.com/sample.pdf?token=st=1592204787~exp=1592208387~acl=/sample.pdf*~hmac=79872098f16596c8c40ebab649ae2aac8cce3e3bece204b641c99b6cfac42779
- Java로 인증 토큰 생성
사용자의 토큰 생성 서버의 시간이 CDN 서버의 시간보다 2~4초 빠르면, CDN 서버에서 토큰 파라미터 중 start_time 값을 'too early'로 인식해 인증 실패가 발생할 수 있습니다. 이를 방지하기 위해, start_time 값을 현재보다 10초 빠르게 설정하고, end_time 값을 10초 늦게 설정해 주십시오. 토큰을 생성하는 웹 서버의 시간을 NTP로 정확하게 동기화해야 합니다.
5. 확인
설정 내용을 확인한 후 화면 하단의 [CDN 신청] 버튼을 클릭해 주십시오.
- 신청한 CDN이 목록에 추가되며 신청중 상태로 표시됩니다.
- CDN이 글로벌 거점에 모두 구성되기까지 약 2시간 이상이 소요되며, 구성이 완료되면 운영중 상태로 변경됩니다.
CDN 사용을 위한 고객 DNS 설정
CDN 신청 시 서비스 도메인을 고객이 보유한 별도의 도메인으로 설정했다면, CDN 서비스 신청 후에 표시되는 CDN 서비스 도메인을 운영 중인 DNS에 연결해야 정상적으로 서비스를 이용할 수 있습니다.
운영 중인 DNS 시스템 또는 호스팅 업체에서 CNAME 레코드를 이용해 CDN 서비스 도메인을 등록해 주십시오.
서버에서 dig 또는 nslookup 명령어를 통해 CNAME 레코드가 정상적으로 설정되었는지 확인할 수 있습니다.
- <예시> 고객 도메인이 'sample.example.com', CDN 서비스 도메인이 'example.gcdn.ntruss.com'인 경우
sample.navercdn.com 600 IN CNAME example.gcdn.ntruss.com.