본문으로 건너뛰기

PII 마스킹 정책

PII 마스킹

GenD 는 두 가지 마스킹 트랙으로 PII 를 보호합니다. 데이터의 형태와 위치가 다르기 때문에 적용되는 정책·전략도 분리되어 있습니다.

트랙대상시점엔진모듈
컬럼 레벨 마스킹Trino 카탈로그(Iceberg/Hive/RDB 등)의 컬럼 값쿼리 실행 시 (read-time)Trino CASE WHEN + 내장 함수/admin/pii (PII 관리)
콘텐츠 마스킹텍스트·이미지·오디오·파일 본문비동기 처리 시 (write-time)Presidio Analyzer + Anonymizer/admin/pii/policies (마스킹 정책)

이 문서는 두 트랙의 정책·적용 기준을 함께 정리합니다. PII 컬럼 자동 탐지는 PII 자동 탐지 문서를 참고하세요.


컬럼 레벨 마스킹

/admin/pii 에서 등록·확인(confirm)된 PII 컬럼은 GenD 가 생성하는 마스킹 뷰 SQL 을 통해 쿼리 시점에 자동 마스킹됩니다.

마스킹 함수 (Masking Coverage)

전략Trino 함수예시 ('010-1234-5678')권장 PII 유형
redactCAST('***' AS VARCHAR)***이름·주소·이메일 등 부분 노출도 불허해야 하는 값
partialCONCAT('XXX-****-', SUBSTR(col, -4))XXX-****-5678카드 번호·전화번호 등 끝 4 자리 식별이 필요한 운영성 데이터
hashTO_HEX(SHA256(CAST(col AS VARBINARY)))7b8c… (결정적)동일 값 매칭(join)·집계가 필요하지만 원본 노출은 불가한 키
encryptCAST('***ENCRYPTED***' AS VARCHAR) (Phase 3: Vault Transit UDF)enc:xyz권한자 복호화가 가능해야 하는 가역 마스킹. 현재는 placeholder, Vault Transit 연동 후 활성화

관리자 예외 (Admin Bypass)

마스킹 뷰는 current_user관리자 role(admin) 에 속하면 원본을, 그렇지 않으면 마스킹된 값을 반환합니다.

CASE
WHEN current_user IN ('admin')
THEN "card_number"
ELSE CONCAT('XXX-****-', SUBSTR("card_number", -4))
END AS "card_number"
  • 관리자 role 은 기본적으로 admin 하나만 허용됩니다. 추가 role 화이트리스트는 향후 정책 테이블로 확장 예정입니다.
  • ABAC Row Filter / Column Mask 와 함께 적용될 경우, column_mask → row_filter 순서로 평가되어 마스킹이 우선합니다 (feedback_abac_column_mask_order).

민감도(Sensitivity)와 전략 매핑 가이드

민감도는 마스킹 강제 여부 자체가 아니라 운영 가이드 라벨입니다. 다음 매핑을 기본 정책으로 권장합니다.

민감도권장 전략예시
highredact주민등록번호, 의료기록 식별자, 토큰
highhash이메일 (join 용도가 있을 때)
mediumpartial카드번호, 전화번호
lowpartial우편번호, 생년월 일부

민감도 라벨은 정렬·필터링·감사 기준으로 사용되며, 마스킹 함수 자체는 mask_function 컬럼이 결정합니다. 두 값을 분리한 이유는 같은 민감도라도 도메인(영업 vs. 분석)에 따라 다른 전략을 적용하기 위해서입니다.

라이프사이클

  1. 탐지 — Presidio 기반 PII 스캔이 카탈로그를 훑어 pii_column_registry 에 후보를 등록 (detected_by='presidio'). 스캔 트리거 이벤트가 활동 로그 에 기록됨
  2. 확인 — 관리자가 /admin/pii 에서 후보를 검토하고 확인(confirm) 클릭 → confirmed=true + confirmed_by / confirmed_at 자동 기록. 활동 로그에 confirm 이벤트 추가
  3. 마스킹 뷰 SQL 발급 — 컬럼별 SQL 버튼 클릭 시 GET /api/v1/pii/view-sql/{catalog}/{schema}/{table} 가 마스킹된 SELECT 문 반환
  4. 운영 적용 — 발급된 뷰 SQL 을 ABAC Column Mask 정책 또는 별도 Iceberg View 로 등록
  5. 감사 추적/admin/pii/history 에서 register / confirm / delete / scan_trigger 4 종 이벤트의 시간순 이력 + 행위자/대상 필터 조회. 컬럼 삭제 후에도 이력 보존

콘텐츠 마스킹 (Presidio 기반)

/admin/pii/policies 에서 정책을 정의하고, 비동기 API 로 텍스트·이미지·오디오·파일에서 PII 를 마스킹합니다.

지원 전략

전략설명예시
replace고정 문자열로 교체홍길동<NAME>
hashSHA-256 해시홍길동a1b2c3…
encrypt가역 암호화 (Phase 3: Vault Transit)홍길동enc:xyz
redact값 제거홍길동

사용 방법

  1. ⚙ 관리 콘솔 → 접근 제어 & 보안 → PII 관리마스킹 정책 탭에서 정책을 생성합니다.
  2. PII 유형(이름·이메일·전화번호 등)별로 마스킹 전략을 설정합니다.
  3. 대상 데이터에 정책을 적용합니다 (텍스트는 동기, 파일·이미지·오디오는 비동기).
  4. 비동기 처리 결과는 task_id 로 조회합니다.

API 엔드포인트

MethodPathDescription
POST/api/v1/pii-masking/text텍스트 마스킹 (동기)
POST/api/v1/pii-masking/image이미지 마스킹 (비동기, 얼굴·문자 블러)
POST/api/v1/pii-masking/audio오디오 마스킹 (비동기, 비프 처리)
POST/api/v1/pii-masking/file파일 마스킹 (비동기, 포맷 자동 감지)
GET/api/v1/pii-masking/result/{task_id}마스킹 결과 조회
GET/api/v1/pii-masking/policies마스킹 정책 목록
POST/api/v1/pii-masking/policies마스킹 정책 생성
PUT/api/v1/pii-masking/policies/{policy_id}마스킹 정책 수정

관련 문서