Snowflake JDBC

다운로드 2
업데이트 2025. 9. 7.

설치 매뉴얼

개요

Snowflake란?

  • 클라우드 기반 데이터 플랫폼입니다.
  • AWS, Azure, GCP 같은 퍼블릭 클라우드 위에서 동작하며, 대량 데이터 저장·분석에 적합합니다.
  • 데이터베이스(DB), 웨어하우스(분석용 자원), 스키마(테이블/뷰가 들어 있는 공간) 개념을 가지고 있고, 보안 정책(네트워크 정책, 인증 방식)을 통해 접근을 제어합니다.

로그프레소 소나에서 Snowflake로 접속하려면 서비스 전용 사용자와 권한을 Snowflake에 구성해야 합니다.

실행 환경 준비

Snowsight (웹 UI)
  1. https://app.snowflake.com/ 으로 접속해 로그인하세요.

  2. 메뉴에서 Projects > Worksheets로 이동하세요. 화면 우측 상단에서 + 또는 + > SQL Worksheet 버튼을 클릭하면 SQL 편집기 창이 열립니다.

    새 워크시트 만들기

  3. 여기서 CREATE USER ..., GRANT ... 같은 SQL을 직접 입력하고 버튼으로 실행할 수 있습니다. 2 개 이상의 SQL 문으로 작성된 스크립트는 Run All 버튼 또는 Ctrl + Shift + Enter 단축키로 실행해야 합니다.

    쿼리 실행 버튼

SnowSQL (CLI)
  1. SnowSQL 설치하기를 참고해 설치하세요.

  2. 터미널/명령 프롬프트에서 다음 명령으로 로그인하세요.

    snowsql -a <ACCOUNT> -u <USER>
    
  3. snowsql 프롬프트에서 SQL을 실행하세요.

Note
간단한 작업은 Snowsight에서, 스크립트를 이용한 배치 작업은 SnowSQL에서 하세요.

Snowflake 설정

Snowflake에 접속해 접속 정보를 확인하고, 로그프레소 소나의 연결에 필요한 설정을 진행합니다. 아래 절차를 순서대로 실행하세요. SQL문을 예시와 함께 실행하는데 필요한 최소 권한(역할)을 "역할 생성 (SECURITYADMIN)"과 같은 형식으로 함께 표시했습니다. 모든 단계를 한 번에 실행하려면 ACCOUNTADMIN 권한으로 수행하세요. 운영 환경에서는 위 역할 분리를 권장합니다.

작업실행 권한
롤 생성, 롤 사용자 부여SECURITYADMIN
사용자 생성, 사용자에 네트워크 정책 적용USERADMIN
웨어하우스/DB/스키마 생성, 객체 권한 부여SYSADMIN
네트워크 정책 생성, 계정 단위 적용ACCOUNTADMIN
PAT 발급LOGPRESSO 본인
Caution
SQL문은 모두 예시입니다. 실제 운영 환경에 맞게 고쳐서 사용하세요.

1. Snowflake 접속 정보 확인

Admin > Accounts 메뉴로 이동하여 ACCOUNT 이름 위에 마우스 커서를 올리면 접속 URL을 확인할 수 있습니다. 접속 도메인은 로그프레소 소나에서 접속 프로파일을 설정할 때 필요합니다.

Snowflake 접속 정보 확인

2. 역할 생성 (SECURITYADMIN)

로그프레소 소나가 사용할 계정에 부여할 역할(ROLE)을 생성하세요. 여기서는 읽기 전용이라 가정하고 역할을 생성합니다.

CREATE ROLE IF NOT EXISTS LOGPRESSO_READONLY_ROLE;

3. 웨어하우스 생성 (SYSADMIN)

웨어하우스는 저장된 데이터를 읽고, 가공하고, 쿼리를 실행하는 연산 자원입니다. 운영환경에 적합한 웨어하우스의 크기는 웨어하우스의 개요 문서를 참고해 산정하세요.

