사진과 음악을 좋아하는 개발자 지망생의 블로그

[데이터 웨어하우스 - 중급] 3. Snowflake - ② Snowflake 사용자 권한 설정 본문

개발/데이터 웨어하우스 - 중급

[데이터 웨어하우스 - 중급] 3. Snowflake - ② Snowflake 사용자 권한 설정

devculture309 2023. 5. 25. 17:50
반응형

1. Snowflake 사용자 권한 설정

1 - 1. Role과 User 생성

-- 3개의 ROLE을 생성합니다
CREATE ROLE analytics_users;
CREATE ROLE analytics_authors;
CREATE ROLE pii_users;

-- 사용자를 생성합니다
CREATE USER user PASSWORD='user99';

-- 사용자에게 analytics_users 권한을 부여합니다
GRANT ROLE analytics_users TO USER user;

'CREATE ROLE' 문을 사용하여 3개의 ROLE을 생성하고, 'CREATE USER' 문을 사용하여 사용자 'user'을 생성합니다. 마지막으로, 'GRANT ROLE' 문을 사용하여 사용자 'user'에게 'analytics_users' ROLE 권한을 부여합니다.

 

이를 통해 사용자 'user'은 'analytics_users' ROLE의 권한을 가지게 되어 해당 ROLE에 설정된 권한을 사용할 수 있습니다.

 

1 - 2. analytics_users와 analytics_authors Role 설정

-- analytics_users 설정
GRANT USAGE on schema dev.raw_data to ROLE analytics_users;
GRANT SELECT on all tables in schema dev.raw_data to ROLE analytics_users;
GRANT USAGE on schema dev.analytics to ROLE analytics_users;
GRANT SELECT on all tables in schema dev.analytics to ROLE analytics_users;
GRANT ALL on schema dev.adhoc to ROLE analytics_users;
GRANT ALL on all tables in schema dev.adhoc to ROLE analytics_users;

-- analytics_authors 설정
GRANT ROLE analytics_users TO ROLE analytics_authors;
GRANT ALL on schema dev.analytics to ROLE analytics_authors;
GRANT ALL on all tables in schema dev.analytics to ROLE analytics_authors;

위의 예시에서는 analytics_users Role에 대해 다음과 같은 권한을 설정합니다

  • dev.raw_data 스키마의 USAGE 권한과 모든 테이블에 대한 SELECT 권한
  • dev.analytics 스키마의 USAGE 권한과 모든 테이블에 대한 SELECT 권한
  • dev.analytics 스키마의 USAGE 권한과 모든 테이블에 대한 SELECT 권한

또한, 'analytics_authors' Role은 'analytics_users' Role을 상속받으며, 'dev.analytics' 스키마와 해당 스키마의 모든 테이블에 대한 ALL 권한을 가지게 됩니다. 이를 통해 'analytics_authors' Role은 'analytics_users' Role의 권한을 상속받으면서 추가로 권한을 가질 수 있게 됩니다.

 

1 - 3. 컬럼 레벨 보안 (Column Level Security)

컬럼 레벨 보안(Column Level Security)은 테이블 내의 특정 컬럼을 특정 사용자나 역할(Role)에만 접근 가능하게 하는 기능입니다. 이를 통해 개인정보와 같이 보안이 필요한 데이터 컬럼을 권한이 없는 사용자들에게 감출 수 있습니다.

 

일반적으로 가장 좋은 방법은 보안이 필요한 정보를 별도의 테이블로 구성하는 것입니다. 이렇게 하면 해당 컬럼에 대한 접근 권한을 직접 관리하고 필요한 사용자나 역할에만 접근을 허용할 수 있습니다. 이 방법은 데이터의 보안을 강화하는 데 큰 도움이 됩니다.

 

또 다른 방법으로는 보안이 필요한 정보를 데이터 시스템으로 로딩하지 않는 것입니다. 즉, 해당 정보를 저장하지 않거나, 암호화된 형태로 저장하여 접근을 제한하는 방식입니다. 이를 통해 데이터의 노출을 최소화할 수 있습니다.

 

