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)이 그것이에요.
본문
기능 — 일반 공개(Generally Available)
Openflow Snowflake Deployments는 AWS, Azure, GCP의 상업용 리전에 있는 모든 계정에서 사용할 수 있어요.
- execute-as 역할을 만들고 Snowflake에 데이터를 쓰는 데 필요한 권한을 부여해요.
- execute-as 역할을 런타임과 연결해요.
- 외부 접근 통합을 만들고 런타임과 연결해요. 네트워크 규칙 및 외부 접근 통합 생성을 참고해요.
- SPCS egress로 사설 시스템에 연결해야 한다면 아웃바운드 PrivateLink를 구성해요.
execute-as 역할 생성
Openflow 런타임을 만들 때 역할을 연결해요. 런타임 내에서 실행되는 플로우는 이 역할로 실행되므로 execute-as 역할이라고 불러요. 같은 execute-as 역할을 여러 런타임에서 재사용할 수 있어요. 자세한 내용은 execute-as 역할이란 무엇인가요?를 참고해요.
역할 생성은 런타임 생성의 전제 조건이에요.
- 역할을 만들어요.
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;
- execute-as 역할이 데이터 수집에 사용할 계획인 기존 웨어하우스를 사용할 수 있게 해요. 이 웨어하우스는 나중에 이 execute-as 역할을 사용하는 런타임용 커넥터를 구성할 때 사용해요.
GRANT USAGE, OPERATE ON WAREHOUSE <OPENFLOW_INGEST_WAREHOUSE> TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
- 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)이에요. 각각 런타임이 필요로 하는 외부 리소스에 대한 안전한 접근을 제공하는 데 사용돼요.
네트워크 규칙과 외부 접근 통합을 만드는 데 세 단계가 필요해요.
- 네트워크 식별자를 논리적 영역으로 그룹화해 네트워크 규칙을 만들어요.
- 네트워크 규칙 목록을 지정하고 execute-as 역할이 EAI에 대한 USAGE를 갖도록 하는 외부 접근 통합(EAI)을 만들어요.
- 런타임을 만들 때 Openflow UI에서 EAI를 런타임과 연결해요.
필요한 네트워크 규칙과 EAI를 만들려면 다음 단계를 수행해요.
Note
이 예제들은 생성되는 런타임 이름의 자리 표시자로 RUNTIME_NAME을 사용해요.
네트워크 규칙이나 EAI에 CREATE OR REPLACE를 사용하지 마세요
네트워크 규칙이나 외부 접근 통합을 교체하면 그것을 참조하는 모든 런타임에서 조용히 분리돼요. 새 객체에는 CREATE ... IF NOT EXISTS를, 기존 객체 수정에는 ALTER를 사용해요.
- 적절한 네트워크 규칙을 만들어요. 자세한 내용은 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를 참고해요.
- 외부 접근 통합을 만들거나 네트워크 규칙을 기존 통합에 추가해요. 자세한 내용은 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
);
- 이전에 만든 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)
- Set up Openflow - Snowflake Deployment: Task overview — 설정 작업 개요
- CREATE NETWORK RULE — 네트워크 규칙 생성
- CREATE EXTERNAL ACCESS INTEGRATION — 외부 접근 통합 생성