이 가이드에서 만드는 것
| 기능 | 효과 |
|---|---|
| Column Mask | 권한 없는 사용자에게 SSN → ***-**-****, 이메일 → ***@example.com 으로 마스킹 |
| Row Filter | 사용자가 속한 부서의 데이터만 조회 가능 |
| ABAC 정책 | PII 태그가 붙은 모든 테이블에 마스킹 규칙을 자동 일괄 적용 |
전체 구성 흐름
Step 1: 테스트 테이블 준비
Step 2: PII 태그 생성 및 적용
관리 태그(Governed Tag) 생성
UI에서 생성하는 방법:- Catalog 사이드바 클릭
- 상단의 Govern 탭 클릭
- Governed Tags > Create governed tag 클릭
- 설정:
- Key:
pii - Allowed values:
ssn,email,phone,address
- Key:
- Create 클릭
컬럼에 태그 적용
태그 확인
| tag_name | tag_value | column_name |
|---|---|---|
| pii | ssn | ssn |
| pii | ||
| pii | phone | phone |
| pii | address | address |
Step 3: 마스킹 함수(UDF) 작성
각 PII 유형별로 마스킹 함수를 만듭니다.IS_ACCOUNT_GROUP_MEMBER() 함수로 사용자 그룹을 확인하여, 권한이 있으면 원본을, 없으면 마스킹된 값을 반환합니다.
SSN 마스킹
이메일 마스킹
전화번호 마스킹
주소 마스킹
Step 4: Row Filter 함수 작성
사용자가 속한 부서의 데이터만 볼 수 있도록 행 필터를 만듭니다.admin그룹 → 모든 행 보임hr_full_access그룹 → 모든 행 보임Engineering그룹 → department = ‘Engineering’인 행만 보임Finance그룹 → department = ‘Finance’인 행만 보임
Step 5: 테이블에 적용
두 가지 방식 중 선택합니다.방법 A: 수동 적용 (Runtime 12.2+, 모든 환경)
개별 테이블에 직접 마스크와 필터를 설정합니다. 테이블 수가 적을 때 적합합니다.방법 B: ABAC 정책 (Runtime 16.4+, 권장)
PII 태그가 붙은 모든 테이블에 자동으로 적용됩니다. 테이블이 많거나 새 테이블이 자주 추가될 때 적합합니다.
참고
ABAC 정책의 핵심 장점: 나중에 pii = email 태그가 붙은 새 테이블이 추가되면 자동으로 마스킹 정책이 적용됩니다. 테이블별로 수동 설정할 필요가 없습니다.
Step 6: 테스트
현재 사용자의 그룹 멤버십 확인
마스킹 결과 확인
pii_authorized 그룹이 아닌 Engineering 그룹 사용자의 결과:
| name | phone | ssn | department | |
|---|---|---|---|---|
| 김영수 | ***@company.com | *-**-5678 | 901215-******* | Engineering |
| 최서연 | ***@company.com | *-**-8901 | 921103-******* | Engineering |
- PII 컬럼은 마스킹됨
- Engineering 부서의 행만 보임 (Row Filter)
pii_authorized + admin 그룹 사용자의 결과:
| name | phone | ssn | department | |
|---|---|---|---|---|
| 김영수 | ys.kim@company.com | 010-1234-5678 | 901215-1234567 | Engineering |
| 이미나 | mina.lee@company.com | 010-2345-6789 | 880923-2345678 | HR |
| 박준혁 | jh.park@company.com | 010-3456-7890 | 950410-1456789 | Finance |
| 최서연 | sy.choi@company.com | 010-4567-8901 | 921103-2567890 | Engineering |
| 정민우 | mw.jung@company.com | 010-5678-9012 | 870715-1678901 | HR |
- PII 컬럼 원본 노출
- 모든 부서의 행 보임
Genie Space와의 연동
이 마스킹과 필터는 Genie Space에서도 자동으로 적용됩니다.- Consumer 사용자가 Genie에서 “직원 이메일 목록 보여줘”라고 질문하면, 해당 사용자의 그룹에 따라 마스킹된 결과가 반환됩니다
- Genie Space 작성자의 크레덴셜로 쿼리가 실행되지만, 데이터 접근 권한은 조회하는 사용자 기준으로 적용됩니다
- 자세한 Genie Consumer 설정은 Genie Space Consumer 전용 운영 가이드를 참고하세요
마스킹 해제 (필요 시)
주의사항
| 제한 | 설명 |
|---|---|
| 뷰(View)에 적용 불가 | Row Filter / Column Mask 모두 뷰에서는 사용 불가 |
| 컬럼당 1개의 Mask | 하나의 컬럼에 여러 마스크를 중첩할 수 없음 |
| 테이블당 1개의 Row Filter | 사용자-테이블 조합당 1개만 동작 |
| Time Travel 미지원 | 마스킹된 테이블에서 VERSION AS OF 사용 불가 |
| ABAC 정책은 Runtime 16.4+ | 수동 방식은 12.2+에서 가능 |
| UDF는 단순하게 | API 호출, DB 조회를 피하고 기본 CASE문 사용 권장 |