그러나 경우에 따라서는 위 방법들이 적용하기 어려운 상황이 발생할 수 있습니다. 이럴 때 컬럼 레벨 보안(Column Level Security)을 사용하여 보안이 필요한 컬럼을 특정 사용자나 역할에게만 노출시킬 수 있습니다. 이를 통해 데이터의 접근을 제어하고 민감한 정보의 노출을 방지할 수 있습니다.

 

1 - 4. 레코드 레벨 보안 (Row Level Security)

레코드 레벨 보안(Row Level Security)은 테이블 내의 특정 레코드를 특정 사용자나 역할에만 접근 가능하게 하는 기능입니다. 이를 통해 특정 사용자 또는 그룹이 특정 테이블의 레코드에 대해 추가 조건을 부여하여 SELECT, UPDATE, DELETE 등의 작업을 제어할 수 있습니다.

 

일반적으로 가장 좋은 방법은 보안이 필요한 정보를 별도의 테이블로 관리하는 것입니다. 이렇게 하면 해당 정보에 대한 접근 권한을 직접 관리하고 필요한 사용자나 역할에만 접근을 허용할 수 있습니다. 또한, 필요한 경우 조인 등의 방법을 사용하여 필요한 데이터를 조회할 수 있습니다. 이 방법은 데이터의 보안과 유연성을 모두 고려한 방법입니다.

 

또 다른 방법으로는 보안이 필요한 정보를 데이터 시스템으로 로딩하지 않는 것입니다. 이는 민감한 정보를 데이터베이스에 저장하지 않거나, 암호화 등의 방법을 사용하여 접근을 제한하는 것을 의미합니다. 이 방법은 데이터의 노출을 최소화하는 데 도움이 됩니다.

 

하지만 경우에 따라 위 방법들이 적용하기 어려운 상황이 발생할 수 있습니다. 이럴 때 레코드 레벨 보안(Row Level Security)을 사용하여 특정 사용자나 역할이 특정 레코드에만 접근할 수 있도록 제어할 수 있습니다. 이를 통해 데이터의 접근을 제한하고 민감한 정보의 노출을 방지할 수 있습니다.

 

1 - 5. Data Governance

Data Governance는 필요한 데이터가 적재적소에 올바르게 사용되고 관리되는 것을 보장하기 위한 데이터 관리 프로세스입니다. 주요 목적은 데이터의 품질 보장과 데이터 관련 법규 준수입니다.

 

Data Governance의 목표는 다음과 같습니다.

  1. 데이터 기반 결정에서 일관성 유지: 데이터 기반으로 하는 결정에서 일관성을 유지하고 데이터의 정확성과 신뢰성을 보장합니다. 예를 들어, KPI(성과 지표) 정의와 계산에서 데이터의 일관성을 유지하여 신뢰할 수 있는 분석 결과를 얻을 수 있습니다.
  2. 데이터를 이용한 가치 창출: 데이터를 효과적으로 활용하여 가치를 창출합니다. 데이터 시민 과학자(Citizen Data Scientist)가 더 효율적으로 작업할 수 있도록 도와주고, 데이터 실로(data silos)를 제거하여 데이터의 통합과 공유를 촉진합니다.
  3. 데이터 관련 법규 준수: 개인정보 보호와 같은 데이터 관련 법규에 준수합니다. 적절한 데이터 접근 권한 설정과 보안 프로세스를 구축하여 개인정보를 보호합니다.

Data Governance는 데이터의 신뢰성과 일관성을 유지하며, 데이터를 가치 있는 자산으로 활용할 수 있도록 도와줍니다. 이를 통해 조직은 더 정확하고 효율적인 결정을 내리고, 비즈니스 성과를 향상시킬 수 있습니다.

 

1 - 6. Data Governance 관련 기능

Snowflake는 다음과 같은 데이터 거버넌스 관련 기능을 제공합니다.

 

