Snowsight에서 데이터 보호 정책 관리

Snowsight에서 데이터 보호 정책 관리

미리 보기 기능(Preview) — 오픈. Enterprise Edition(또는 그 이상)의 모든 계정에서 사용할 수 있어요. 업그레이드 문의는 Snowflake 지원에 연락해 주세요.

데이터 보호 정책은 Snowflake의 미세 입도 액세스 제어(FGAC) 기능이에요. 이 정책들은 역할 기반 액세스 제어(RBAC)를 보완해 사용자가 어떤 객체에 접근할 수 있는지만이 아니라 쿼리 시 실제로 무엇을 보는지를 규제해요. 테이블에 SELECT 권한이 있는 역할도 마스킹하는 값, 필터링하는 행, 차단되는 컬럼 투영, 집계 최소값 강제, 또는 조인 제한 등으로 데이터 보기가 조정될 수 있어요.

Snowflake 데이터 보호 정책을 사용하면 세분화된 권한을 한 번 정의하고 쿼리 시에 일관되게 강제할 수 있어, 데이터와 팀이 성장함에 따라 추가 역할이나 뷰를 만들 필요가 없어져요.

출처: Documentation

본문

데이터 보호 정책 유형

Snowflake는 다음 데이터 보호 정책 유형을 지원해요.

  • 마스킹 정책(Masking Policies) — 쿼리 시 테이블과 뷰 컬럼의 일반 텍스트 데이터를 선택적으로 마스킹하는 컬럼 수준 보안 기능.
  • 행 액세스 정책(Row Access Policies) — 사용자가 SELECT, UPDATE, DELETE 또는 MERGE 문을 실행할 때 테이블이나 뷰의 어떤 행이 보이거나 접근 가능한지 제어하는 행 수준 보안 기능.
  • 집계 정책(Aggregation Policies) — 쿼리 결과에서 최소 그룹 크기를 강제해 소규모 그룹에서 개인의 데이터가 분리되지 않도록 하여 개인정보 유출을 방지.
  • 투영 정책(Projection Policies) — 쿼리에서 접근하거나 투영할 수 있는 컬럼을 제한해 승인된 사용자만 민감한 필드를 볼 수 있게 함.
  • 조인 정책(Join Policies) — 서로 다른 테이블의 데이터를 어떻게, 언제 결합할 수 있는지 제어해 무단 데이터 상관과 데이터 세트 간 민감한 관계의 노출을 방지.

이러한 정책을 SQL 또는 Snowsight에서 만들고 관리할 수 있어요. 또한 Cortex Code를 사용해 안내된 워크플로로 정책을 만들고 객체에 적용할 수 있어요.

에이전트 상호작용을 위한 데이터 보호 정책

AI 에이전트가 사용자 대신 행동할 때 사용자의 세션에서 실행돼요. 세션은 여전히 사용자에게 속하지만, 에이전트가 실행 컨텍스트에 존재할 수 있어요. IS_AGENT_ACTIVATED를 호출해 그 조건을 감지해요.

SYS_CONTEXT('SNOWFLAKE$CURRENT', 'IS_AGENT_ACTIVATED')::BOOLEAN = TRUE

이 검사를 모든 데이터 보호 정책의 본문에 사용해 에이전트가 활성일 때 거버넌스가 다르게 동작하게 할 수 있어요. 예를 들어 사용자의 역할이 더 넓은 액세스를 허용하더라도, 에이전트 주도 쿼리에 대해 값을 더 적극적으로 마스킹하고, 행을 숨기고, 컬럼 투영을 차단하고, 집계를 요구하거나, 조인을 요구할 수 있어요.

에이전트는 일반적으로 Cortex Agents, Cortex Code, Snowflake MCP 서버 연결, 그리고 IS_AGENTIC = TRUE로 구성된 Snowflake OAuth 보안 통합과 같은 워크플로에서 활성 상태예요. OAuth 클라이언트를 에이전트로 지정하는 방법에 대한 자세한 내용은 에이전트 세션 구성을 참고해요.

