Set up Openflow - Snowflake Deployment: Create the execute-as role and external access integrations

Set up Openflow - Snowflake Deployment: Create the execute-as role and external access integrations (Openflow - Snowflake 배포: execute-as 역할 및 외부 접근 통합 생성)

Openflow - Snowflake 배포 런타임이 데이터에 접근하려면 몇 가지 지원 리소스가 필요해요. 플로우가 Snowflake 객체에 접근하는 데 사용하는 execute-as 역할과, 런타임이 외부 데이터 소스에 도달할 수 있게 해주는 네트워크 규칙·외부 접근 통합(EAI)이 그것이에요.

출처: Snowflake Documentation

본문

기능 — 일반 공개(Generally Available)

Openflow Snowflake Deployments는 AWS, Azure, GCP의 상업용 리전에 있는 모든 계정에서 사용할 수 있어요.

  1. execute-as 역할을 만들고 Snowflake에 데이터를 쓰는 데 필요한 권한을 부여해요.
  2. execute-as 역할을 런타임과 연결해요.
  3. 외부 접근 통합을 만들고 런타임과 연결해요. 네트워크 규칙 및 외부 접근 통합 생성을 참고해요.
  4. SPCS egress로 사설 시스템에 연결해야 한다면 아웃바운드 PrivateLink를 구성해요.

execute-as 역할 생성

Openflow 런타임을 만들 때 역할을 연결해요. 런타임 내에서 실행되는 플로우는 이 역할로 실행되므로 execute-as 역할이라고 불러요. 같은 execute-as 역할을 여러 런타임에서 재사용할 수 있어요. 자세한 내용은 execute-as 역할이란 무엇인가요?를 참고해요.

역할 생성은 런타임 생성의 전제 조건이에요.

  1. 역할을 만들어요.

Note

<RUNTIME_NAME>은 연결된 런타임의 이름을 나타내요.

USE ROLE ACCOUNTADMIN;

CREATE ROLE IF NOT EXISTS OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

GRANT ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL TO ROLE OPENFLOW_ADMIN;
  1. execute-as 역할이 데이터 수집에 사용할 계획인 기존 웨어하우스를 사용할 수 있게 해요. 이 웨어하우스는 나중에 이 execute-as 역할을 사용하는 런타임용 커넥터를 구성할 때 사용해요.
GRANT USAGE, OPERATE ON WAREHOUSE <OPENFLOW_INGEST_WAREHOUSE> TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
  1. execute-as 역할이 Snowflake 객체를 사용·생성·접근할 수 있게 해요.

Note

생성되는 Openflow 커넥터에 따라 필요한 기본 객체가 달라져요. 아래 예는 설명 목적일 뿐이에요.

GRANT USAGE ON DATABASE <openflow_db> TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
GRANT USAGE ON SCHEMA <openflow_schema> TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

네트워크 규칙 및 외부 접근 통합 생성

다음 단계는 gen 1과 gen 2 Snowflake 배포 모두에 적용돼요. 두 세대 모두 런타임이 외부 데이터 소스에 도달할 수 있도록 네트워크 규칙과 EAI가 필요해요.

Snowflake의 보안 모델은 네트워크 정책을 사용해 Snowflake 외부의 특정 엔드포인트와 시스템에 대한 안전한 접근을 제공해요.

네트워크 정책의 두 가지 핵심 측면은 네트워크 규칙과 외부 접근 통합(EAI)이에요. 각각 런타임이 필요로 하는 외부 리소스에 대한 안전한 접근을 제공하는 데 사용돼요.

네트워크 규칙과 외부 접근 통합을 만드는 데 세 단계가 필요해요.

  1. 네트워크 식별자를 논리적 영역으로 그룹화해 네트워크 규칙을 만들어요.
  2. 네트워크 규칙 목록을 지정하고 execute-as 역할이 EAI에 대한 USAGE를 갖도록 하는 외부 접근 통합(EAI)을 만들어요.
  3. 런타임을 만들 때 Openflow UI에서 EAI를 런타임과 연결해요.

필요한 네트워크 규칙과 EAI를 만들려면 다음 단계를 수행해요.

Note

