
데이터가 조직의 가장 중요한 자산이 된 시대, 데이터에 대한 적절한 접근 제어와 보안은 그 어느 때보다 중요해졌습니다. 데이터브릭스(Databricks)의 유니티 카탈로그(Unity Catalog)는 이러한 데이터 거버넌스의 핵심 요소인 권한 관리를 위한 강력한 솔루션을 제공합니다. 오늘은 유니티 카탈로그의 권한 관리 시스템을 깊이 있게 살펴보고, 실제 활용 방법과 모범 사례를 알아보겠습니다.
유니티 카탈로그는 데이터브릭스 플랫폼에서 데이터 자산에 대한 중앙 집중식 접근 제어, 감사, 계보(lineage) 및 데이터 검색 기능을 제공하는 통합 거버넌스 솔루션입니다. 권한 관리는 이 중에서도 가장 기본적이면서 중요한 기능입니다.
유니티 카탈로그의 권한 관리는 다음과 같은 요소로 구성됩니다:
유니티 카탈로그는 SQL 데이터베이스 시스템과 유사한 권한 모델을 채택하여, 표준 ANSI SQL DCL(Data Control Language) 명령을 통해 권한을 관리합니다. 이는 기존 데이터베이스 관리자나 데이터 엔지니어에게 친숙한 방식으로 권한을 관리할 수 있게 해줍니다. Lilys AI
유니티 카탈로그는 다음과 같은 계층적 구조로 보안 개체를 관리합니다:
메타스토어 > 카탈로그 > 스키마 > 테이블/뷰/함수/기타 객체
각 수준별 보안 개체와 적용 가능한 권한은 다음과 같습니다:
메타스토어는 모든 데이터 자산의 최상위 컨테이너입니다. 메타스토어 수준에서는 주로 관리자 권한이 설정됩니다.
카탈로그는 관련 스키마의 논리적 그룹입니다.
스키마는 테이블, 뷰 및 기타 객체를 포함하는 네임스페이스입니다.
객체는 테이블, 뷰, 함수, 외부 위치 등 실제 데이터 자산을 의미합니다.
이러한 계층 구조를 통해 조직의 데이터 관리 정책에 맞게 세분화된 접근 제어를 구현할 수 있습니다.
유니티 카탈로그에서 권한을 관리하는 방법은 크게 세 가지가 있습니다:
SQL 명령은 권한 관리의 가장 기본적인 방법입니다. GRANT와 REVOKE 명령을 사용하여 권한을 부여하고 취소할 수 있습니다.
Copy-- 카탈로그에 대한 사용 권한 부여
GRANT USE CATALOG ON CATALOG finance_catalog TO user@example.com;
-- 스키마에 대한 사용 권한 부여
GRANT USE SCHEMA ON SCHEMA finance_catalog.transactions TO finance_analysts;
-- 테이블에 대한 SELECT 권한 부여
GRANT SELECT ON TABLE finance_catalog.transactions.customer_data TO finance_analysts;
-- 특정 열에 대한 SELECT 권한 부여
GRANT SELECT ON TABLE finance_catalog.transactions.customer_data(name, city) TO marketing_team;
-- 권한 취소
REVOKE SELECT ON TABLE finance_catalog.transactions.customer_data FROM marketing_team;
데이터브릭스 UI의 카탈로그 탐색기는 권한 관리를 위한 직관적인 인터페이스를 제공합니다.
이 방법은 특히 권한 설정이 복잡하지 않은 경우나 GUI를 선호하는 사용자에게 적합합니다.
대규모 환경이나 자동화된 프로세스가 필요한 경우, Databricks CLI나 Terraform 프로바이더를 통해 권한 관리를 자동화할 수 있습니다.
Databricks CLI 예시:
Copydatabricks unity-catalog grants create --principal user@example.com --privilege SELECT --securable-type table --securable-name finance_catalog.transactions.customer_data
Terraform 예시:
resource "databricks_grants" "table_usage" {
table = "${databricks_catalog.finance.name}.${databricks_schema.transactions.name}.customer_data"
grant {
principal = "finance_analysts"
privileges = ["SELECT", "MODIFY"]
}
}
자동화 방식은 권한 관리의 일관성을 유지하고, 버전 제어를 통해 변경 사항을 추적하며, 대규모 환경에서의 효율성을 높이는 데 도움이 됩니다.
유니티 카탈로그는 버전 1.0 권한 모델부터 권한 상속 기능을 지원합니다. 이 기능을 통해 상위 객체에 부여된 권한이 하위 객체에 자동으로 상속됩니다.
Copy-- finance_catalog에 대한 SELECT 권한 부여
-- 이는 해당 카탈로그의 모든 스키마와 테이블에 상속됨
GRANT SELECT ON CATALOG finance_catalog TO finance_team;
이 경우, finance_team 그룹은 finance_catalog 내의 모든 테이블에 대해 자동으로 SELECT 권한을 갖게 됩니다. 새로운 스키마나 테이블이 추가되더라도 별도의 권한 부여 없이 접근이 가능합니다. Microsoft Learn
이전 버전의 메타스토어를 사용하는 경우, 다음과 같이 권한 상속 모델로 업그레이드할 수 있습니다:
CopyALTER METASTORE SET PRIVILEGE MODEL = 'PRIVILEGE_MODEL_V1';
업그레이드 전에는 현재 권한의 백업과 테스트를 통해 기존 워크플로우에 영향이 없는지 확인하는 것이 중요합니다.
유니티 카탈로그는 단순한 객체 수준 접근 제어를 넘어 더욱 세밀한 접근 제어 기능을 제공합니다.
특정 열에 대한 접근 제어를 통해 민감한 정보에 대한 접근을 제한할 수 있습니다.
Copy-- 특정 열에만 SELECT 권한 부여
GRANT SELECT ON TABLE finance_catalog.transactions.customer_data(customer_id, purchase_date, amount) TO analyst_team;
이 방식으로 analyst_team은 고객 ID, 구매 날짜, 금액과 같은 분석에 필요한 열만 볼 수 있고, 이메일이나 주소와 같은 개인 식별 정보(PII)는 볼 수 없습니다.
동적 데이터 마스킹을 통해 민감한 데이터를 마스킹하면서도 필요한 쿼리는 가능하게 할 수 있습니다.
Copy-- 이메일 주소를 마스킹하는 정책 생성
CREATE MASKING POLICY email_mask AS
(val STRING)
RETURN
CASE
WHEN is_member('admin_group') THEN val
ELSE regexp_replace(val, '(.+)@(.+)', '****@$2')
END;
-- 테이블의 이메일 열에 마스킹 정책 적용
ALTER TABLE finance_catalog.transactions.customer_data
ALTER COLUMN email
SET MASK email_mask;
이 예시에서는 일반 사용자가 이메일 주소를 조회할 때 사용자 이름 부분이 마스킹되어 표시되고, 관리자 그룹 멤버만 전체 이메일 주소를 볼 수 있습니다. Databricks
행 수준 보안을 통해 사용자나 그룹이 특정 조건을 만족하는 행만 볼 수 있도록 제한할 수 있습니다.
Copy-- 지역별 데이터 접근을 제한하는 뷰 생성
CREATE VIEW finance_catalog.transactions.customer_data_by_region AS
SELECT *
FROM finance_catalog.transactions.customer_data
WHERE
CASE
WHEN is_member('us_region_team') THEN region = 'US'
WHEN is_member('eu_region_team') THEN region = 'EU'
WHEN is_member('admin_group') THEN TRUE
ELSE FALSE
END;
-- 뷰에 대한 접근 권한 부여
GRANT SELECT ON VIEW finance_catalog.transactions.customer_data_by_region TO us_region_team, eu_region_team, admin_group;
이 방식으로 각 지역 팀은 자신의 지역 데이터만 볼 수 있게 되고, 관리자는 모든 데이터에 접근할 수 있습니다.
효과적인 권한 관리를 위한 모범 사례를 살펴보겠습니다:
사용자에게 필요한 최소한의 권한만 부여하여 보안 위험을 최소화합니다.
Copy-- 특정 작업에 필요한 최소 권한만 부여
GRANT SELECT ON TABLE finance_catalog.transactions.monthly_summary TO financial_analysts;
개별 사용자보다는 그룹에 권한을 부여하여 관리 복잡성을 줄입니다.
Copy-- 그룹에 권한 부여
GRANT SELECT ON CATALOG finance_catalog TO finance_department;
이 방식은 사용자가 조직을 이동하거나 역할이 변경될 때 그룹 멤버십만 업데이트하면 되므로 관리가 용이합니다.
데이터 격리가 필요한 방식을 명확히 정의하고, 그에 맞게 카탈로그와 스키마를 구성합니다.
Copy-- 기능별 격리 예시
CREATE CATALOG finance_catalog;
CREATE CATALOG marketing_catalog;
CREATE CATALOG hr_catalog;
-- 환경별 격리 예시
CREATE CATALOG dev_catalog;
CREATE CATALOG test_catalog;
CREATE CATALOG prod_catalog;
Terraform이나 데이터브릭스 API를 사용하여 권한 관리를 자동화합니다. 이는 일관성을 유지하고 인적 오류를 줄이는 데 도움이 됩니다.
# Terraform을 사용한 권한 관리 자동화 예시
resource "databricks_catalog" "finance" {
name = "finance_catalog"
comment = "Catalog for finance department data"
properties = {
purpose = "financial_reporting"
}
}
resource "databricks_grants" "finance_catalog_grants" {
catalog = databricks_catalog.finance.name
grant {
principal = "finance_analysts"
privileges = ["USE_CATALOG", "USE_SCHEMA", "SELECT"]
}
grant {
principal = "finance_engineers"
privileges = ["USE_CATALOG", "USE_SCHEMA", "SELECT", "MODIFY", "CREATE_SCHEMA"]
}
}
정기적으로 권한을 검토하고 불필요한 접근 권한을 제거합니다. 유니티 카탈로그의 시스템 테이블을 활용하여 감사를 자동화할 수 있습니다.
Copy-- 특정 테이블에 대한 모든 권한 조회
SELECT * FROM system.information_schema.table_privileges
WHERE table_catalog = 'finance_catalog'
AND table_schema = 'transactions'
AND table_name = 'customer_data';
-- 사용자별 권한 조회
SELECT * FROM system.information_schema.table_privileges
WHERE grantee = 'user@example.com';
다양한 산업에서 유니티 카탈로그의 권한 관리가 어떻게 활용되는지 살펴보겠습니다.
금융 서비스 기업 A사는 개인 고객 데이터, 거래 내역, 위험 평가 데이터 등 다양한 민감한 데이터를 관리해야 합니다. 유니티 카탈로그를 활용하여 다음과 같은 권한 관리 체계를 구축했습니다:
이러한 접근 방식으로 A사는 규제 요구사항을 준수하면서도 데이터 분석 및 고객 서비스 프로세스를 효율적으로 운영할 수 있게 되었습니다.
의료 서비스 제공업체 B사는 환자 데이터 보호와 의료 연구 지원 사이의 균형을 유지해야 합니다. 유니티 카탈로그를 활용하여 다음과 같은 권한 체계를 구축했습니다:
이 접근 방식을 통해 B사는 HIPAA와 같은 의료 데이터 규제를 준수하면서도 중요한 의학 연구를 지원할 수 있게 되었습니다.
소매업체 C사는 여러 지역에서 운영되며 다양한 부서와 사용자 그룹이 데이터에 접근해야 합니다. 유니티 카탈로그를 활용하여 다음과 같은 권한 관리 구조를 구현했습니다:
이 구조를 통해 C사는 글로벌 비즈니스를 효율적으로 운영하면서도 지역별 데이터 규제 요구사항을 준수할 수 있게 되었습니다. Databricks
효과적인 권한 관리를 위해서는 지속적인 모니터링과 감사가 필요합니다.
유니티 카탈로그는 권한 관련 정보를 조회할 수 있는 다양한 시스템 테이블을 제공합니다:
Copy-- 모든 테이블 권한 조회
SELECT * FROM system.information_schema.table_privileges;
-- 특정 사용자/그룹의 모든 권한 조회
SELECT * FROM system.information_schema.table_privileges
WHERE grantee = 'finance_analysts';
-- 특정 테이블에 대한 권한 조회
SELECT * FROM system.information_schema.table_privileges
WHERE table_name = 'customer_data';
감사 로그를 통해 권한 변경 이력을 추적할 수 있습니다:
Copy-- 권한 변경 관련 감사 로그 조회
SELECT * FROM system.security.audit_logs
WHERE operation_name IN ('GRANT', 'REVOKE')
ORDER BY event_time DESC;
누가 어떤 데이터에 접근하는지 정기적으로 분석하여 이상 패턴을 감지합니다:
Copy-- 사용자별 테이블 접근 패턴 분석
SELECT
user_identity.email,
request_params.catalog_name,
request_params.schema_name,
request_params.table_name,
COUNT(*) as access_count
FROM system.security.audit_logs
WHERE operation_name = 'SELECT'
AND date_trunc('day', event_time) = current_date - INTERVAL 7 DAY
GROUP BY 1, 2, 3, 4
ORDER BY access_count DESC;
이러한 모니터링 및 감사 활동은 보안 위협을 조기에 발견하고, 규정 준수를 유지하며, 권한 구조의 최적화 기회를 식별하는 데 도움이 됩니다.
데이터브릭스 유니티 카탈로그의 권한 관리 시스템은 현대 데이터 환경에서 요구되는 세밀한 접근 제어와 강력한 보안을 제공합니다. 카탈로그부터 열 수준까지 이어지는 계층적 권한 모델, SQL 기반의 친숙한 권한 관리 인터페이스, 그리고 동적 마스킹과 행 수준 보안과 같은 고급 기능을 통해 조직은 데이터 자산을 안전하게 보호하면서도 적절한 사용자에게 필요한 접근 권한을 제공할 수 있습니다.
효과적인 권한 관리 전략은 최소 권한 원칙을 따르고, 그룹 기반 권한을 활용하며, 조직의 데이터 격리 요구사항에 맞게 카탈로그와 스키마를 구성하는 것에서 시작합니다. 더불어 권한 관리 자동화와 정기적인 감사를 통해 시간이 지남에 따라 진화하는 조직 구조와 데이터 환경에 맞게 권한 체계를 유지할 수 있습니다.
데이터 기반 의사결정이 더욱 중요해지는 시대에, 유니티 카탈로그의 강력한 권한 관리 기능은 조직이 데이터의 보안과 거버넌스를 강화하면서도 혁신과 통찰력을 위한 데이터 활용을 촉진할 수 있게 도와줍니다. 올바른 권한 관리 전략과 유니티 카탈로그의 기능을 결합함으로써, 조직은 데이터 민주화와 데이터 보안 사이의 이상적인 균형을 달성할 수 있을 것입니다.