다음 마스킹 정책 예제는 에이전트가 활성일 때 컬럼 값을 마스킹해요. 에이전트가 활성 상태가 아니면 ANALYST 사용자 지정 역할만 원시 값을 볼 수 있어요.

CREATE OR REPLACE MASKING POLICY email_agent_mask AS (val STRING) RETURNS STRING ->
  CASE
    WHEN SYS_CONTEXT('SNOWFLAKE$CURRENT', 'IS_AGENT_ACTIVATED')::BOOLEAN = TRUE THEN '********'
    WHEN CURRENT_ROLE() IN ('ANALYST') THEN val
    ELSE '********'
  END;

추가 마스킹 예제는 에이전트가 활성일 때 컬럼 값 마스킹을 참고해요. 에이전트 신원을 사용하는 태그 기반 마스킹 예제는 예제: 에이전트가 활성일 때 스키마 컬럼 보호를 참고해요.

다른 정책 유형에서 에이전트 신원을 사용하는 예제는 다음을 참고해요.

액세스 제어 권한

Snowsight의 데이터 보호 정책을 사용하려면 Snowflake 계정이 Enterprise Edition 이상이어야 해요.

또한 다음 중 하나를 수행해야 해요.

  • ACCOUNTADMIN 역할 사용.
  • GOVERNANCE_VIEWER 및 OBJECT_VIEWER 데이터베이스 역할이 직접 부여된 계정 역할 사용.

이러한 데이터베이스 역할 부여가 있는 계정 역할을 사용해야 해요. 현재 Snowsight는 이 영역에 대해 역할 계층을 평가하지 않아요.

이 데이터베이스 역할에 대한 자세한 내용은 SNOWFLAKE 데이터베이스 역할을 참고해요.

UI에서 정책을 만들려면 역할에도 정책 유형에 필요한 권한(예: 스키마에 대한 CREATE MASKING POLICY)이 필요해요. 정책을 객체에 적용하려면 해당 정책 유형의 문서에 설명된 권한이 필요해요.

Snowsight에서 시작하기

  1. 필요한 액세스가 있는 사용자로 Snowsight에 로그인해요.
  2. 탐색 메뉴에서 Governance & security » Data protection policies를 선택해요.
  3. 데이터 보호 정책 페이지가 열려요. 정책을 만들고 관리해 데이터를 보호하는 데 사용해요.
  4. 메시지가 표시되면 웨어하우스를 선택해요(Select warehouse).
  5. Dashboard, Policies, Objects with policies 탭을 사용해 보안 태세를 모니터링하고, 정책을 관리하고, 보호된 객체를 검토해요.

참고 — 데이터 보호 정책 영역에는 실행 중인 웨어하우스가 필요해요. 대시보드 메트릭은 주기적인 일정으로 새로 고쳐져요. Objects with policies 탭의 정보는 최대 2시간 뒤처질 수 있어요.

대시보드

대시보드 탭은 계정 전반의 정책 태세를 요약해요. 페이지 부제목은 데이터 전반의 정책 메트릭 보기, Cortex Code로 더 탐색하기예요.

정책 만들기

대시보드 상단에 다섯 개의 카드가 지원되는 정책 유형을 나타내요. 각 카드는 정책을 설명하고 해당 유형의 정책 생성을 시작하는 + 컨트롤을 포함해요.

카드 설명
마스킹 정책 쿼리 시 민감한 데이터를 동적으로 숨김.
행 액세스 정책 사용자 특성에 따라 테이블 행 가시성 제한.
집계 정책 집계된 쿼리 결과로 데이터 노출 제한.
조인 정책 함께 조인할 수 있는 데이터 세트 제어.
투영 정책 조회하거나 볼 수 있는 컬럼 제한.

카드에서 + 를 선택해 SQL을 작성하지 않고 해당 정책 유형의 생성 워크플로를 열어요.

정책 태세 요약

