Azure Private Link 및 Snowflake Open Catalog
Azure Private Link 및 Snowflake Open Catalog
Business Critical 기능 — 이 기능은 Business Critical(이상)이 필요해요. 업그레이드 문의는 Snowflake 지원에 문의하세요.
일반적으로 사용 가능(GA) — 정부 리전에서는 사용할 수 없어요.
이 주제는 Azure Private Link를 구성해 인바운드 프라이빗 연결을 사용해 Snowflake Open Catalog 계정을 쿼리 엔진에 직접 연결하는 방법을 설명해요.
본문
사전 요구 사항
- Snowflake Open Catalog 계정이 Azure에 호스팅되어 있음.
- Open Catalog 계정의 프라이빗 연결 URL로 DNS 서비스를 구성할 수 있는 권한.
1단계: Open Catalog 계정 설정 검색
Azure Private Link로 Open Catalog 접근을 구성하기 위한 다음 설정을 검색하세요.
- Snowflake Open Catalog에 로그인하세요.
- 탐색 메뉴에서 Settings를 선택하세요.
- Settings 페이지에서 다음 설정의 값을 텍스트 편집기에 복사하세요:
- PrivateLink Account URL
- Regionless PrivateLink Account URL
- PrivateLink OCSP URL
- Regionless PrivateLink OCSP URL
- Private Link Service ID
이 값을 Azure Private Link로 Open Catalog 접근 구성 및 Azure Private Link를 통해 Open Catalog 연결할 때 붙여넣어요.
각 설정에 대한 설명은 Snowflake 문서의 SYSTEM$GET_PRIVATELINK_CONFIG 시스템 함수의 반환 값을 참조하세요. 이 주제에서 계정 설정의 이름은 JSON 형식이에요.
설명이 Snowflake 계정을 가리키지만 값은 실제로 Snowflake Open Catalog 계정에 대한 것임을 기억하세요. 예를 들어 privatelink-account-url은 Snowflake Open Catalog 계정의 URL이에요.
- 선택 사항: 이 값을 JSON 형식으로 검색하려면 Open Catalog용 Snowflake CLI 연결 만들기를 수행한 다음 SYSTEM$GET_PRIVATELINK_CONFIG 시스템 함수를 호출하세요.
2단계: Azure Private Link로 Open Catalog 접근 구성
이 섹션은 VNet 환경 구성을 위한 Open Catalog 관련 세부 내용만 다뤄요. 또한 Snowflake는 필요한 방화벽 업데이트와 DNS 레코드의 실제 구성에 책임이 없다는 점에 유의하세요. 이러한 구성 작업에 문제가 있으면 Microsoft 지원에 직접 문의하세요.
이 섹션은 Azure Private Link를 사용해 VNet을 Open Catalog VNet에 연결하는 방법을 설명해요.
지침을 완료하려면 Azure CLI 또는 Azure PowerShell을 사용해야 해요. 설치 도움말은 Microsoft 문서의 Azure CLI 또는 Azure PowerShell을 참조하세요.
Azure Private Link를 사용해 Snowflake Open Catalog에 대한 연결을 시작한 후 Azure 포털에서 연결의 승인 상태를 확인할 수 있어요.
프라이빗 엔드포인트 만들기
이미 Snowflake 계정용 프라이빗 엔드포인트를 만들었고 계정이 Open Catalog 계정과 같은 배포에 있다면 Open Catalog 계정용 새 프라이빗 엔드포인트를 만들 필요가 없어요. 이 단계를 선택적으로 건너뛸 수 있어요.
- Azure 계정 세부 정보를 검색하세요. 다음 예제는 Azure CLI의
az account list명령을 사용해요.
Name CloudName SubscriptionId State IsDefault
------- ---------- ------------------------------------ ------- ----------
MyCloud AzureCloud 13c... Enabled True
- Azure 포털에서 Private Link를 검색하고 결과에서 Private Link를 선택하세요.
- Private endpoints를 클릭한 다음 Add를 클릭하세요.
- Basics 탭에서 환경에 대한 Subscription, Resource group, Name, Region 필드를 완성한 다음 Next: Resource를 클릭하세요.
- Resource 탭의 Connection Method에서 Connect to an Azure resource by resource ID or alias를 선택하세요.
- Resource ID or alias에 프라이빗 연결용 Open Catalog 계정 설정을 검색했을 때 얻은
Private Link Service ID값을 입력하세요. alias 값에 대한 오류 메시지를 받으면 Snowflake 지원에 리소스 ID 값을 문의하고 그 값으로 이 단계를 반복하세요.
프라이빗 엔드포인트가 승인되면 Private Link Center 페이지의 Private endpoints 섹션에 있는 CONNECTION STATE에 Pending 값이 표시돼요. 다음 절차에서 인가를 완료하면 이 값은 Approved로 바뀌어요.
인바운드 프라이빗 연결 활성화
이 절차에서 Open Catalog 계정에 대해 Azure Private Link를 활성화해요. 이 구성은 쿼리 엔진이 프라이빗 연결을 통해 Open Catalog에 연결할 수 있게 해요. 프라이빗 엔드포인트 리소스 ID, 구독 ID, 페더레이션된 사용자의 접근 자격 증명을 포함하는 페더레이션 토큰 값이 필요해요.
- 이 값을 얻으려면 Azure CLI에서 다음 명령을 실행하세요:
- 프라이빗 엔드포인트 리소스 ID를 얻으려면 다음 명령을 실행하고 값을 텍스트 편집기에 복사하세요:
az network private-endpoint show - 구독 ID를 얻으려면 다음 명령을 실행하고 출력의 SubscriptionID 열 값을 확인하세요:
az account list --output table - 페더레이션 토큰 값을 얻으려면 다음 명령을 실행하고 accessToken 값을 텍스트 편집기에 복사하세요:
여기서az account get-access-token --subscription <SubscriptionID>SubscriptionID는 이전 단계에서 얻은 고유 식별자예요.
- 프라이빗 엔드포인트 리소스 ID를 얻으려면 다음 명령을 실행하고 값을 텍스트 편집기에 복사하세요:
Azure 액세스 토큰을 생성하는 사용자는 구독에 대해 읽기 권한이 있어야 해요. 최소 권한 권한은 Microsoft.Subscription/subscriptions/acceptOwnershipStatus/read이에요. 대안으로 기본 역할 Reader가 더 광범위한 권한을 부여해요.
accessToken 값은 민감한 정보이며 비밀번호 값처럼 취급해야 해요 — 이 값을 공유하지 마세요. Snowflake 지원에 연락해야 한다면 지원 티켓을 만들기 전에 명령과 URL에서 액세스 토큰을 제거하세요.
- Snowflake Open Catalog에 로그인하세요.
- 탐색 메뉴에서 Settings를 선택하세요.
- Authorize를 선택하세요.
- Authorize Private Link 대화 상자에서 계정에 대한 프라이빗 연결을 활성화하세요:
- ID에 텍스트 편집기에 복사한 프라이빗 엔드포인트 리소스 ID를 입력하세요.
- Federated token에 텍스트 편집기에 복사한 페더레이션 토큰 값을 입력하세요.
- Save를 선택하세요.
계정이 인가됐는지 확인
Open Catalog 계정이 Snowflake Open Catalog 서비스에 대한 프라이빗 연결을 위해 인가됐는지 확인하려면 다음 단계를 따르세요.
- Snowflake Open Catalog에 로그인하세요.
- 탐색 메뉴에서 Settings를 선택하세요.
- Get을 선택하세요.
- Get Private Link authorization 대화 상자에서 계정을 확인하세요:
- ID 필드에 프라이빗 엔드포인트 리소스 ID를 입력하세요. 이 값은 인바운드 프라이빗 연결을 활성화했을 때 검색한 값이에요.
- Federated token 필드에 페더레이션 토큰 값을 입력하세요. 이 값은 인바운드 프라이빗 연결을 활성화했을 때 검색한 값이에요.
- Save를 선택하세요. 계정이 인가됐는지 여부를 알려주는 메시지가 나타나요.
DNS 설정
Open Catalog에 대한 모든 요청은 프라이빗 엔드포인트를 통해 라우팅되어야 해요. Open Catalog 계정 및 OCSP URL이 프라이빗 엔드포인트의 프라이빗 IP 주소로 해석되도록 DNS를 업데이트하세요.
- 엔드포인트 IP 주소를 얻으려면 Azure 포털 검색 창에 만든 프라이빗 엔드포인트의 이름을 입력하세요.
- Network Interface 결과를 선택하세요.
- Private IP address 값을 복사하세요.
- 프라이빗 연결용 Open Catalog 계정 설정의 적절한 엔드포인트 값이 프라이빗 IP 주소로 해석되도록 DNS를 구성하세요.
3단계: Azure Private Link를 통해 Open Catalog 연결
- 서비스 연결을 등록하고 Azure Private Link를 통해 쿼리 엔진을 Open Catalog에 연결하려면 다음 코드를 사용하세요:
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('iceberg_lab') \
.config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,<maven_coordinate>') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.config('spark.sql.defaultCatalog', 'opencatalog') \
.config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.opencatalog.type', 'rest') \
.config('spark.sql.catalog.opencatalog.uri','https://<open_catalog_privatelink_account_url>/polaris/api/catalog') \
.config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \
.config('spark.sql.catalog.opencatalog.credential','<client_id>:<client_secret>') \
.config('spark.sql.catalog.opencatalog.warehouse','<catalog_name>') \
.config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:<principal_role_name>') \
.getOrCreate()
매개변수
<open_catalog_account_identifier>에 지정하는 값과 일치하도록 DNS 서비스를 설정해야 해요.
| 매개변수 | 설명 |
|---|---|
<catalog_name> |
연결할 카탈로그의 이름을 지정. 중요: <catalog_name>은 대소문자를 구분함. |
<maven_coordinate> |
외부 클라우드 스토리지 제공자의 Maven 좌표를 지정: S3: software.amazon.awssdk:bundle:2.20.160, Cloud Storage(from Google): org.apache.iceberg:iceberg-gcp-bundle:1.5.2, Azure: org.apache.iceberg:iceberg-azure-bundle:1.5.2. 이 매개변수가 보이지 않으면 올바른 값이 코드 샘플에 이미 지정된 것임. |
<client_id> |
사용할 서비스 주체의 클라이언트 ID를 지정. 새 서비스 연결을 구성할 때 복사한 Client ID를 입력. |
<client_secret> |
사용할 서비스 주체의 클라이언트 secret을 지정. 새 서비스 연결을 구성할 때 복사한 Secret을 입력. |
<open_catalog_privatelink_account_url> |
AWS PrivateLink 또는 Azure Private Link를 사용해 Snowflake 계정에 연결할 URL을 지정. Open Catalog 계정 설정을 검색할 때 복사한 다음 값 중 하나를 입력: PrivateLink Account URL, Regionless PrivateLink Account URL. Open Catalog 계정 설정 검색 방법은 Open Catalog 계정이 호스팅된 클라우드 플랫폼 지침을 참조: AWS, Azure. |
<principal_role_name> |
서비스 주체에 부여된 보안 주체 역할을 지정. 이 보안 주체 역할을 보려면 Open Catalog에서 Connections 페이지를 선택하고 서비스 연결을 선택한 다음 Principal Details 대화 상자에서 Principal Roles를 참조. |
4단계(선택): Snowflake용 카탈로그 통합 만들기
Snowflake를 사용해 Open Catalog 관리 테이블을 쿼리한다면 프라이빗 IP 주소를 사용하는 Snowflake용 카탈로그를 만들어요. 이 카탈로그 통합을 만들려면 Snowflake 계정이 Open Catalog 계정과 같은 배포에 있어야 해요.
예시는 Snowflake 문서의 label-example_catalog_integration_private_ip_address를 참조하세요.
Snowflake Open Catalog UI용 프라이빗 연결도 구성할 수 있어요. 이 구성은 Open Catalog 계정용 프라이빗 연결 구성과 결합해 공개 인터넷 대신 프라이빗 연결을 통해 Open Catalog UI에 접근할 수 있게 해요. 이 접근을 구성하려면 Snowflake Open Catalog UI용 프라이빗 연결 구성을 참조하세요.