[Snowflake] 5. Security & Governance
Snowkflake의 보안을 네트워크 제어, 사용자 인증 및 관리, 거버넌스 및 권한, 데이터 보호, 데이터 암호화 5가지 분야 별로 간략히 정리했다.
Network Controls
Snowflake의 Network Controls은 사용자가 Snowflake에 접근하고 있는 클라이언트와 Snowflake 서비스 간의 네트워크 통신을 보호하고 관리하기 위한 기능이다.
CSP Private Network
Snowflake은 CSP Private Network를 지원하며, 이를 사용하여 사용자가 클라우드 서비스를 보다 안전하게 사용할 수 있다. CSP Private Network는 공용 인터넷을 우회하여 CSP에서 제공하는 프라이빗 네트워크를 통해 보다 안전한 통신이 가능하도록 한다. 이를 통해 고객의 데이터와 CSP 간의 통신을 암호화하고 보안을 강화할 수 있다.
네트워크 통신
Snowflake은 SSL/TLS를 사용한 암호화된 통신을 제공한다. Snowflake에서 클라이언트, 제3자 도구와 Snowflake 간의 모든 네트워크 통신은 TLS 1.2 프로토콜(2023.03 기준)을 사용하여 암호화 된다. 이는 클라이언트와 서버 간의 통신에서 데이터를 암호화하여 보안을 유지하고 중간자 공격 및 데이터 유출을 방지하기 위함이다.
네트워크 정책
Snowflake은 사용자가 데이터베이스와 연결할 수 있는 IP주소를 제한하는 네트워크 정책을 설정할 수 있다. 이를 통해 불필요한 접근을 차단하고 보안을 강화할 수 있다.
- Blacklist : 악의적인 트래픽이나 불필요한 트래픽을 차단하기 위해 허용되지 않는 IP주소 목록으로, 이 목록에 등록된 IP주소는 데이터베이스와의 연결을 차단하고 허용되지 않은 트래픽을 차단한다.
- Whitelist : 데이터베이스와 연결할 수 있는 IP주소 목록으로, 이 목록에 등록된 IP 주소만이 데이터베이스와의 연결을 허용한다.
Snowflake의 네트워크 제어 기능을 통해 데이터의 기밀성, 무결성, 가용성을 보호하고 보안 위협으로부터 보호할 수 있다. 이러한 기능을 통해 고객은 안전한 클라우드 환경에서 데이터를 저장하고 처리할 수 있다.
Identity & Authentication
Snowflake의 Identity & Authentication은 데이터베이스 접근에 대한 신원 확인 및 인증을 담당하는 기능이다.
인증 : Native Snowflake Credentials 지원
Native Snowflake Credential는 Snowflake이 제공하는 인증 기능 중 하나로 Snowflake에 직접적으로 계정 정보를 저장하고 관리함으로써 외부 인증 공급자를 사용하지 않고도 사용자 인증 및 권한 부여를 수행할 수 있도록 해준다.
Native Snowflake Credential을 통해 Snowflake에서는 아래와 같은 다양한 인증 옵션들을 제공하고 있다.
- 사용자 이름 및 비밀번호 : 일반적인 사용자 이름 및 비밀번호 조합을 사용한다.
- MFA (Multi-Factor Authentication) : 사용자는 인증에 필요한 두 가지 이상의 인증 요소를 제공해야 한다. ( ex) 비밀번호와 SMS로 전송된 일회용 코드, 또는 비밀번호와 보안 토큰 등 )
- SSO (Single Sign-On) : 사용자는 한 번 로그인하면 여러 개의 애플리케이션에 자동으로 액세스할 수 있다. Snowflake에서는 SSO를 위해 SAML 2.0을 지원한다.(2023.03)
- OAuth : 사용자는 Snowflake 계정에 대한 권한을 다른 애플리케이션 또는 서비스에 위임할 수 있다. OAuth를 사용하여 인증하려면 사용자는 Snowflake에서 애플리케이션을 등록하고 인증 토큰을 발급받아야 한다.
- Key Pair Authentication : 사용자는 먼저 공개키와 개인키를 생성해야 한다. 공개키는 Snowflake에 등록되며 개인키는 사용자가 안전하게 보관해야 한다. Key Pair Authentication은 기본적으로 SSH 프로토콜을 따르며 사용자는 공개키를 SSH 인증 프로세스에서 사용할 수 있다.
Native Snowflake Credential은 특히 개발 및 테스트 환경에서 유용하다. 외부 ID 공급자를 구성하거나 관리할 필요 없이 간편하게 사용자 인증을 수행할 수 있기 때문이다.
사용자 및 그룹 관리
Snowflake는 사용자의 신원 정보를 관리하는 기능을 제공하여, AWS, Azure 및 Okta와 같은 외부 ID 공급자와 통합하여 사용자 신원 정보를 관리한다. 이를 통해 사용자가 더욱 쉽게 로그인하고 신뢰성 높은 신원 확인을 수행할 수 있다.
SSO 지원
Authentication은 사용자가 신원 정보를 제공하고, 이를 검증하여 해당 사용자가 데이터베이스에 접근할 수 있는 권한이 있는지 확인하는 과정이다. Snowflake에서는 비밀번호 기반 인증 및 SSO(Single Sign-On)를 포함한 다양한 인증 방식을 제공한다.
또한, Snowflake에서는 MFA(Multi-Factor Authentication)을 지원하여 추가적인 보안성을 제공한다. MFA는 로그인 시 사용자의 신원 확인에 추가적인 단계를 추가하여 보안을 강화한다.
Snowflake의 Identity & Authentication 기능은 데이터베이스 접근에 대한 보안성을 높이고 데이터의 기밀성과 무결성을 보호하는 데 큰 역할을 한다.
Governance & Authorization
Snowflake는 클라우드 기반의 데이터 웨어하우스 플랫폼으로서, 데이터의 보안과 접근 제어를 위해 다양한 governance 및 authorization 기능을 제공한다.
데이터 거버넌스
접근 제어
접근 제어 기능을 통해 Snowflake는 RBAC(Role-Based Access Control) 및 DAC(Discretionary Access Control) 기반의 접근 제어를 제공한다. 이를 통해 사용자 또는 그룹에게 데이터베이스, 스키마, 테이블, 뷰 등의 객체에 대한 접근 권한을 지정할 수 있다.
RBAC 방식은 역할(Role)을 정의하고 사용자에게 역할을 할당하여 접근 권한을 지정한다. DAC 방식은 객체의 소유자(owner)가 객체에 대한 권한을 설정하는 방식이다.
다음은 DAC와 RBAC 모델을 합친 Snowflake의 데이터 접근 제어를 관계도로 나타낸 것이다.
각 요소들에 대한 설명은 아래와 같다.
- Securable object : 액세스 권한을 부여할 수 있는 엔티티이다. 권한 부여에서 허용하지 않는 한 액세스가 거부된다.
- Role : 권한(Privilege)을 부여할 수 있는 엔터티이다. Role은 사용자 또는 다른 Role에 할당 가능하다.
- Privilege : 개체에 대한 정의된 액세스 권한이다. Object로의 접근 제어를 위해 여러 고유 권한을 사용할 수 있다.
- User : Snowflake에서 인식하는 사용자 ID이다.
Snowflake는 사용자의 요구사항에 맞춘 Custom Role을 생성한 후 해당 Role을 사용자에게 할당할 수 있다. 단일 사용자는 N개의 Role을 상속받을 수 있으며 Snowflake UI를 통해 역할간의 맵핑 관계를 파악 가능하다.
데이터 보안
아래 그림은 한 데이터에 대해 Snowflake에서 제공하는 기능들 중 몇가지를 그림으로 표현한 것이다. 하나씩 알아보자.
Row Access Policy (1번)
- 사용자 권한 기반으로 권한이 부여된 일부 데이터만 활용 가능
- internal table, external table 및 view를 대상으로 select, update, delete 및 merge 오퍼레이션에 적용
- Dynamic Masking 과 같은 Column-Level의 정책과 혼용하여 사용 가능
- 사일로된 데이터를 단일 테이블로 통합하고 사용자 권한에 따라 동적 접근 제어 가능
Tags & Classification (2번)
데이터 분류 체계는 데이터의 중요도에 따라 분류를 할 수 있다. 분류된 데이터에 대해서는 보안 및 접근 제어를 설정할 수 있다. 이를 통해 민감한 데이터의 보안을 유지하면서도 데이터를 쉽게 관리할 수 있다. 데이터 분류 체계는 태그(tag)를 기반으로 구성되며 사용자가 직접 태그를 지정할 수도 있다.
- 민감한 정보를 가진 column, internal table, external table 및 view 에 적용 가능
- 민감 데이터 추적 및 리소스 사용
- 민감 정보 식별 : 민감한 객체(컬럼, 테이블 등)을 보안 정책 없이 감사하는 용도로 활용
- 리소스 사용 추적 : Serverless 기반으로 실행되는 Snowpipe, MView 및 Clustered Table의 비용 예측을 위해 태그를 활용한 리소스 사용량 추적 가능
Column-Level Security (3번)
컬럼-수준 보안 기능은 데이터베이스 테이블의 특정 컬럼(column)에 대해서만 보안을 적용할 수 있다. 이를 통해 민감한 데이터의 보안을 유지하면서도 데이터의 가치를 유지할 수 있다. Secure View, UDF(User-Defined Function), Dynamic Masking Policy 등의 방법을 사용하여 보안을 설정할 수 있다.
- Dynamic Masking Policy
- 역할 기반으로 민감 정보 접근 제어
- 저장된 데이터에 대한 변경사항은 발생하지 않음
- 마스킹 정책은 쿼리 runtime에 동적으로 적용
- 다양한 마스킹 기능 제공 : 상수 값, 해쉬 및 UDF
- 단일 정책으로 여러 컬럼에 적용 가능하여 사용 편의성 제공
- External Tokenzied
- 중요 데이터를 Snowflake에 저장하기 전에 토큰화 : 민감 정보들을 보안을 위해 해독할 수 없는 값으로 변경
- 정책 기반의 De-Tokenize : 권한이 있는 사용자만이 쿼리 실행 시점에 정책 기반으로 외부 함수 호출
- 파이프라인 단순화 : 외부 함수와 직접 연계
Anonymization (익명화)
데이터 익명화 기능은 민감한 데이터를 식별하기 어렵게 만들어주는 기능이다. 이를 통해 개인 정보 보호 및 규제 준수를 준수할 수 있다.
- 개인정보 보호 및 데이터 분석 가치 유지
- 정책은 동적으로 적용
- RBAC는 쿼리 시 권한을 가진 사용자만이 확인 가능
- Snowflake 내장 기능으로 산업 표준 요구사항 준수
- Native k-Anonymity 알고리즘 활용
- 별도의 3rd 도구 불필요 : 통합 중앙 집중식 접근 제어
- 개인 정보 보호 규정 준수
- 개인 정보를 익명화 하여 사용하면 개인 정보보호법에 따라 개인 정보로 취급되지 않음
Snowflake Audit : Access History
데이터 감사 기능은 모든 데이터 활동을 추적하고, 감사 로그를 기록하여 데이터 무결성을 유지한다. 감사 로그는 사용자, 시간, 작업 내용 등을 기록한다. 이를 통해 데이터의 보안과 무결성을 유지할 수 있다.
- 보안 규제 요구 사항 준수하고 데이터 거버넌스 기능을 지원하기 위해 사용자 접근 및 작업 이력은 시스템 테이블에 추적 관리
- 사용자가 Snowflake 테이블, 뷰 및 컬럼을 대상으로 실행되는 모든 접근 이력 사용자, Virtual Warehouse, 쿼리, 접속 이력, 클라이언트 정보 등의 상세 정보 제공
- 접근 이력 기반으로 자주 참조되지 않는 테이블의 보관 여부를 의사결정하는 용도로 활용 가능
- Snowsight의 대시보드 기능을 통해 감사 이력 정보 시각화
- 감사 정보 Export: Access History의 사용자 이력 정보는 SQL 기반으로 필터링하여 SIEM 솔루션과 연계하기 위해 JSON 형식으로 클라우드 스토리지에 Export하거나 JDBC 기반으로 직접 통합 지원
3rd 데이터 거버넌스 도구와 통합 지원
마지막으로 Snowflake는 다양한 3rd 데이터 거버넌스 도구와의 통합을 지원한다. 이를 통해 사용자는 기존의 데이터 거버넌스 환경과의 연결성을 유지하면서도 Snowflake에서의 데이터 보안 및 접근 제어를 유지할 수 있다.
Data Protection
Snowflake는 클라우드 데이터 웨어하우스로서 고객의 데이터 보호와 안전을 위해 다양한 기능을 제공한다. 이러한 기능은 계정, 지역, 클라우드 및 데이터 수준에서 복구 및 장애 조치를 가능하게 한다.
- Time Travel : Snowflake은 모든 데이터를 자동으로 기록하고 보관하여, 데이터를 복원하거나 이전 상태로 롤백하는 기능을 제공한다. 이를 통해 데이터 유실이나 손상을 방지할 수 있다.
- Fail-Safe : Snowflake은 데이터를 처리하는 모든 단계에서 중복성과 신뢰성을 보장하기 위해 다양한 기술을 사용한다. 이러한 기술로는 클러스터와 서버의 중복성, 데이터 파티셔닝, 네트워크 보안 등이 있다.
- 고가용성 : Snowflake은 고가용성을 고려하여 설계되었으며, 데이터 처리에 필요한 모든 구성 요소를 자동으로 관리한다. 이를 통해 데이터 처리 및 분석을 중단하지 않고 지속적으로 제공할 수 있다.
- Cross-Cloud & Region 복제 및 고가용성 : Snowflake은 다중 클라우드 및 지역에서 데이터를 복제하여 고가용성을 보장한다. 이를 통해 장애 발생 시에도 서비스 중단을 방지하고 빠른 복구를 할 수 있다.
- 데이터베이스 복제 및 장애 조치 : Snowflake은 데이터베이스 복제와 장애 조치를 자동으로 처리한다. 이를 통해 데이터 유실을 방지하고, 데이터 처리 시간을 최소화하여 빠른 분석 및 의사 결정을 지원한다.
- 클라이언트 리다이렉션 : Snowflake은 클라이언트가 연결하려는 지역이나 클라우드에 문제가 발생한 경우 다른 지역이나 클라우드로 리다이렉션하여 서비스 중단을 방지한다.
위와 같은 다양한 기능으로 Snowflake는 고객의 데이터 보호와 안전을 보장한다. 데이터 처리 및 분석을 위한 고가용성, 복구 및 장애 조치 기능을 제공하여 데이터 유실 및 중단을 최소화하고 안정적인 서비스를 제공한다.
Encryption
Snowflake에서 모든 데이터는
- 디스크에 저장될 때
- 스테이징 위치로 데이터를 이동할 때
- 데이터베이스에 저장될 때
- 가상 웨어하우스의 데이터 캐쉬 영역에 저장될 때 및 ResultSet 캐쉬 영역에 저장될 때
암호화되어 사용자 데이터를 안전하게 보호한다.
아래는 각 계층별 암호화 특징들을 그림으로 나타낸 것이다.
- Snowflake 내의 모든 데이터는 암호화되어 저장 및 처리
- 데이터 자체
- 가상 웨어하우스 데이터 캐쉬
- 개별 쿼리 Result Set 캐쉬
- AES-256를 통해 암호화
- 고객의 데이터는 항상 독립적인 디렉토리에 저장되며 해당 고객만 접근하도록 CSK(Customer-specific Key)를 사용하여 암호화
- HSM 기반의 계층적 키 관리 모델
- NIST 800-57 암호화 키 관리 수명주기 준수