이 예제들은 생성되는 런타임 이름의 자리 표시자로 RUNTIME_NAME을 사용해요.

네트워크 규칙이나 EAI에 CREATE OR REPLACE를 사용하지 마세요

네트워크 규칙이나 외부 접근 통합을 교체하면 그것을 참조하는 모든 런타임에서 조용히 분리돼요. 새 객체에는 CREATE ... IF NOT EXISTS를, 기존 객체 수정에는 ALTER를 사용해요.

  1. 적절한 네트워크 규칙을 만들어요. 자세한 내용은 CREATE NETWORK RULE을 참고해요.

Note

Snowflake는 Openflow 객체에 사용해 온 것과 같은 인프라 스키마(openflow_db.openflow_schema)에 네트워크 규칙을 만들 것을 권장해요. 이렇게 하면 모든 것이 한곳에 있게 돼요. EAI는 계정 수준 객체이므로 데이터베이스나 스키마가 없지만, 네트워크 규칙은 스키마 수준 객체예요. 네트워크 규칙을 어디에 둘지는 execute-as 역할이 EAI에 접근할 수 있는 한 선택 사항이지만, 인프라 스키마를 사용하면 단순하고 일관돼요.

USE DATABASE <openflow_db>;
USE SCHEMA <openflow_schema>;

CREATE NETWORK RULE IF NOT EXISTS OPENFLOW_<RUNTIME_NAME>_NETWORK_RULE
 MODE = EGRESS
 TYPE = HOST_PORT
 VALUE_LIST = ('comma separated list of host:port pairs');

Note

사설 연결의 경우 TYPE = PRIVATE_HOST_PORT를 사용하고 포트를 명시적으로 포함해요. 호스트 이름은 소스와 사설 연결 구성에 따라 달라져요. 고객 관리형 Azure Private Link Service를 통한 SQL Server의 경우 SQL Server용 Azure Private Link Service를 참고해요.

  1. 외부 접근 통합을 만들거나 네트워크 규칙을 기존 통합에 추가해요. 자세한 내용은 CREATE EXTERNAL ACCESS INTEGRATION을 참고해요.

새 EAI를 만들려면:

USE ROLE ACCOUNTADMIN;

CREATE EXTERNAL ACCESS INTEGRATION IF NOT EXISTS OPENFLOW_<RUNTIME_NAME>_EAI
ALLOWED_NETWORK_RULES = (OPENFLOW_<RUNTIME_NAME>_NETWORK_RULE)
ENABLED = TRUE;

네트워크 규칙을 기존 EAI에 추가하려면 먼저 어떤 규칙이 이미 연결되어 있는지 확인한 다음 기존·새 규칙을 모두 포함하도록 EAI를 업데이트해요.

USE ROLE ACCOUNTADMIN;

-- Check the current rules on the EAI
DESCRIBE EXTERNAL ACCESS INTEGRATION OPENFLOW_<RUNTIME_NAME>_EAI;

출력에서 ALLOWED_NETWORK_RULES 속성을 찾아 기존 규칙을 확인해요. 그런 다음 기존 규칙을 모두 나열하면서 새 규칙과 함께 EAI를 업데이트해요.

ALTER EXTERNAL ACCESS INTEGRATION OPENFLOW_<RUNTIME_NAME>_EAI
SET ALLOWED_NETWORK_RULES = (
   <EXISTING_RULE_1>,
   <EXISTING_RULE_2>,
   OPENFLOW_<RUNTIME_NAME>_NETWORK_RULE
);
  1. 이전에 만든 execute-as 역할에 EAI에 대한 접근을 부여해요.
GRANT USAGE ON INTEGRATION OPENFLOW_<RUNTIME_NAME>_EAI TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

네트워크 규칙이나 EAI에 CREATE OR REPLACE를 사용하지 마세요

네트워크 규칙이나 외부 접근 통합을 교체하면 그것을 참조하는 모든 런타임에서 조용히 분리돼요. 새 객체에는 CREATE ... IF NOT EXISTS를, 기존 객체 수정에는 ALTER를 사용해요.

다음 단계

런타임 생성

더 알아보기 (Learn more)