세션 차단 가이드
워터마크가 검출된 경우 해당 세션을 차단하여 해당 세션을 차단하는 기능을 적용할 수 있습니다. 이 가이드는 AWS SNS, WAF, Lambda를 활용한 세션 차단 시스템 구성 방법을 안내합니다.
sequenceDiagram participant U as 최종 사용자 participant C as 클라이언트 participant DR as 도브러너 클라우드 box 클라이언트 인프라 participant SNS as AWS SNS participant Lambda as AWS Lambda participant WAF as AWS WAF participant CF as CloudFront end C->>DR: 유출 의심 영상으로 워터마크 검출 요청 Note over DR: 워터마크 분석 및 검출 처리 DR->>DR: 워터마크 페이로드 검출 성공 DR->>C: 검출된 토큰 정보 반환 DR->>SNS: 세션 차단 메시지 발행 Note right of SNS: {"site_id": "xxx", "revoke_token": "token"} SNS->>Lambda: 메시지 트리거 Lambda->>Lambda: 메시지 파싱 및 검증 Note right of Lambda: waf-uri-contains-{token} 규칙 생성 Lambda->>WAF: WAF 규칙 생성/업데이트 alt 차단된 토큰으로 요청 Note over U,DR: ❌ 해당 토큰으로 접근하는 모든 요청 차단 U->>WAF: 차단된 토큰으로 콘텐츠 요청 WAF->>U: 접근 거부 (403 Forbidden) else 정상 토큰으로 요청 U->>WAF: 정상 토큰으로 콘텐츠 요청 WAF->>CF: 요청 통과 CF->>U: 콘텐츠 제공 end
세션 차단 전제 조건
Section titled “세션 차단 전제 조건”세션 차단 기능을 사용하기 위해서는 다음 조건들이 미리 설정되어야 합니다:
-
Session URL 또는 워터마크 토큰 발급 시 설정
- Session URL 발급 시 또는 워터마크 토큰 생성 시
revoke_flag
를true
로 설정해야 합니다. - 이 플래그가 활성화되어야만 세션 차단 기능이 정상적으로 작동합니다.
- Session URL 발급 시 또는 워터마크 토큰 생성 시
-
CloudFront Embedder 버전 요구사항
- CloudFront Embedder는
2.9.0
버전 이상을 사용해야 합니다. - 이전 버전에서는 세션 차단 기능이 지원되지 않습니다.
- CloudFront Embedder는
-
인프라 설정 완료
- 아래 가이드에 따라 사용자 AWS 인프라에 세션 차단 설정이 완료되어야 합니다.
- AWS SNS, WAF, Lambda 함수가 모두 올바르게 구성되고 연동되어야 합니다.
위 조건들이 모두 만족된 후에야 워터마크 검출 시 자동 세션 차단이 가능합니다.
AWS 인프라에 세션 차단 설정하기
Section titled “AWS 인프라에 세션 차단 설정하기”1. AWS SNS Notification 생성 및 등록
Section titled “1. AWS SNS Notification 생성 및 등록”AWS SNS Topic 생성
Section titled “AWS SNS Topic 생성”-
AWS Management Console에 로그인
- AWS 계정으로 로그인한 후 서비스 목록에서 SNS를 검색하여 선택합니다.
-
Region 선택
- 우상단의 리전 드롭다운에서 원하는 리전을 선택합니다.
- 리전은 제한이 없으므로 가장 가까운 리전이나 선호하는 리전을 선택하면 됩니다.
- 단, 이후 생성할 Lambda 함수와 동일한 리전으로 설정해야 합니다.
-
SNS Topic 생성
- SNS 대시보드에서
Create topic
버튼을 클릭합니다. - Type은
Standard
유형을 선택합니다. - Topic 이름을 입력합니다. (예:
doverunner-watermark-detection
)
- SNS 대시보드에서
-
Access policy 섹션으로 이동
- Topic 생성 화면에서
Access policy
섹션을 찾습니다.
- Topic 생성 화면에서
-
Publishers 권한 설정
Choose method
에서Basic
을 선택합니다.Publishers
항목에서Everyone
을 선택합니다.- 이는 DoveRunner 서비스가 SNS Topic에 메시지를 발행할 수 있도록 허용합니다.
-
Topic 생성 완료
Create topic
버튼을 클릭하여 Topic을 생성합니다.- 생성된 Topic의 ARN을 복사해둡니다.
-
AWS Credential 준비
- AWS SNS에 접근할 수 있는 IAM 사용자의 Access Key와 Secret Key가 필요합니다.
- IAM 사용자에게는 최소한
SNS:Publish
권한이 있어야 합니다.
-
DoveRunner Console을 통한 AWS SNS 등록
- DoveRunner Console에 로그인합니다. (DoveRunner API를 통해서도 등록 가능합니다.)
콘텐츠 보안
→포렌식 워터마킹
→설정
→알림 설정
→등록
으로 이동합니다.
-
SNS 정보 입력
- 알림 이름: 구분하기 쉬운 이름을 입력합니다.
- AWS ARN: 앞서 생성한 SNS Topic의 ARN을 입력합니다.
- AWS Access Key: IAM 사용자의 Access Key를 입력합니다.
- AWS Secret Key: IAM 사용자의 Secret Key를 입력합니다.
- ‘저장’ 버튼을 클릭하여 SNS 정보를 등록합니다.
2. AWS WAF 생성 및 CloudFront 적용
Section titled “2. AWS WAF 생성 및 CloudFront 적용”AWS WAF 생성 전 준비사항
Section titled “AWS WAF 생성 전 준비사항”-
CloudFront 배포 확인
- AWS WAF를 적용할 CloudFront 배포가 미리 생성되어 있어야 합니다.
- CloudFront는 글로벌 서비스이므로, AWS WAF도 Global (us-east-1) 리전에서만 생성 가능합니다.
-
필요한 권한 확인
- WAF 생성 및 CloudFront 연동을 위해 다음 권한이 필요합니다:
wafv2:CreateWebACL
wafv2:UpdateWebACL
cloudfront:UpdateDistribution
cloudfront:GetDistribution
- WAF 생성 및 CloudFront 연동을 위해 다음 권한이 필요합니다:
AWS WAF 생성 가이드
Section titled “AWS WAF 생성 가이드”-
AWS WAF 콘솔 접속
- AWS Management Console에서 ‘WAF & Shield’ 서비스를 검색하여 이동합니다.
- 좌측 메뉴에서
Web ACLs
를 선택합니다.
-
Web ACL 생성
Create web ACL
버튼을 클릭합니다.Web ACL details
의Resource type
에서Global resources
를 선택합니다.- Web ACL 이름을 입력합니다. (예:
DoveRunner-Session-Revoke-ACL
)
-
CloudFront 배포 연결
Associated AWS resources
섹션에서Add AWS resources
버튼을 클릭합니다.- WAF를 적용할 CloudFront 배포를 선택합니다.
Add
버튼을 클릭하여 연결합니다.
-
기본 설정으로 Web ACL 생성
Add rules and rule groups
단계에서 아무것도 추가하지 않고Next
를 클릭합니다.Set rule priority
단계도 기본 설정으로Next
를 클릭합니다.Configure metrics
단계도 기본 설정으로Next
를 클릭합니다.Review and create
단계에서 설정을 검토한 후Create web ACL
을 클릭합니다.
-
연동 확인
- Web ACL 생성이 완료되면, CloudFront 콘솔로 돌아가서 해당 배포의
Security
탭을 확인합니다. Security - Web Application Firewall (WAF)
에 방금 생성한 Web ACL이 연결되어 있는지 확인합니다.
- Web ACL 생성이 완료되면, CloudFront 콘솔로 돌아가서 해당 배포의
-
WebACL 정보 저장
- 연동을 확인했다면, ‘WAF & Shield’ 서비스로 다시 이동하여,
Web ACLs
로 이동합니다. - Region을
Global
로 설정한 후, 생성된 WebACL의Name
과ID
를 복사하여 저장합니다. - 이 정보는 Lambda 함수의 설정 파일에서 사용됩니다.
- 연동을 확인했다면, ‘WAF & Shield’ 서비스로 다시 이동하여,
3. AWS Lambda Function 생성
Section titled “3. AWS Lambda Function 생성”Lambda IAM 권한과 실행 역할 생성
Section titled “Lambda IAM 권한과 실행 역할 생성”Lambda@Edge를 구성하기 위해서는 우선 해당 기능에 필요한 IAM 권한과 실행 역할을 생성해야 합니다.
-
Lambda Policy 생성
- AWS Management Console에서 IAM 서비스로 이동합니다.
- 좌측 메뉴에서 정책(Policies) 를 선택한 후, 정책 생성(Create policy) 버튼을 클릭합니다.
- JSON 탭을 선택하고 아래 정책 내용을 복사하여 붙여넣습니다.
{"Statement": [{"Action": ["wafv2:GetWebACL","wafv2:UpdateWebACL"],"Effect": "Allow","Resource": "*"},{"Action": ["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],"Effect": "Allow","Resource": "arn:aws:logs:*:*:*"}],"Version": "2012-10-17"}
-
Trust Relationship 설정
- 생성한 role의
Trust Relationship
탭에 아래 역할을 추가합니다.{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": ["lambda.amazonaws.com","edgelambda.amazonaws.com"]},"Action": "sts:AssumeRole"}]}
- 생성한 role의
Lambda 함수 생성
Section titled “Lambda 함수 생성”설정에 필요한 람다 파일은 샘플 다운로드 페이지에서 다운로드 받을 수 있습니다.
-
Lambda 함수 생성 시작
- Lambda 대시보드에서
Create function
버튼을 클릭합니다. - 이전에 생성한 SNS Topic과 동일한 리전으로 생성해야 합니다.
Author from scratch
옵션을 선택합니다.
- Lambda 대시보드에서
-
기본 정보 입력
- Function name: 이름을 입력합니다. (예:
DoveRunner-Session-Revoke-Function
) - Runtime: Node.js 22.x 또는 최신 버전을 선택합니다.
- Architecture: x86_64를 선택합니다.
- Function name: 이름을 입력합니다. (예:
-
실행 역할 설정
Change default execution role
을 클릭합니다.Use an existing role
를 선택합니다.- 이전 단계에서 생성한 IAM 실행 역할을 적용합니다.
-
함수 생성 완료
Create function
버튼을 클릭하여 함수를 생성합니다.- 생성이 완료되면 함수 상세 페이지로 이동합니다.
SNS 트리거 추가 및 소스 코드 업로드
Section titled “SNS 트리거 추가 및 소스 코드 업로드”-
트리거 추가
- Function overview 섹션에서
+ Add trigger
버튼을 클릭합니다. - 트리거 소스로
SNS
를 선택합니다.
- Function overview 섹션에서
-
SNS Topic 선택
SNS topic
드롭다운에서 앞서 생성한 SNS Topic을 선택합니다.Add
버튼을 클릭하여 트리거를 추가합니다.
-
코드 업로드 준비
- Lambda 함수 상세 페이지에서
Code
탭을 클릭합니다. Upload from
드롭다운에서.zip file
을 선택합니다.
- Lambda 함수 상세 페이지에서
-
ZIP 파일 업로드
- 제공된
lambda-wm-revoke-token-v1.0.0.zip
파일을 업로드합니다. - 이 ZIP 파일에는 다음 파일들이 포함되어 있습니다:
index.js
: 메인 Lambda 핸들러 함수config.js
: 설정 파일 (수정 필요)constants.js
: 상수 정의 파일package.json
: 의존성 정보
- 제공된
-
업로드 완료
- ZIP 파일을 선택하고
Save
버튼을 클릭합니다. - 업로드가 완료되면 코드 에디터에서 파일들을 확인할 수 있습니다.
- ZIP 파일을 선택하고
3. 설정 파일
Section titled “3. 설정 파일”config.js
설정 파일 수정
Section titled “config.js 설정 파일 수정”-
config.js 파일 수정
- 코드 에디터에서
config.js
파일을 열어 다음 내용을 수정합니다:{"site_id": "{Your DoveRunner Site ID}","account_id": "{Your DoveRunner Account ID or Email}","access_key": "{Your DoveRunner Access Key}","aws_waf_web_acl_id": "{Your AWS WAF WebAcl ID}","aws_waf_web_acl_name": "{Your AWS WAF WebAcl Name}"}
- 코드 에디터에서
-
설정 저장 및 배포
- 모든 설정 파일 수정이 완료되면
Deploy
버튼을 클릭합니다. - 배포가 완료되면 함수가 새로운 설정으로 실행됩니다.
- 모든 설정 파일 수정이 완료되면
4. Lambda 및 SNS, WAF 연동 테스트
Section titled “4. Lambda 및 SNS, WAF 연동 테스트”AWS SNS에서 직접 Message Publish를 통한 테스트
Section titled “AWS SNS에서 직접 Message Publish를 통한 테스트”-
SNS 콘솔로 이동
- AWS Management Console에서 SNS 서비스로 이동합니다.
- 앞서 생성한 SNS Topic을 선택합니다.
-
메시지 발행 준비
- Topic 상세 페이지에서
Publish message
버튼을 클릭합니다. - Subject는 선택사항이므로 비워둬도 됩니다.
- Topic 상세 페이지에서
-
Message Body 작성
- Message format은
JSON
을 선택합니다. - Message body에 다음과 같은 테스트 메시지를 입력합니다:
{"site_id": "{Your DoveRunner Site ID}","revoke_token": "test-token"}
- Message format은
-
메시지 발행
Publish message
버튼을 클릭하여 메시지를 발행합니다.- 성공적으로 발행되면 Lambda 함수가 자동으로 트리거됩니다.
연동 확인 방법
Section titled “연동 확인 방법”-
CloudWatch Logs를 통한 Lambda 실행 로그 확인
- AWS Management Console에서 CloudWatch 서비스로 이동합니다.
- 좌측 메뉴에서
Logs
→Log groups
를 선택합니다. /aws/lambda/[Lambda함수이름]
형태의 Log group을 찾아서 클릭합니다.- 가장 최근 Log stream을 선택하여 실행 로그를 확인합니다.
- 정상적으로 실행되었다면 다음과 같은 로그를 확인할 수 있습니다:
- SNS 메시지 수신 로그
- WAF 규칙 업데이트 요청 로그
- 성공/실패 결과 로그
-
AWS WAF에서 규칙 생성 확인
- AWS Management Console에서
WAF & Shield
서비스로 이동합니다. Web ACLs
를 선택 및 Global Region 으로 변경 후, 생성한 Web ACL을 클릭합니다.Rules
탭에서 새로운 규칙이 생성되었는지 확인합니다.- 규칙 이름은 일반적으로
waf-uri-contains-{test-token}
형태로 생성됩니다. - 규칙의 Action이
Block
으로 설정되어 있는지 확인합니다.
- AWS Management Console에서
Lambda 함수가 실행되지 않는 경우
Section titled “Lambda 함수가 실행되지 않는 경우”- SNS 트리거가 올바르게 설정되었는지 확인합니다.
- Lambda 함수의 실행 역할에 필요한 권한이 있는지 확인합니다.
- SNS Topic과 Lambda 함수가 동일한 리전에 있는지 확인합니다.
WAF 규칙이 생성되지 않는 경우
Section titled “WAF 규칙이 생성되지 않는 경우”- CloudWatch Logs에서 에러 메시지를 확인합니다.
- Lambda 실행 역할에
wafv2:UpdateWebACL
권한이 있는지 확인합니다. config.js
파일의 WAF 설정 정보가 올바른지 확인합니다.
세션 차단이 작동하지 않는 경우
Section titled “세션 차단이 작동하지 않는 경우”- WAF 규칙이 올바르게 생성되었는지 확인합니다.
- CloudFront 배포가 WAF와 연결되어 있는지 확인합니다.
- 실제 발행된 토큰이 WAF 규칙과 일치하는지 확인합니다.