Snowflake

[Snowflake] Snowflake에서 Masking & Row Access Policy 관리 실습하기

JustJunsu 2024. 10. 9. 17:59
728x90

이번 포스팅에서는 Snowflake에서 Masking PolicyRow Access Policy를 관리하는 방법에 대해 알아보겠습니다. Snowflake에서 데이터베이스와 권한을 어떻게 관리하는지 확인할 수 있습니다.

1. 데이터베이스 및 테이블 생성

먼저 실습을 위한 데이터베이스와 테이블을 생성합니다.

USE ROLE SYSADMIN;

CREATE DATABASE SALES_DB;
CREATE SCHEMA SALES_SCHEMA;

CREATE TABLE CUSTOMERS (
  ID NUMBER, 
  NAME STRING,
  EMAIL STRING,
  COUNTRY_CODE STRING
);

INSERT INTO CUSTOMERS VALUES 
(138763, 'ABC','ABC@gmail.com' ,'IN'), 
(896731, 'DEF','DEF@stanford.edu','PL'),
(799521, 'GHI','GHI@outlook.co.uk','IE');

 

이렇게 하면 SALES_DB 데이터베이스와 CUSTOMERS 테이블이 생성되고, 고객 데이터가 삽입됩니다.

2. 권한 부여 및 역할 생성

2.1 Reader Role   생성 및 권한 부여

이제 분석가들이 데이터를 조회할 수 있도록 ANALYST 역할을 생성하고 권한을 부여합니다.

USE ROLE ACCOUNTADMIN; 

GRANT USAGE ON DATABASE SALES_DB TO ROLE ANALYST; 
GRANT USAGE ON SCHEMA SALES_DB.SALES_SCHEMA TO ROLE ANALYST;
GRANT SELECT ON TABLE SALES_DB.SALES_SCHEMA.CUSTOMERS TO ROLE ANALYST;

 

이 명령을 통해 ANALYST 역할을 가진 사용자는 CUSTOMERS 테이블에서 데이터를 조회할 수 있게 됩니다.

2.2 Masking Admin Role 생성

데이터 마스킹 및 접근 정책을 관리하는 MASKING_ADMIN 역할을 생성합니다.

 
CREATE ROLE MASKING_ADMIN;

GRANT USAGE ON DATABASE SALES_DB TO ROLE MASKING_ADMIN; 
GRANT USAGE ON SCHEMA SALES_DB.SALES_SCHEMA TO ROLE MASKING_ADMIN;
GRANT CREATE MASKING POLICY, CREATE ROW ACCESS POLICY ON SCHEMA SALES_DB.SALES_SCHEMA to role MASKING_ADMIN;
GRANT APPLY MASKING POLICY, APPLY ROW ACCESS POLICY  on account to role MASKING_ADMIN;
GRANT ROLE MASKING_ADMIN TO USER ADMIN;

 

이 역할은 데이터베이스 및 스키마에서 마스킹 정책을 만들고 적용할 수 있는 권한을 가지게 됩니다.

3. Masking Policy 생성 및 적용

이제 EMAIL 컬럼에 대해 마스킹 Policy 설정합니다.

USE ROLE MASKING_ADMIN;
USE SCHEMA SALES_DB.SALES_SCHEMA;

CREATE OR REPLACE MASKING POLICY EMAIL_MASK AS (VAL STRING) RETURNS STRING ->
  CASE
    WHEN CURRENT_ROLE() IN ('ANALYST') THEN VAL 
    ELSE REGEXP_REPLACE(VAL,'.+\@','******@')
  END;

ALTER TABLE CUSTOMERS MODIFY COLUMN EMAIL SET MASKING POLICY EMAIL_MASK;

 

이 정책은 ANALYST 역할을 가진 사용자가 이메일을 그대로 볼 수 있지만, 다른 역할을 가진 사용자는 이메일 주소의 앞부분이 마스킹됩니다.

 

3.1 Policy 검증

각 역할로 데이터를 조회하여 마스킹 정책을 확인해보겠습니다.

USE ROLE ANALYST;
SELECT * FROM CUSTOMERS;

USE ROLE SYSADMIN;
SELECT * FROM CUSTOMERS;

4. Row Access Policy 생성 및 적용

이제 간단한 Row Access Policy를 생성하여 ANALYST 역할에게만 데이터를 볼 수 있도록 설정합니다.

USE ROLE MASKING_ADMIN;
USE SCHEMA SALES_DB.SALES_SCHEMA;

CREATE OR REPLACE ROW ACCESS POLICY RAP AS (VAL VARCHAR) RETURNS BOOLEAN ->
  CASE
      WHEN 'ANALYST' = CURRENT_ROLE() THEN TRUE
      ELSE FALSE
  END;

ALTER TABLE CUSTOMERS ADD ROW ACCESS POLICY RAP ON (EMAIL);

5. Policy 검증 및 다국가 Row Access Policy 생성

CREATE TABLE TITLE_COUNTRY_MAPPING  (
  TITLE STRING,
  COUNTRY_ISO_CODE STRING
);

INSERT INTO TITLE_COUNTRY_MAPPING VALUES ('ANALYST','PL');

GRANT SELECT ON TABLE TITLE_COUNTRY_MAPPING TO ROLE MASKING_ADMIN;

CREATE OR REPLACE ROW ACCESS POLICY CUSTOMER_POLICY AS (COUNTRY_CODE VARCHAR) RETURNS BOOLEAN ->
  'SYSADMIN' = CURRENT_ROLE()
  OR EXISTS (
        SELECT 1 FROM TITLE_COUNTRY_MAPPING
        WHERE TITLE = CURRENT_ROLE()
        AND COUNTRY_ISO_CODE = COUNTRY_CODE
  );

ALTER TABLE CUSTOMERS ADD ROW ACCESS POLICY CUSTOMER_POLICY ON (COUNTRY_CODE);

6. Policy 제거 및 리소스 정리

ALTER TABLE CUSTOMERS DROP ALL ROW ACCESS POLICIES;
DROP DATABASE SALES_DB;

 

이번 포스팅에서는 Snowflake에서 Masking Policy와 Row Access Policy를 생성하고 관리하는 방법에 대해 알아보았습니다. 중앙 집중식 정책 관리를 통해 데이터 접근 제어를 효과적으로 설정할 수 있다는 점이 매우 유용했습니다.


Reference

https://www.udemy.com/course/ultimate-snowpro-core-certification-course-exam/?couponCode=UPGRADE02223

https://docs.snowflake.com/en/guides

 

Guides - Snowflake Documentation

Getting data in to Snowflake Snowflake provides several different methods to load data in to Snowflake, such as by using Snowpipe, loading from cloud storage, or uploading files using Snowsight.

docs.snowflake.com

 

 

728x90