AWS PrivateLink 및 Snowflake Open Catalog
AWS PrivateLink 및 Snowflake Open Catalog
Business Critical 기능 — 이 기능은 Business Critical(이상)이 필요해요. 업그레이드 문의는 Snowflake 지원에 문의하세요.
일반적으로 사용 가능(GA) — 정부 리전에서는 사용할 수 없어요.
이 주제는 AWS PrivateLink를 구성해 인바운드 프라이빗 연결을 사용해 Snowflake Open Catalog 계정을 쿼리 엔진에 직접 연결하는 방법을 설명해요.
본문
사전 요구 사항
- Snowflake Open Catalog 계정이 AWS에 호스팅되어 있음.
- Open Catalog 계정의 프라이빗 연결 URL로 AWS DNS 서비스를 구성할 수 있는 권한.
지침은 Snowflake 커뮤니티의 PrivateLink를 통해 Snowflake에 접근하도록 AWS DNS 서비스(Route 53)를 구성하는 방법을 참조하세요.
1단계: AWS PrivateLink 활성화
이 절차에서 Open Catalog 계정에 대해 AWS PrivateLink를 활성화해요. 이 구성은 쿼리 엔진이 프라이빗 연결을 통해 Open Catalog에 연결할 수 있게 해요. Amazon Web Services(AWS) 계정의 12자리 식별자와 페더레이션된 사용자의 접근 자격 증명을 포함하는 페더레이션 토큰 값이 필요해요.
- 페더레이션 토큰 값을 얻으려면 AWS CLI를 사용해 다음 명령을 실행하고 값을 텍스트 편집기에 복사하세요:
aws sts get-federation-token --name sam - Snowflake Open Catalog에 로그인하세요.
- 탐색 메뉴에서 Settings를 선택하세요.
- Authorize를 선택하세요.
- Authorize Private Link 대화 상자에서 계정에 대한 프라이빗 연결을 활성화하세요:
- ID 필드에 Amazon Web Services(AWS) 계정의 12자리 식별자를 입력하세요.
- Federated token에 텍스트 편집기에 복사한 페더레이션 토큰 값을 입력하세요.
- Save를 선택하세요.
2단계: 계정이 인가됐는지 확인
Open Catalog 계정이 Snowflake Open Catalog 서비스에 대한 프라이빗 연결을 위해 인가됐는지 확인하려면 다음 절차를 따르세요:
- Snowflake Open Catalog에 로그인하세요.
- 탐색 메뉴에서 Settings를 선택하세요.
- Get을 선택하세요.
- Get Private Link authorization 대화 상자에서 계정을 확인하세요:
- ID 필드에 Amazon Web Services(AWS) 계정의 12자리 식별자를 입력하세요.
- Federated token 필드에 페더레이션 토큰 값을 입력하세요. 이 값은 AWS PrivateLink를 활성화했을 때 검색한 값이에요.
- Save를 선택하세요. 계정이 인가됐는지 여부를 알려주는 메시지가 나타나요.
3단계: Open Catalog 계정 설정 검색
나중에 VPC 엔드포인트와 VPC 네트워크를 만들고 구성하는 데 필요한 다음 설정을 검색하세요.
- Snowflake Open Catalog에 로그인하세요.
- 탐색 메뉴에서 Settings를 선택하세요.
- Settings 페이지에서 다음 설정의 값을 텍스트 편집기에 복사하세요:
- PrivateLink Account URL
- Regionless PrivateLink Account URL
- PrivateLink OCSP URL
- Regionless PrivateLink OCSP URL
- VPCE Service ID
이 값을 VPC 엔드포인트(VPCE) 만들기 및 구성, VPC 네트워크 구성, AWS PrivateLink를 통해 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 시스템 함수를 호출하세요.
- Snowflake 문서에서
privatelink-vpce-id는 Open Catalog의 VPCE Service ID에 해당해요.
4단계: VPC 엔드포인트 만들기 및 구성
이 절차에서 AWS VPC 환경에 해당 VPC 엔드포인트(VPCE)를 만들고 구성해요.
이미 Snowflake 계정용 VPC 엔드포인트를 만들었고 계정이 Open Catalog 계정과 같은 배포에 있다면 Open Catalog 계정용 새 VPC 엔드포인트를 만들 필요가 없어요. 이 단계를 선택적으로 건너뛸 수 있어요.
지침은 Snowflake 문서의 VPC 엔드포인트(VPCE) 만들기 및 구성을 2단계부터 참조하세요.
5단계: VPC 네트워크 구성
VPC 네트워크를 구성하려면 DNS 서비스에 CNAME 레코드를 만들어 프라이빗 연결용 Open Catalog 계정 설정의 적절한 엔드포인트 값이 VPC 엔드포인트의 DNS 이름으로 해석되게 하세요.
지침은 Snowflake 문서의 VPC 네트워크 구성을 참조하세요. 이 지침은 Snowflake용이므로 언급된 일부 기능은 Open Catalog에 적용되지 않는다는 점을 기억하세요. 예를 들어 regionless-snowsight-privatelink-url은 Snowsight용이며 Snowsight는 Open Catalog에서 지원되지 않아요.
DNS 구성에 대한 추가 지원은 내부 AWS 관리자에게 문의하세요.
6단계: AWS PrivateLink를 통해 Open Catalog 연결
- 서비스 연결을 등록하고 AWS PrivateLink를 통해 쿼리 엔진을 Snowflake 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를 참조. |
7단계(선택): 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용 프라이빗 연결 구성을 참조하세요.