생성 카드 아래의 정책 태세 요약 섹션은 계정 수준 메트릭을 제공해요.

  • 정책 개요: 정책 할당이 유형별(마스킹, 행 액세스, 집계, 투영, 조인)로 어떻게 분포되어 있는지 보여주는 차트. 총 할당 수는 계정의 모든 정책 할당을 계산해요.
  • 정책 범위: 총 할당 수, 태그를 통해 적용된 수, 객체에 직접 적용된 수를 보여줌.
  • 정책 시행을 주도하는 상위 태그: 가장 많은 정책을 적용하는 태그(예: SENSITIVITY 태그)를 나열.

시행 심층 분석

시행 심층 분석 섹션은 가장 많이 사용된 마스킹 정책과 가장 많이 사용된 행 액세스 정책 같은 각 범주에서 가장 자주 사용되는 정책을 나열해요. 각 항목은 정책 이름과 할당 수를 보여주어 계정에서 가장 많이 시행을 주도하는 정책을 알 수 있어요. 할당이 없는 범주는 해당 유형의 정책이 사용되기 전까지 비어 보여요.

정책

Policies 탭은 볼 수 있는 권한이 있는 계정의 모든 데이터 보호 정책을 나열해요.

탭 상단에서 다음 필터를 사용해요.

  • Filter by name: 이름으로 정책 검색.
  • Database, Schema, Owner: 특정 위치 또는 특정 역할이 소유한 정책으로 목록 축소.

탭 헤더는 계정에 존재하는 정책 수와 아직 객체에 적용되지 않은 정책 수를 보여줘요(예: 1,195 policies (317 not applied)).

테이블에는 다음 컬럼이 포함돼요.

컬럼 설명
Policy name 정책의 이름.
Type 정책 유형(마스킹, 행 액세스, 집계, 투영 또는 조인).
Location 정책이 저장된 데이터베이스와 스키마.
Owner 정책을 소유한 역할.
Modified at 정책에 대한 마지막 변경 타임스탬프.

행에서 작업 메뉴(⋯)를 선택해 정책을 세부 정보 보기, 편집 또는 삭제할 수 있어요.

정책을 만들거나 업데이트한 후에는 Objects with policies 탭에서, Catalog » Explorer에서, 또는 SQL을 사용해 테이블, 뷰 또는 컬럼에 적용해요. 정책별 동작과 예제는 각 정책 유형의 소개 주제를 참고해요.

정책이 있는 객체

Objects with policies 탭은 하나 이상의 데이터 보호 정책이 적용된 테이블, 뷰 및 컬럼을 나열해요.

탭 상단에서 다음 컨트롤을 사용해요.

  • Filter by name: 이름으로 객체 검색.
  • Object type: 테이블, 컬럼 또는 모든 객체 유형으로 필터링.

탭은 필터와 일치하는 보호된 객체 수를 보여줘요(예: 1000+ objects). 정보 지연 시간은 최대 2시간일 수 있어요.

테이블에는 다음 컬럼이 포함돼요.

컬럼 설명
Name 테이블, 뷰 또는 컬럼의 이름.
Location 객체를 포함하는 데이터베이스와 스키마.
Object type 행이 테이블인지 컬럼인지.
Tags 객체의 거버넌스 태그(예: SENSITIVITY = PII).
Policy types 적용된 정책 유형(예: Masking 또는 Row access).

이 탭을 사용해 민감한 컬럼과 테이블에 예상된 정책과 태그가 있는지 확인해요. 행을 선택해 Catalog » Explorer에서 객체를 열어 더 자세히 볼 수 있어요.

Cortex Code로 정책 생성 및 적용

Cortex Code를 데이터 보호 정책용 데이터 거버넌스 스킬과 함께 사용해 자연어 프롬프트로 정책을 만들고 객체에 적용할 수 있어요. Cortex Code는 마스킹, 행 액세스, 투영 정책 작성, 기존 정책 감사, 속성 기반 액세스 제어 같은 검증된 패턴 적용을 도와줄 수 있어요.

예제 프롬프트:

Create a masking policy for the EMAIL column in the SALES.NA.CUSTOMERS table
Help me set up row access policies for the FINANCE schema
Audit all masking policies in my account
Apply the PII masking policy to columns tagged as sensitive in PROD_DB

더 많은 예제 프롬프트와 지원되는 작업은 데이터 보호 정책을 참고해요.

더 알아보기