CREATE WAREHOUSE IF NOT EXISTS SEC_WH
  WAREHOUSE_SIZE = XSMALL
  AUTO_SUSPEND = 60
  AUTO_RESUME = TRUE
  INITIALLY_SUSPENDED = TRUE;
  • Snowflake에서 저장소(Storage)와 연산(Compute)은 각각 분리된 구조입니다. 저장소는 공용 데이터 레이크처럼 모든 계정이 공유하지만, 연산 자원을 "웨어하우스"라는 단위로 예약/관리하도록 구성되어 있습니다.

4. 데이터베이스 및 스키마 생성 (SYSADMIN)

Caution
제시된 SQL문은 설명을 위한 예시로, DDL이 정의되어 있지 않습니다. 실제로 운영 환경에 맞도록 구성해서 사용하세요.
CREATE DATABASE IF NOT EXISTS SECOPS_DB;

CREATE SCHEMA IF NOT EXISTS SECOPS_DB.SIEM_LOGS;
CREATE SCHEMA IF NOT EXISTS SECOPS_DB.SOAR_INCIDENTS;
CREATE SCHEMA IF NOT EXISTS SECOPS_DB.SOAR_PLAYBOOKS;
CREATE SCHEMA IF NOT EXISTS SECOPS_DB.SOAR_ENRICH;

5. 사용자 생성 (USERADMIN)

CREATE USER LOGPRESSO
  PASSWORD = 'TempPassw0rd!' -- 이 암호는 잘 알려진 암호이므로 운영 환경에서 사용하지 마세요.
  DEFAULT_ROLE = LOGPRESSO_READONLY_ROLE
  DEFAULT_WAREHOUSE = SEC_WH
  DEFAULT_NAMESPACE = SECOPS_DB.SIEM_LOGS
  MUST_CHANGE_PASSWORD = FALSE;

6. 역할을 사용자에 부여 (SECURITYADMIN)

GRANT ROLE LOGPRESSO_READONLY_ROLE TO USER LOGPRESSO;

7. 역할에 최소 권한 부여 (SYSADMIN)

GRANT USAGE ON WAREHOUSE SEC_WH TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT USAGE ON DATABASE SECOPS_DB TO ROLE LOGPRESSO_READONLY_ROLE;

GRANT USAGE ON SCHEMA SECOPS_DB.SIEM_LOGS       TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT USAGE ON SCHEMA SECOPS_DB.SOAR_INCIDENTS  TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT USAGE ON SCHEMA SECOPS_DB.SOAR_PLAYBOOKS  TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT USAGE ON SCHEMA SECOPS_DB.SOAR_ENRICH     TO ROLE LOGPRESSO_READONLY_ROLE;

GRANT SELECT ON ALL TABLES    IN SCHEMA SECOPS_DB.SIEM_LOGS TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA SECOPS_DB.SIEM_LOGS TO ROLE LOGPRESSO_READONLY_ROLE;

GRANT SELECT ON ALL TABLES    IN SCHEMA SECOPS_DB.SOAR_INCIDENTS TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA SECOPS_DB.SOAR_INCIDENTS TO ROLE LOGPRESSO_READONLY_ROLE;

GRANT SELECT ON ALL TABLES    IN SCHEMA SECOPS_DB.SOAR_PLAYBOOKS TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA SECOPS_DB.SOAR_PLAYBOOKS TO ROLE LOGPRESSO_READONLY_ROLE;

GRANT SELECT ON ALL TABLES    IN SCHEMA SECOPS_DB.SOAR_ENRICH TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA SECOPS_DB.SOAR_ENRICH TO ROLE LOGPRESSO_READONLY_ROLE;

8. 네트워크 정책 생성 및 적용

  • 정책 생성 (ACCOUNTADMIN)
