콘텐츠로 이동

세션 차단 가이드

워터마크가 검출된 경우 해당 세션을 차단하여 해당 세션을 차단하는 기능을 적용할 수 있습니다. 이 가이드는 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

세션 차단 기능을 사용하기 위해서는 다음 조건들이 미리 설정되어야 합니다:

  • Session URL 또는 워터마크 토큰 발급 시 설정

    • Session URL 발급 시 또는 워터마크 토큰 생성 시 revoke_flagtrue로 설정해야 합니다.
    • 이 플래그가 활성화되어야만 세션 차단 기능이 정상적으로 작동합니다.
  • CloudFront Embedder 버전 요구사항

    • CloudFront Embedder는 2.9.0 버전 이상을 사용해야 합니다.
    • 이전 버전에서는 세션 차단 기능이 지원되지 않습니다.
  • 인프라 설정 완료

    • 아래 가이드에 따라 사용자 AWS 인프라에 세션 차단 설정이 완료되어야 합니다.
    • AWS SNS, WAF, Lambda 함수가 모두 올바르게 구성되고 연동되어야 합니다.

위 조건들이 모두 만족된 후에야 워터마크 검출 시 자동 세션 차단이 가능합니다.

AWS 인프라에 세션 차단 설정하기

Section titled “AWS 인프라에 세션 차단 설정하기”
  1. AWS Management Console에 로그인

    • AWS 계정으로 로그인한 후 서비스 목록에서 SNS를 검색하여 선택합니다.
  2. Region 선택

    • 우상단의 리전 드롭다운에서 원하는 리전을 선택합니다.
    • 리전은 제한이 없으므로 가장 가까운 리전이나 선호하는 리전을 선택하면 됩니다.
    • 단, 이후 생성할 Lambda 함수와 동일한 리전으로 설정해야 합니다.
  3. SNS Topic 생성

    • SNS 대시보드에서 Create topic 버튼을 클릭합니다.
    • Type은 Standard 유형을 선택합니다.
    • Topic 이름을 입력합니다. (예: doverunner-watermark-detection)
  4. Access policy 섹션으로 이동

    • Topic 생성 화면에서 Access policy 섹션을 찾습니다.
  5. Publishers 권한 설정

    • Choose method에서 Basic을 선택합니다.
    • Publishers 항목에서 Everyone을 선택합니다.
    • 이는 DoveRunner 서비스가 SNS Topic에 메시지를 발행할 수 있도록 허용합니다.
  6. Topic 생성 완료

    • Create topic 버튼을 클릭하여 Topic을 생성합니다.
    • 생성된 Topic의 ARN을 복사해둡니다.
  7. AWS Credential 준비

    • AWS SNS에 접근할 수 있는 IAM 사용자의 Access Key와 Secret Key가 필요합니다.
    • IAM 사용자에게는 최소한 SNS:Publish 권한이 있어야 합니다.
  8. DoveRunner Console을 통한 AWS SNS 등록

    • DoveRunner Console에 로그인합니다. (DoveRunner API를 통해서도 등록 가능합니다.)
    • 콘텐츠 보안포렌식 워터마킹설정알림 설정등록으로 이동합니다.
    DoveRunner Console SNS Setting Page
  9. SNS 정보 입력

    • 알림 이름: 구분하기 쉬운 이름을 입력합니다.
    • AWS ARN: 앞서 생성한 SNS Topic의 ARN을 입력합니다.
    • AWS Access Key: IAM 사용자의 Access Key를 입력합니다.
    • AWS Secret Key: IAM 사용자의 Secret Key를 입력합니다.
    • ‘저장’ 버튼을 클릭하여 SNS 정보를 등록합니다.
  • CloudFront 배포 확인

    • AWS WAF를 적용할 CloudFront 배포가 미리 생성되어 있어야 합니다.
    • CloudFront는 글로벌 서비스이므로, AWS WAF도 Global (us-east-1) 리전에서만 생성 가능합니다.
  • 필요한 권한 확인

    • WAF 생성 및 CloudFront 연동을 위해 다음 권한이 필요합니다:
      • wafv2:CreateWebACL
      • wafv2:UpdateWebACL
      • cloudfront:UpdateDistribution
      • cloudfront:GetDistribution
  1. AWS WAF 콘솔 접속

    • AWS Management Console에서 ‘WAF & Shield’ 서비스를 검색하여 이동합니다.
    • 좌측 메뉴에서 Web ACLs를 선택합니다.
  2. Web ACL 생성

    • Create web ACL 버튼을 클릭합니다.
    • Web ACL detailsResource type에서 Global resources를 선택합니다.
    • Web ACL 이름을 입력합니다. (예: DoveRunner-Session-Revoke-ACL)
  3. CloudFront 배포 연결

    • Associated AWS resources 섹션에서 Add AWS resources 버튼을 클릭합니다.
    • WAF를 적용할 CloudFront 배포를 선택합니다.
    • Add 버튼을 클릭하여 연결합니다.
  4. 기본 설정으로 Web ACL 생성

    • Add rules and rule groups 단계에서 아무것도 추가하지 않고 Next를 클릭합니다.
    • Set rule priority 단계도 기본 설정으로 Next를 클릭합니다.
    • Configure metrics 단계도 기본 설정으로 Next를 클릭합니다.
    • Review and create 단계에서 설정을 검토한 후 Create web ACL을 클릭합니다.
  5. 연동 확인

    • Web ACL 생성이 완료되면, CloudFront 콘솔로 돌아가서 해당 배포의 Security 탭을 확인합니다.
    • Security - Web Application Firewall (WAF)에 방금 생성한 Web ACL이 연결되어 있는지 확인합니다.
  6. WebACL 정보 저장

    • 연동을 확인했다면, ‘WAF & Shield’ 서비스로 다시 이동하여, Web ACLs로 이동합니다.
    • Region을 Global로 설정한 후, 생성된 WebACL의 NameID를 복사하여 저장합니다.
    • 이 정보는 Lambda 함수의 설정 파일에서 사용됩니다.