1) Object Tagging

Object Tagging은 Enterprise 레벨에서 가능한 기능으로, CREATE TAG를 사용하여 문자열을 Snowflake 객체에 지정할 수 있습니다. 이 태그는 계정, 스키마, 테이블, 컬럼, 뷰 등과 같은 Snowflake 객체에 지정할 수 있습니다.

 

태그를 사용하면 객체에 대한 추가적인 메타데이터를 제공하고, 객체를 분류하거나 특정 기준에 따라 그룹화할 수 있습니다. 예를 들어, "PII"라는 태그를 개인정보를 포함하는 컬럼에 지정할 수 있습니다. 이러한 태그는 계층 구조를 따라 계승되므로, 상위 객체에 지정된 태그는 하위 객체에도 적용됩니다.

 

Object Tagging은 데이터 관리와 보안 관리에 유용하며, 데이터의 분류, 접근 제어, 보안 정책 적용 등에 활용될 수 있습니다. 또한, Data Classification과 함께 사용되어 데이터의 민감도, 중요도 등을 명시적으로 나타내는 데에도 활용됩니다.

 

2) Data Classification

Data Classification은 Enterprise 레벨에서 가능한 기능으로, 개인 정보 관리를 포함하여 데이터 관리를 강화하는 데 사용됩니다. Object Tagging을 수동으로 관리하는 것보다 더 효과적으로 데이터를 분류하기 위해 도입된 기능입니다.

 

Data Classification은 주로 세 가지 단계로 구성됩니다. 첫 번째는 "Analyze" 단계로, 이 단계에서는 테이블에 적용하여 개인정보나 민감정보가 있는 컬럼을 식별합니다. 두 번째는 "Review" 단계로, 이 단계에서는 식별된 결과를 데이터 엔지니어 등의 사람이 검토하고 최종적인 리뷰를 수행합니다. 이 단계에서는 결과를 수정하거나 보완할 수도 있습니다. 마지막으로 "Apply" 단계로, 이 단계에서는 최종 결과를 시스템 태그로 적용합니다

 

Snowflake에서는 두 가지 유형의 시스템 태그를 제공합니다. 상위 레벨의 태그인 "SNOWFLAKE.CORE.PRIVACY_CATEGORY"식별자(Identifier), 준식별자(Quasi-Identifier), 민감정보(Sensitive)와 같은 개인정보의 범주를 나타냅니다. 하위 레벨의 태그인 "SNOWFLAKE.CORE.SEMANTIC_CATEGORY"는 더 세부적인 정보를 제공하여 개인정보의 성격을 더욱 구체적으로 분류합니다.

 

Data Classification은 데이터 관리와 보안 관리를 강화하는 데 도움이 되며, 개인정보 보호 및 데이터 처리 규정 준수를 위한 중요한 기능입니다.

 

2 - 1) 식별자와 준식별자

식별자(Identifier)준식별자(Quasi Identifier)는 개인 정보를 식별하거나 특정 개인과 연결할 수 있는 데이터를 나타냅니다.

 

식별자(Identifier)는 개인을 직접적으로 식별하는 정보입니다. 개인의 이름, 주민등록번호, 전화번호, 이메일 주소 등이 식별자에 해당합니다. 이러한 식별자는 개인을 고유하게 식별할 수 있는 정보로 사용될 수 있습니다.

 

준식별자(Quasi Identifier)는 개인을 바로 식별하지는 않지만 몇 가지 조합을 통해 개인을 식별할 수 있는 정보입니다. 예를 들어, 출생 연도, 성별, 지역 정보 등이 준식별자에 해당합니다. 단독으로는 개인을 식별할 수 없지만 여러 가지 정보를 결합하거나 다른 데이터와 연결함으로써 개인을 식별할 수 있는 가능성이 있는 데이터입니다.

 

