스노우플레이크(Snowflake) 사용을 위한 방화벽 보안 정책 설정
Snowflake는 데이터레이크, 데이터웨어하우스, 데이터 공유 등 다양한 워크로드를 처리할 수 있는 SaaS 기반의 데이터 클라우드 플랫폼입니다.
SaaS 서비스를 사용하기 때문에 고객은 인프라 관리에 대한 오버헤드를 줄일 수 있으며 사용자는 데이터 처리 및 분석등 실제 본업에 집중할 수 있는 큰 장점을 제공하고 있습니다.
대부분의 회사는 특정 솔루션 사용을 위하여 방화벽을 설정하는 작업을 수행하고 있으며, Snowflake 역시 회사 내부의 PC 에서 Snowflake로의 접근을 허용하기 위한 방화벽 작업이 선행적으로 필요하게 됩니다.
본 블로그에서는 Snowflake 사용 시 방화벽, S3 접근 정책 설정을 위한 Inbound, Outbound 정책 설정을 위한 방법에 대해서 알아 보겠습니다.
Snowflake 보안 고려 사항
Snowflake 입장에서 네트워크 보안 관련 고려 사항은 크게 2가지 부분이 있습니다.
- 사용자 네트워크에 속한 PC 에서 Snowflake 서비스로 접근하기 위한 방화벽 설정 및 Snowflake 서비스 입장에서 접속을 허용하기 위한 Inbound Network Policy 설정
- Snowflake에서 고객사 Object Storage(S3, Azure Blob Storage, GCS)에 있는 데이터에 접근하기 위한 설정
위의 2단계를 손쉽게 설정하기 위한 Snowflake의 함수와 Object Storage 설정을 알아 보도록 하겠습니다.
Snowflake 서비스 접속을 위한 URL 리스트 획득하기
사용자 네트워크에 속한 PC에서 Snowflake 서비스로의 접속 허용을 위한 URL 리스트 및 포트 정보를 확인하기 위하여 Snowflake는 SYSTEM$WHITELIST() 함수를 제공하고 있습니다.
USE ROLE ACCOUNTADMIN;
SELECT SYSTEM$WHITELIST();
SYSTEM$WHITELIST() 함수는 ACCOUNTADMIN 계정으로 수행이 가능하며, 사용자가 방화벽 오픈을 해야 하는 URL 리스트와 포트 정보를 JSON 형태로 리턴합니다.
약 15개 정도의 URL이 필요하며, Snowflake 서비스 접속 이외에도 사용자 인증을 위한 OCSP(Online Certificate Status Protocol) 사용을 위한 URL등에 대한 정보를 포함하고 있습니다.
Snowflake가 제공하는 UI인 Snowsight는 Worksheet 를 통해 사용자가 사용한 쿼리 내용을 저장하며, 재접속 시 해당 쿼리를 계속해서 사용할 수 있는 기능을 제공합니다. Worksheet의 내용은 Snowflake의 Internal Stage에 저장이 되기 때문에, Stage에 대한 방화벽 오픈이 완료되어야만 해당 기능도 사용이 가능합니다.
Snowflake Network Policy 정책 사용 하기
Snowflake는 Snowflake에 접속하는 IP에 대한 접근 허용여부를 제어하기 위하여 Network Policy 기능을 제공하고 있습니다. 이를 통해 정해진 IP 대역의 클라이언트만 접속이 가능하여 보안적으로 좀 더 안전하게 Snowflake를 사용할 수 있습니다.
Network Policy는 ACCOUNTADMIN, SECURITYADMIN 역할을 가진 사용자만 설정할 수 있으며, UI에서 접속 허용 IP, 차단 IP 를 입력하는 형태로 기능을 제공하고 있으며, CIDR 형태의 대역 지정도 가능합니다
Default로 설정되어 있는 Network Policy는 없습니다.
Snowflake VPC ID 를 통한 S3 Bucket Policy 사용
Snowflake가 제공하는 Copy Into 명령어는 고객사의S3 에 있는 데이터 원본 파일을 Snowflake로 적재하는 작업을 수행하게 됩니다.
이를 위해 Snowflake와 S3 사이에 IAM을 통한 Trust 신뢰 관계를 맺어서 접근을 수행하도록 합니다. 여기에 추가로 보안팀에서 IP 기반의 S3 Bucket 정책을 가져갈 때에 VPC ID를 통한 IP 기반 정책과 유사한 수준의 접근 제어를 수행할 수 있습니다.
이를 위해 Snowflake는 사용자의 Snowflake 계정이 속해 있는 VPC ID를 획득할 수 있는 함수를 제공하고 있으며, S3 Bucket Policy 에서 VPC ID 기반의 접근 정책 설정을 함으로써, 좀 더 높은 수준의 보안 정책을 가져갈 수 있습니다.
USE ROLE ACCOUNTADMIN;
SELECT SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO();
GET_SNOWFLAKE_PLATFORM_INFO 함수는 계정이 속해 있는 VPC ID를 아래와 같이 리턴합니다.
위의 VPC ID를 S3 Bucket 정책에서 사용을 합니다.
위의 예제와 같이 Resource 항목에는 접근 제어를 수행할 S3 Bucket의 위치와 aws:SourceVPC에는 Snowflake 계정이 속한 VPC ID를 입력하여, 해당 Bucket은 Snowflake VPC에서만 접근하도록 설정을 수행할 수 있습니다.(Root 권한이 있는 경우에만 설정을 권고 드립니다.)
이상으로 Snowflake 사용을 위한 방화벽 오픈 정보, Network Policy, VPC ID 정보를 가져오는 방법을 알아 보았습니다.