Lambda@Edge를 구성하기 위해서는 우선 해당 기능에 필요한 IAM 권한과 실행 역할을 생성해야 합니다.

  1. 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"
      }
  2. Trust Relationship 설정

    • 생성한 role의 Trust Relationship 탭에 아래 역할을 추가합니다.
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Effect": "Allow",
      "Principal": {
      "Service": [
      "lambda.amazonaws.com",
      "edgelambda.amazonaws.com"
      ]
      },
      "Action": "sts:AssumeRole"
      }
      ]
      }

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

  1. Lambda 함수 생성 시작

    • Lambda 대시보드에서 Create function 버튼을 클릭합니다.
    • 이전에 생성한 SNS Topic과 동일한 리전으로 생성해야 합니다.
    • Author from scratch 옵션을 선택합니다.
  2. 기본 정보 입력

    • Function name: 이름을 입력합니다. (예: DoveRunner-Session-Revoke-Function)
    • Runtime: Node.js 22.x 또는 최신 버전을 선택합니다.
    • Architecture: x86_64를 선택합니다.
  3. 실행 역할 설정

    • Change default execution role을 클릭합니다.
    • Use an existing role를 선택합니다.
    • 이전 단계에서 생성한 IAM 실행 역할을 적용합니다.
  4. 함수 생성 완료

    • Create function 버튼을 클릭하여 함수를 생성합니다.
    • 생성이 완료되면 함수 상세 페이지로 이동합니다.

SNS 트리거 추가 및 소스 코드 업로드