식별자와 준식별자는 데이터 처리 및 보안 관련 정책을 수립할 때 중요한 역할을 합니다. 데이터 처리 시 개인정보 보호를 위해 식별자와 준식별자에 대한 적절한 보호 및 암호화를 적용하는 것이 중요합니다. 이를 통해 데이터의 안전성과 개인정보 보호를 보장할 수 있습니다.

 

3) Tag-based Masking Policies

Tag based Masking Policies는 Enterprise 레벨에서 사용 가능한 Data Governance 기능 중 하나입니다. 이 기능은 Tag를 기반으로 데이터 액세스 권한을 제한하는 방식으로 작동합니다.

 

먼저, 액세스 권한을 지정하려는 Tag에 대해 설정을 수행합니다. 이 Tag는 Snowflake Object(예: 테이블, 뷰, 컬럼)에 지정되어 있어야 합니다. Tag에는 일반적으로 개인정보와 같은 민감한 데이터에 부여됩니다.

 

Tag based Masking Policies를 적용하면 해당 Tag가 지정된 Snowflake Object의 액세스 권한을 제한할 수 있습니다. 즉, 특정 사용자 또는 역할(Role)에게만 특정 Tag가 지정된 데이터에 대한 액세스 권한을 부여할 수 있습니다. 이를 통해 데이터 보안 및 개인정보 보호를 강화할 수 있습니다.

 

또한, Tag Lineage(태그 계보)도 Tag based Masking Policies에 적용됩니다. 이는 Tag를 기반으로 한 데이터의 흐름을 파악하고 추적할 수 있게 해줍니다. 따라서 데이터의 원천과 흐름을 파악하여 보안 및 규정 준수에 도움을 줄 수 있습니다.

 

4) Access History

Access History는 Data Governance의 한 기능으로, Enterprise 레벨에서 사용 가능합니다. 이 기능은 데이터 액세스에 대한 감사 추적을 제공하여 보안과 규정 준수를 강화합니다.

 

Access History를 통해 데이터 액세스에 대한 감사 로그를 기록할 수 있습니다. 이로써 잠재적인 보안 위반이나 무단 액세스 시도를 탐지하고 조사할 수 있습니다. 기록된 정보에는 사용자 신원, IP 주소, 타임스탬프 및 기타 관련 세부 정보가 포함됩니다.

 

Access History를 통해 다음과 같은 활동을 추적할 수 있습니다.

  • 데이터베이스 로그인
  • 실행된 쿼리
  • 테이블 및 뷰 액세스
  • 데이터 조작 작업

이 기능은 Snowflake뿐만 아니라 다른 클라우드 데이터 웨어하우스에서도 제공될 수 있으며, 데이터 보안 및 규정 준수를 강화하는 데 도움을 줍니다.

 

5) Object Dependencies

Object Dependencies는 Data Governance의 한 기능으로, 데이터 거버넌스와 시스템 무결성 유지를 목적으로 합니다.

 

이 기능은 테이블이나 뷰를 수정하는 경우에 해당 객체에 영향을 미치는 다른 객체들을 자동으로 식별해줍니다. 예를 들어, 테이블 이름이나 컬럼 이름을 변경하거나 삭제하는 경우, 해당 변경으로 인해 다른 객체들에게 영향이 있는지 자동으로 분석해줍니다. 이는 데이터 리니지 분석을 자동으로 수행하여 데이터 관리의 일관성과 무결성을 유지하는 데 도움을 줍니다.

 

또한, Object Dependencies를 통해 계승 관계 분석을 수행할 수 있어 더 세밀한 보안 및 액세스 제어가 가능합니다. 예를 들어, 어떤 테이블의 개인정보 컬럼이 새로운 테이블을 만들 때 사용된다면, 원본 테이블에서 설정된 권한이 자동으로 전파됩니다. 이는 태그를 포함한 권한 설정의 일관성을 유지하며, 데이터 보안을 강화하는 데 도움을 줍니다.

 

Object Dependencies는 데이터 관리와 보안 강화를 위해 중요한 기능으로 활용됩니다.

 

 

 

 

 

 

반응형