AWS 기술 블로그
AWS MediaTailor SSAI 멀티 CDN 환경의 보안: 토큰 인증, Origin 보안, 서드파티 CDN 제약 대응 – Part2
이 블로그는 2부작 시리즈입니다.
- Part 1: 멀티 CDN 구성과 동적 전환 (CORS, 캐싱 키 포함)
- Part 2: 멀티 CDN 환경의 보안 — 토큰 인증, Origin 보안, 서드파티 CDN 제약 대응 (본 글)
1. 도입
[Part 1]에서는 MediaTailor의 CDN prefix와 Configuration Aliases를 활용한 동적 멀티 CDN 구성, 301 Redirect 트래킹 메커니즘, CORS 처리, 캐싱 키 설정을 다루었습니다.
이번 Part 2에서는 멀티 CDN 환경에서의 보안 심화 주제를 다룹니다. CDN별로 다른 인증 토큰을 세그먼트까지 전달하는 방법(그리고 이를 위해 반드시 선행해야 하는 AWS Support 요청), MediaPackage Origin 접근 제어, 서드파티 CDN의 기능 제약을 CloudFront로 해결하는 패턴을 설명합니다.
2. 토큰 인증: Manifest 쿼리 파라미터 승계와 CDN 세그먼트 pass-through
CDN별 인증 방식
멀티 CDN 환경에서 각 CDN은 서로 다른 인증 방식을 아래의 예시처럼 사용할 수 있습니다.
| CDN | 인증 방식 | 토큰 형태 |
| CloudFront | Signed URL / Signed Cookie | Policy, Signature, Key-Pair-Id 파라미터 |
| 서드파티 CDN A | 자체 토큰 인증 | token=xxx 또는 URL path 기반 |
| 서드파티 CDN B | IP 기반 + 토큰 | auth=xxx&expires=xxx |
동적 CDN 전환 시 세션별로 다른 CDN이 선택되므로, 해당 CDN에 맞는 인증 토큰이 세그먼트 URL에 포함되어야 합니다.
MediaTailor의 파라미터 라우팅 규칙
MediaTailor는 세션 초기화 시 전달된 쿼리 파라미터를 접두사(prefix)에 따라 서로 다른 목적지로 라우팅합니다. (Parameter routing 문서)
| 목적지 | 접두사 | 용도 |
| Origin 서버 | 접두사 없음 | timeshift(start/end), origin 인증 등 origin 고유 기능 |
| ADS(Ad Decision Server) | ads. | 광고 타게팅 파라미터 |
| CDN 라우팅/인증 | manifest. | manifest 및 세그먼트 URL에 승계되는 파라미터 |
CDN 인증 토큰은 manifest. 접두사로 전달합니다. MediaTailor는 접두사를 제거한 뒤 나머지 값을 manifest URL에 승계합니다.
동작 방식 (implicit 세션 초기화, HLS):
- 플레이어가 manifest 요청 시 CDN 인증 토큰을 접두사로 포함합니다.
GET /v1/master/<hash>/<config>/index.m3u8?manifest.cdn_token=xxx
- MediaTailor는 접두사를 제거하고 child manifest URL에 cdn_token=xxx를 승계합니다.
explicit 세션 초기화(POST) 에서는 manifestParams 객체로 전달합니다. ads.용은 adsParams로 분리됩니다.
⚠️ 필수: CDN 세그먼트로의 pass-through는 기본 비활성화
여기서 멀티 CDN 환경의 핵심 함정이 있습니다. MediaTailor는 기본 설정에서 manifest. 파라미터를 manifest와 client-side reporting endpoint에는 붙이지만, CDN 세그먼트 URL에는 붙이지 않습니다. (공식 문서)
즉 기본 상태에서는 아래와 같이 세그먼트 URL에 토큰이 승계되지 않아, 토큰 인증을 사용하는 CDN에서 세그먼트 요청이 거부됩니다.
세그먼트 URL까지 토큰을 승계하려면 AWS Support 케이스(티켓)를 통해 “manifest query parameter pass-through” 기능 활성화를 요청해야 합니다. 이는 콘솔이나 API에서 켤 수 있는 설정이 아니라, 계정/설정 단위로 AWS Support가 활성화해 주는 기능입니다.
활성화 요청 방법:
- AWS Support Center에서 케이스를 생성합니다. (Elemental MediaTailor 서비스 선택)
- 요청 내용에 “manifest query parameter pass-through 활성화”를 명시합니다.
- 대상 PlaybackConfiguration 이름과 리전, AWS 계정 ID를 함께 전달합니다.
활성화 후에는 세그먼트 URL에도 토큰이 승계됩니다.
> 정리: 멀티 CDN + 토큰 인증 구성을 계획한다면, 프로젝트 초기에 이 pass-through 활성화 요청을 먼저 진행해야 합니다. 이 단계를 놓치면 manifest는 정상 재생되지만 세그먼트 다운로드에서 CDN 인증 오류(403 등)가 발생하며, 원인을 찾기 어렵습니다.
> 참고: manifest. 파라미터 승계 동작은 HLS/DASH, implicit/explicit 세션 초기화에 따라 적용 위치가 다릅니다. 프로토콜별 상세는 Protocol-specific behavior 문서를 참고하세요.
3. MediaPackage Origin 보안
멀티 CDN 환경에서 MediaPackage Origin에 대한 접근 제어도 중요합니다. MediaPackage endpoint가 공개되면 누구나 콘텐츠에 접근할 수 있으므로, CloudFront와 MediaTailor만 Origin에 접근할 수 있도록 제한해야 합니다.
MediaPackage v2 + CloudFront OAC (Origin Access Control)
우선 MediaPackage Origin 접근을 CloudFront로 한정시키는 방법을 알아보겠습니다. MediaPackage v2는 CloudFront OAC(Origin Access Control)를 지원합니다. OAC를 설정하면 CloudFront를 통해서만 MediaPackage endpoint에 접근할 수 있으며, 직접 URL 접근은 차단됩니다.
- CloudFront 콘솔에서 Origin 설정 시 Origin access control 선택
- MediaPackage v2 endpoint에 대한 OAC 정책 생성
- MediaPackage v2의 endpoint policy에 CloudFront distribution ARN을 허용
OAC를 설정하면 MediaPackage v2 endpoint의 resource policy에 “해당 CloudFront distribution이 서명한 요청만 허용”하는 조건이 추가되어, 직접 URL 접근이 차단됩니다.
MediaTailor의 Origin 접근 경로
그 다음은 MediaTailor가 MediaPackage Origin에 추가적으로 접근하도록 구성하는 방법입니다. Origin manifest를 가져오는 경로에 따라 두 가지 구성 방식이 가능합니다.
방식 A: CloudFront 경유 (OAC)
MediaTailor는 personalized manifest를 생성하기 위해 Content Origin에서 원본 manifest를 가져옵니다. Origin을 OAC로 잠그면 CloudFront를 통해서만 접근할 수 있으므로, MediaTailor의 Content Origin도 CloudFront를 경유하도록 설정해야 합니다.
VideoContentSourceUrl을 MediaPackage endpoint 직접 URL이 아닌 CloudFront URL로 설정합니다. 이렇게 하면 MediaTailor → CloudFront(OAC) → MediaPackage 경로로 접근하므로, MediaPackage에는 CloudFront OAC만 허용하면 됩니다.
VideoContentSourceUrl: https://d1234567890.cloudfront.net/out/v1/<endpoint-id>
MediaTailor가 가져가는 origin manifest에도 CloudFront 캐싱이 적용되므로 MediaPackage Origin 부하가 줄어들고, 서드파티 CDN도 CloudFront를 Origin으로 사용하는 구성(섹션 4)과 경로가 일관됩니다.
> 참고: MediaPackage v1은 OAC 대신 CDN authorization(공유 시크릿 헤더 + Secrets Manager)으로 Origin을 보호합니다. 이 방식도 CloudFront를 앞단에 두고 헤더를 주입하는 구성을 전제로 합니다. (MediaPackage CDN authorization)
방식 B: MediaTailor SigV4 직접 접근
MediaTailor가 SigV4 서명된 요청으로 MediaPackage v2에 직접 접근하는 방식입니다. CloudFront를 거치지 않으므로 추가 hop이 없고, endpoint policy에서 특정 PlaybackConfiguration ARN까지 scope를 제한할 수 있어 권한을 세밀하게 줄 수 있습니다.
VideoContentSourceUrl: https://<mediapackagev2-endpoint-url>
SigV4는 켜고 끄는 설정이 아닙니다. VideoContentSourceUrl의 도메인이 지원 대상(MediaTailor Channel Assembly, Amazon S3, MediaPackage v2)이면 MediaTailor가 자동으로 서명 헤더를 붙입니다. 단 Origin이 HTTPS여야 하며, HTTP면 서명하지 않습니다. (SigV4 문서)
MediaPackage v2 endpoint policy에 다음을 추가합니다.
여러 PlaybackConfiguration을 운영한다면 AWS:SourceArn 대신 AWS:SourceAccount로 계정 단위 scope를 지정할 수도 있습니다.
두 방식은 배타적이지 않습니다
여기서 중요한 것은 SigV4가 보호하는 범위가 MediaTailor의 manifest 요청뿐이라는 점입니다. 권한도 MediaTailor 설정이 참조하는 multivariant playlist를 읽기 위한 mediapackagev2:GetObject로 한정됩니다. 세그먼트는 MediaTailor가 아니라 플레이어가 CDN에서 직접 받아가므로, 방식 B만 적용하면 세그먼트 경로가 보호되지 않습니다.
따라서 실제 멀티 CDN 환경에서는 MediaTailor의 Origin 접근은 방식 B(SigV4 직접)로, 플레이어 측 세그먼트 전송은 CloudFront(+ 서드파티 CDN)로 구성하고, MediaPackage v2 resource policy에 CloudFront와 MediaTailor를 모두 허용하는 조합이 됩니다.
어느 방식을 선택할까
| 항목 | 방식 A (CloudFront 경유) | 방식 B (SigV4 직접) |
| MediaPackage 정책 | CloudFront OAC 하나만 허용 | MediaTailor용 statement 추가 필요 |
| Origin manifest 캐싱 | CloudFront가 캐싱 → Origin 부하 감소 | 캐싱 없음. MediaTailor가 Origin에 직접 폴링 |
| 권한 scope | distribution 단위 | PlaybackConfiguration 단위로 더 세밀 |
| 경로 hop | MediaTailor → CloudFront → MediaPackage | MediaTailor → MediaPackage |
| 보호 범위 | manifest + 세그먼트 경로 동일 | manifest만. 세그먼트는 별도 구성 필요 |
라이브에서는 MediaTailor가 세션 규모에 비례해 origin manifest를 반복 요청하므로, 방식 A의 캐싱 이점이 작지 않습니다. 반대로 권한을 PlaybackConfiguration 단위까지 좁혀야 하거나 hop을 줄이고 싶다면 방식 B가 맞습니다. 어느 쪽이든 플레이어 세그먼트 경로는 CloudFront(+ 서드파티 CDN)로 두는 것이 섹션 4의 구성과 일관됩니다.
4. 서드파티 CDN 제약 대응: CloudFront를 Origin으로 활용
CloudFront는 behavior별로 콘텐츠/광고 세그먼트를 분리하여 각각 다른 CORS 정책과 Origin을 설정할 수 있습니다. 그러나 서드파티 CDN은 다음과 같은 제약이 있는 경우가 많습니다:
- Behavior 단위의 세밀한 CORS 설정 미지원
- 멀티 Origin 구성이 어렵거나 불가능
- Path 기반 Origin 라우팅 미지원
권장 패턴
| MediaTailor → CloudFront (CORS, behavior별 Origin 라우팅, 토큰 인증)
↓ 서드파티 CDN (단순 캐싱, ISP별 엣지 딜리버리) ↓ 플레이어 |
- CloudFront가 CORS 헤더 처리, manifest/segment behavior 분리, Origin Request Policy, 토큰 인증 등 모든 고급 기능을 담당
- 서드파티 CDN은 CloudFront를 단일 Origin으로 설정하고, ISP별 엣지 캐싱 역할에만 집중
- 서드파티 CDN의 기능 제약에 영향받지 않고 일관된 보안 정책 유지
비용 고려
CloudFront → 서드파티 CDN 구성 시 CloudFront 전송 비용이 추가됩니다. 세그먼트 캐시 히트율을 높여 Origin fetch를 최소화하는 것이 핵심입니다.
5. 결론
멀티 CDN + MediaTailor SSAI 환경의 보안 핵심:
- 토큰 인증: CDN 토큰은 접두사로 전달하여 manifest URL에 승계. 단, 세그먼트 URL까지 승계하려면 AWS Support 케이스로 “manifest query parameter pass-through” 활성화를 반드시 먼저 요청해야 함 (기본 비활성화)
- MediaPackage Origin 보안: CloudFront OAC와 MediaTailor SigV4를 활용해 MediaPackage Origin에는 CloudFront와 MediaTailor만 접근 허용. SigV4는 MediaTailor의 manifest 요청만 보호하므로 세그먼트 경로는 CloudFront OAC로 별도 커버
- 서드파티 CDN 제약: CloudFront를 Origin으로 두고 서드파티 CDN은 캐싱 레이어로 활용
참고 자료
- AWS Elemental MediaTailor – Manifest query parameters (CDN 세그먼트 pass-through는 AWS Support 요청 필요)
- AWS Elemental MediaTailor – Parameter routing (prefix 규칙)
- AWS Elemental MediaTailor – Protocol-specific parameter behavior
- AWS Elemental MediaTailor – CDN Configuration
- Restrict access to MediaPackage v2 origin (CloudFront OAC)
- AWS Elemental MediaPackage – CDN authorization
- Securing AWS Elemental MediaTailor origin interactions with SigV4