메인 콘텐츠로 건너뛰기

외부 Route에서만 이메일 마스킹하기

목표: 내부 Destination에는 명시적인 Audit Only 정책을, 외부 Destination에는 Mask 정책을 적용합니다. 실습은 실제 개인정보가 아닌 가상 데이터로 진행합니다.

적용 순서

이 사례는 이미 구성된 Connector·Destination·Stream을 전제로 합니다. 아직 생성하지 않았다면 커넥터별 수집 가이드에서 먼저 수집 Source를 설정하세요. 이후 이 페이지의 구체적인 단계를 수행하고 실제 Logs와 Destination/격리 기록을 검증합니다. 화면 캡처는 기존 테스트 증빙으로, 실제 결과를 대신하지 않습니다.

사전 구성

두 Destination에 전송하기가 성공한 상태에서 시작합니다. Sample에 user.email이 실제로 존재하는지 먼저 확인합니다.

1. Stream 공통 정책 설정

  1. Stream Edit (/streams/{id}/edit)의 Route Processing으로 들어갑니다.
  2. Global Processing → Data Protection을 엽니다.
  3. 관찰된 Schema에서 실제 이메일 필드를 선택합니다. 예시 경로는 user.email입니다.
  4. 내부 실습 정책에서 허용된다면 기본 보호 동작을 Audit Only, 전송 동작을 Continue Delivery로 설정합니다.
  5. Save Rule이 필요한 항목은 버튼을 눌러 명시적으로 저장하고 요약/경고를 확인합니다.
Audit Only는 원본 이메일 값을 보존합니다. 조직의 정책이 허용하지 않는 실데이터에는 사용하면 안 됩니다.

2. 외부 Route만 Override

  1. Lab External Route를 선택합니다.
  2. Protection의 Inherit Global을 해제합니다.
  3. 동일한 이메일 필드를 선택하고 Mask(정책에 따라 Partial/Full)를 지정합니다.
  4. Event의 Delivery Behavior는 Continue Delivery로 설정합니다.
  5. 완전한 Route Protection 설정을 저장하고 Effective Status = Overridden인지 확인합니다. Intent only라면 적용 완료가 아닙니다.
  6. Route별 Preview를 확인하되 Mapping Preview만으로 마스킹 검증을 마치지 않습니다.
참고: Remove/Drop은 필드 제거, Block은 이벤트 전체 전송 중지이므로 구분합니다.

3. 수신 결과 비교

  1. pii-demo-001 가상 이벤트를 Webhook Receiver에 입력합니다.
  2. 두 Destination의 수신 파일과 Route별 Logs를 비교합니다.
  3. 외부 수신 파일에는 원본 lab@example.invalid가 그대로 존재해서는 안 됩니다. Mask 결과가 실제 정책과 일치하는지 확인합니다.
  4. 내부 수신 데이터는 실습 환경에서 Audit Only가 허용된 경우에만 확인합니다.
완료 조건: 외부 Route의 저장된 유효 정책, 성공한 전송 로그, 외부 수신 데이터의 마스킹이 모두 확인됩니다.

실패 시

  • 이메일 필드 미표시: Sample, Event Root, Union Schema의 실제 Field Path 확인
  • 외부 수신 데이터가 원본 그대로임: 실데이터 테스트를 중지하고 Inherit/Override, Effective Policy, 현재 Run 확인
  • 저장 시 409 STREAM_STALE_WRITE: Control #413에서 재현된 개발 문제입니다. 저장되지 않은 Draft를 적용 완료로 간주하지 말고, 실제로 성공하는 Route Edit 경로에서만 재검증합니다.
관련: Schema 변경, Governance.
마지막 수정일 2026년 10월 18일