-- SONAR_PUBLIC_IP: 203.0.113.10/32
-- PAT를 사용하는 경우, 네트워크 정책은 강제사항
-- PAT대신 암호를 사용하더라도 네트워크 정책을 적용을 권장합니다.
CREATE NETWORK POLICY IF NOT EXISTS SONAR_NP
  ALLOWED_IP_LIST = ('203.0.113.10/32');

PAT대신 암호를 사용하더라도 네트워크 정책을 적용하는 편이 안전합니다.

  • 사용자에 정책 적용 (USERADMIN)
ALTER USER LOGPRESSO SET NETWORK_POLICY = SONAR_NP;

9. PAT 발급 (LOGPRESSO 계정으로 실행)

Caution
이 SQL문은 실행한 계정의 권한에 따라 액세스 토큰을 생성하므로 반드시 LOGPRESSO 계정으로 실행해야 합니다. 액세스 토큰은 주기적으로 만료됩니다. 만료되기 전에 새로 생성해서 사용하세요.
SELECT SYSTEM$GENERATE_ACCESS_TOKEN('SONAR_OAUTH_INT');

반환된 토큰 문자열은 접속 프로파일 설정에서 암호로 사용됩니다.

10. SQL 스크립트 샘플

지금까지 설명한 내용을 담은 SQL 스크립트는 아래와 같습니다.

-- =========================================================
-- 샘플 환경
-- ACCOUNT        : acme1234.ap-northeast-2
-- WAREHOUSE      : SEC_WH
-- DB             : SECOPS_DB
-- SCHEMA (SIEM)  : SIEM_LOGS
-- SCHEMA (SOAR)  : SOAR_INCIDENTS, SOAR_PLAYBOOKS, SOAR_ENRICH
-- ROLE           : LOGPRESSO_READONLY_ROLE
-- USER           : LOGPRESSO
-- TEMP_PASSWORD  : TempPassw0rd!
-- SONAR_PUBLIC_IP: 203.0.113.10/32
-- OAUTH_INTEGRATION_NAME : SONAR_OAUTH_INT
-- =========================================================

-- 1. ROLE
CREATE ROLE IF NOT EXISTS LOGPRESSO_READONLY_ROLE;

-- 2. WAREHOUSE
CREATE WAREHOUSE IF NOT EXISTS SEC_WH
  WAREHOUSE_SIZE = XSMALL
  AUTO_SUSPEND = 60
  AUTO_RESUME = TRUE
  INITIALLY_SUSPENDED = TRUE;

-- 3. DB/SCHEMA (SIEM + SOAR)
CREATE DATABASE IF NOT EXISTS SECOPS_DB;

-- SIEM 로그 스키마
CREATE SCHEMA IF NOT EXISTS SECOPS_DB.SIEM_LOGS;

-- SOAR 스키마 (인시던트, 플레이북)
CREATE SCHEMA IF NOT EXISTS SECOPS_DB.SOAR_INCIDENTS;
CREATE SCHEMA IF NOT EXISTS SECOPS_DB.SOAR_PLAYBOOKS;

-- 4. USER (암호는 예시일 뿐이며, 사용하지 마세요.)
CREATE USER IF NOT EXISTS LOGPRESSO
  PASSWORD = 'TempPassw0rd!'
  DEFAULT_ROLE = LOGPRESSO_READONLY_ROLE
  DEFAULT_WAREHOUSE = SEC_WH
  DEFAULT_NAMESPACE = SECOPS_DB.SIEM_LOGS
  MUST_CHANGE_PASSWORD = FALSE;

-- 5. ROLE 부여
GRANT ROLE LOGPRESSO_READONLY_ROLE TO USER LOGPRESSO;

-- 6. 최소 권한 (SIEM + SOAR 읽기 전용)
GRANT USAGE ON WAREHOUSE SEC_WH TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT USAGE ON DATABASE SECOPS_DB TO ROLE LOGPRESSO_READONLY_ROLE;

