2. 접근 제어 설계
2.1 그룹 기반 권한 관리
핵심 원칙: 개별 사용자에게 직접 권한을 부여하지 않습니다. 반드시 그룹 을 통해 관리합니다.| 역할 그룹 | 카탈로그 권한 | 스키마 권한 | 테이블 권한 | 비고 |
|---|---|---|---|---|
data-engineers | USE CATALOG | USE SCHEMA, CREATE TABLE | SELECT, MODIFY | Bronze/Silver 쓰기 |
data-analysts | USE CATALOG | USE SCHEMA | SELECT | Gold 읽기 전용 |
data-scientists | USE CATALOG | USE SCHEMA, CREATE TABLE | SELECT, MODIFY | Silver 읽기, Sandbox 쓰기 |
platform-admins | ALL PRIVILEGES | ALL PRIVILEGES | ALL PRIVILEGES | 최소 인원으로 제한 |
svc-prod-pipeline | USE CATALOG | USE SCHEMA, CREATE TABLE | SELECT, MODIFY | Service Principal |
| 단계 | 원칙 | 설명 |
|---|---|---|
| 기본 | 모든 권한 거부 (Deny by Default) | 시작점 |
| 1단계 | 역할 기반 접근 제어 (RBAC) | 그룹별 필요 권한만 부여 |
| 2단계 | 데이터 수준 접근 제어 | 행/열 수준 필터링 |
| 3단계 | 정기 감사 | 분기별 권한 리뷰, 미사용 권한 회수 |
💡 중요:USE CATALOG과USE SCHEMA는 해당 객체를 탐색 할 수 있는 권한일 뿐, 데이터를 읽을 수 있는SELECT권한을 포함하지 않습니다. 반드시 별도로 부여해야 합니다.
2.3 Row Filter / Column Mask 적용 전략
민감한 데이터를 행 수준, 열 수준에서 제어합니다.| PII/PHI 유형 | 마스킹 전략 | 예시 |
|---|---|---|
| 이메일 | 앞 2글자만 표시 | si****@company.com |
| 전화번호 | 뒷 4자리만 표시 | ***-****-5678 |
| 주민등록번호/SSN | 뒷 4자리만 표시 | ***-**-1234 |
| 신용카드 | 뒷 4자리만 표시 | ****-****-****-5678 |
| 주소 | 시/도만 표시 | 서울특별시 *** |
| 진료기록(PHI) | 완전 숨김 | [REDACTED] |
2.4 Service Principal 관리 체계
| 용도 | Service Principal 명 | 권한 수준 | 비고 |
|---|---|---|---|
| 프로덕션 ETL | svc-prod-etl | Silver/Gold MODIFY | Jobs에서만 사용 |
| 프로덕션 ML | svc-prod-ml | Model Registry MANAGE | Serving 배포용 |
| CI/CD 파이프라인 | svc-cicd | Workspace 관리 | DAB 배포용 |
| 외부 연동 | svc-external-api | 특정 테이블 SELECT | API 접근용 |
| 모니터링 | svc-monitoring | 시스템 테이블 SELECT | 비용/감사 모니터링 |
⚠️ 핵심 원칙: 프로덕션 워크로드는 반드시 Service Principal 으로 실행합니다. 개인 계정으로 실행하면 퇴사/이동 시 파이프라인이 중단될 수 있습니다.
3. Row Filter / Column Mask 실전 패턴
3.1 다중 조건 Row Filter
실무에서는 단순 그룹 멤버십 외에 복잡한 조건이 필요한 경우가 많습니다.3.2 동적 Column Mask
참고 해시 기반 마스킹의 장점: SHA2 해시를 사용하면 원본 데이터를 볼 수 없으면서도, 동일한 고객의 거래를 GROUP BY나 JOIN으로 분석할 수 있습니다. 분석 가능성과 프라이버시를 동시에 확보하는 패턴입니다.
4. ABAC 태그 기반 정책
4.1 태그 체계 설계
Unity Catalog의 태그(Tags)를 활용하여 속성 기반 접근 제어(ABAC)를 구현합니다.| 태그 키 | 값 예시 | 용도 |
|---|---|---|
data_classification | public, internal, confidential, restricted | 데이터 등급 분류 |
pii_level | none, low, medium, high | 개인정보 민감도 |
pii_type | email, phone, ssn, credit_card | PII 유형 |
retention_days | 30, 90, 365, permanent | 보존 기간 |
owner_team | sales, hr, finance | 소유 팀 |
4.2 태그 기반 자동 마스킹 정책
주의 Security Policy는 Preview 기능입니다: 태그 기반 자동 마스킹 Security Policy는 현재 Public Preview입니다. 프로덕션에 적용하기 전에 테스트 환경에서 충분히 검증하세요. 현재는 개별 테이블에 Row Filter/Column Mask를 수동 설정하는 것이 안정적입니다.
5. 크로스 Workspace 권한 동기화
5.1 Account 수준 그룹 관리
| 그룹 유형 | 생성 위치 | 동기화 | 권장 |
|---|---|---|---|
| Account 그룹 | Account Console | 모든 Workspace에 자동 | ✅ 권장 |
| Workspace 로컬 그룹 | 개별 Workspace | 해당 Workspace만 | ⚠️ 특수 경우만 |
6. 외부 사용자 접근 제어 (Delta Sharing)
6.1 Delta Sharing 권한 모델
| Delta Sharing 유형 | 수신자 플랫폼 | 인증 방식 | 비고 |
|---|---|---|---|
| Databricks-to-Databricks | Databricks | Unity Catalog 통합 | 가장 간편 |
| Open Sharing | Spark, Pandas, 기타 | Bearer Token | 다양한 플랫폼 지원 |
참고 Delta Sharing 거버넌스: Delta Sharing으로 공유된 데이터는 수신자가 복사할 수 있습니다. 민감한 데이터는 Column Mask가 적용된 View를 공유하거나, 집계된 Gold 테이블만 공유하세요.
7. Audit Log 활용한 권한 감사
7.1 시스템 테이블을 활용한 감사
7.2 정기 감사 체크리스트
| 감사 항목 | 주기 | SQL/방법 | 조치 |
|---|---|---|---|
| 과도한 권한 보유자 | 월 1회 | ALL PRIVILEGES 보유 사용자 조회 | 최소 권한으로 축소 |
| 미사용 권한 | 분기 1회 | 90일간 미접근 테이블 권한 | 권한 회수 |
| Service Principal 키 순환 | 분기 1회 | 키 생성일 90일 초과 확인 | 새 키 발급, 이전 키 비활성화 |
| 외부 공유 현황 | 월 1회 | Delta Sharing Recipient 목록 | 불필요한 공유 해제 |
| 관리자 그룹 멤버 | 월 1회 | platform-admins 그룹 멤버 확인 | 불필요한 멤버 제거 |
주의 감사 로그 보존: 시스템 테이블의 감사 로그는 기본 365일 보존됩니다. 규제 요건에 따라 장기 보존이 필요하면, 감사 로그를 별도 스토리지(S3/ADLS)로 Export하는 파이프라인을 구축하세요.
참고 링크
- Databricks: Unity Catalog Privileges
- Databricks: Row Filters and Column Masks
- Databricks: Delta Sharing
- Databricks: Audit Logs
- Databricks: Security Policies
- Databricks: Tags