Section titled “SNS 트리거 추가 및 소스 코드 업로드”
  1. 트리거 추가

    • Function overview 섹션에서 + Add trigger 버튼을 클릭합니다.
    • 트리거 소스로 SNS를 선택합니다.
  2. SNS Topic 선택

    • SNS topic 드롭다운에서 앞서 생성한 SNS Topic을 선택합니다.
    • Add 버튼을 클릭하여 트리거를 추가합니다.
  3. 코드 업로드 준비

    • Lambda 함수 상세 페이지에서 Code 탭을 클릭합니다.
    • Upload from 드롭다운에서 .zip file을 선택합니다.
  4. ZIP 파일 업로드

    • 제공된 lambda-wm-revoke-token-v1.0.0.zip 파일을 업로드합니다.
    • 이 ZIP 파일에는 다음 파일들이 포함되어 있습니다:
      • index.js: 메인 Lambda 핸들러 함수
      • config.js: 설정 파일 (수정 필요)
      • constants.js: 상수 정의 파일
      • package.json: 의존성 정보
  5. 업로드 완료

    • ZIP 파일을 선택하고 Save 버튼을 클릭합니다.
    • 업로드가 완료되면 코드 에디터에서 파일들을 확인할 수 있습니다.
  1. 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}"
      }
  2. 설정 저장 및 배포

    • 모든 설정 파일 수정이 완료되면 Deploy 버튼을 클릭합니다.
    • 배포가 완료되면 함수가 새로운 설정으로 실행됩니다.

AWS SNS에서 직접 Message Publish를 통한 테스트

Section titled “AWS SNS에서 직접 Message Publish를 통한 테스트”
  1. SNS 콘솔로 이동

    • AWS Management Console에서 SNS 서비스로 이동합니다.
    • 앞서 생성한 SNS Topic을 선택합니다.
  2. 메시지 발행 준비

    • Topic 상세 페이지에서 Publish message 버튼을 클릭합니다.
    • Subject는 선택사항이므로 비워둬도 됩니다.
  3. Message Body 작성

    • Message format은 JSON을 선택합니다.
    • Message body에 다음과 같은 테스트 메시지를 입력합니다:
      {
      "site_id": "{Your DoveRunner Site ID}",
      "revoke_token": "test-token"
      }
  4. 메시지 발행

    • Publish message 버튼을 클릭하여 메시지를 발행합니다.
    • 성공적으로 발행되면 Lambda 함수가 자동으로 트리거됩니다.
  1. CloudWatch Logs를 통한 Lambda 실행 로그 확인

    • AWS Management Console에서 CloudWatch 서비스로 이동합니다.
    • 좌측 메뉴에서 LogsLog groups를 선택합니다.
    • /aws/lambda/[Lambda함수이름] 형태의 Log group을 찾아서 클릭합니다.
    • 가장 최근 Log stream을 선택하여 실행 로그를 확인합니다.
    • 정상적으로 실행되었다면 다음과 같은 로그를 확인할 수 있습니다:
      • SNS 메시지 수신 로그
      • WAF 규칙 업데이트 요청 로그
      • 성공/실패 결과 로그
  2. AWS WAF에서 규칙 생성 확인

    • AWS Management Console에서 WAF & Shield 서비스로 이동합니다.
    • Web ACLs를 선택 및 Global Region 으로 변경 후, 생성한 Web ACL을 클릭합니다.
    • Rules 탭에서 새로운 규칙이 생성되었는지 확인합니다.
    • 규칙 이름은 일반적으로 waf-uri-contains-{test-token} 형태로 생성됩니다.
    • 규칙의 Action이 Block으로 설정되어 있는지 확인합니다.

Lambda 함수가 실행되지 않는 경우

Section titled “Lambda 함수가 실행되지 않는 경우”
  • SNS 트리거가 올바르게 설정되었는지 확인합니다.
  • Lambda 함수의 실행 역할에 필요한 권한이 있는지 확인합니다.
  • SNS Topic과 Lambda 함수가 동일한 리전에 있는지 확인합니다.
  • CloudWatch Logs에서 에러 메시지를 확인합니다.
  • Lambda 실행 역할에 wafv2:UpdateWebACL 권한이 있는지 확인합니다.
  • config.js 파일의 WAF 설정 정보가 올바른지 확인합니다.

세션 차단이 작동하지 않는 경우

Section titled “세션 차단이 작동하지 않는 경우”
  • WAF 규칙이 올바르게 생성되었는지 확인합니다.
  • CloudFront 배포가 WAF와 연결되어 있는지 확인합니다.
  • 실제 발행된 토큰이 WAF 규칙과 일치하는지 확인합니다.