-- SIEM (스키마는 실제 환경에 맞도록 구성해서 사용)
GRANT USAGE ON SCHEMA SECOPS_DB.SIEM_LOGS TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT SELECT ON ALL TABLES    IN SCHEMA SECOPS_DB.SIEM_LOGS TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA SECOPS_DB.SIEM_LOGS TO ROLE LOGPRESSO_READONLY_ROLE;

-- SOAR
GRANT USAGE ON SCHEMA SECOPS_DB.SOAR_INCIDENTS  TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT USAGE ON SCHEMA SECOPS_DB.SOAR_PLAYBOOKS  TO ROLE LOGPRESSO_READONLY_ROLE;

GRANT SELECT ON ALL TABLES    IN SCHEMA SECOPS_DB.SOAR_INCIDENTS TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA SECOPS_DB.SOAR_INCIDENTS TO ROLE LOGPRESSO_READONLY_ROLE;

GRANT SELECT ON ALL TABLES    IN SCHEMA SECOPS_DB.SOAR_PLAYBOOKS TO ROLE LOGPRESSO_READONLY_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA SECOPS_DB.SOAR_PLAYBOOKS TO ROLE LOGPRESSO_READONLY_ROLE;

-- 7. 네트워크 정책 (PAT 사용자 권장)
CREATE NETWORK POLICY IF NOT EXISTS SONAR_NP
  -- RFC 5737 문서 예시 대역(203.0.113.0/24). 운영 환경에서 사용하는 소나의 IP 주소로 교체하세요.
  ALLOWED_IP_LIST = ('203.0.113.10/32');
ALTER USER LOGPRESSO SET NETWORK_POLICY = SONAR_NP;

예시로 설명한 SQL문을 ▶ > Run All 버튼을 클릭해 실행한 뒤 다음과 같이 Statement executed successfully 메시지가 나타나면 정상적으로 쿼리문이 실행되었음을 의미합니다.

Snowsight에서 쿼리문을 실행한 결과

아래 SQL문은 LOGPRESSO 계정으로 실행해야 합니다.

-- 8. PAT 발급 (LOGPRESSO 세션에서 실행하세요)
SELECT SYSTEM$GENERATE_ACCESS_TOKEN('SONAR_OAUTH_INT');
-- 실행 결과로 반환되는 토큰 문자열(JWT)을 접속 프로파일 설정 중 암호 입력란에 사용하세요.

로그프레소 접속 프로파일 설정

이 문서를 참고해 접속 프로파일을 추가하세요.

Snowflake JDBC 접속 프로파일 설정

다음은 접속 프로파일 설정 중 필수 입력 항목입니다.

  • 이름: 접속 프로파일을 식별할 고유한 이름

  • 식별자: 로그프레소 쿼리 등에서 사용할 접속 프로파일의 고유 식별자

  • 유형: 데이터베이스 선택

  • 데이터베이스 유형: 사용자 정의

  • 접속 문자열

    • 암호에 계정 암호를 사용할 때: jdbc:snowflake://ACCOUNT.snowflakecomputing.com/?db=DB&schema=SCHEMA&warehouse=WH
    • 암호에 PAT를 사용할 때: jdbc:snowflake://ACCOUNT.snowflakecomputing.com/?db=DB&schema=SCHEMA&warehouse=WH&authenticator=oauth
    • JDBC 드라이버 구성하기 문서 참조
    • ACCOUNT: 이전 단계에서 확인한 URL의 서브도메인을 입력
    • DB: 기본 데이터베이스
    • SCHEMA: 스키마
    • WH: 웨어하우스
  • 계정: Admin > Users & Roles 메뉴에서 확인할 수 있는 사용자 이름

  • 암호: 사용자 암호 또는 PAT(Programmatic Access Token) 사용. PAT 사용 시 네트워크 정책 활성화가 필요합니다.

필요한 스키마에 따라 접속 프로파일을 여러 개 추가하세요.