이 문서에서는Google Cloud내에서 Snowflake 카탈로그 (Snowflake Horizon)의 데이터를 직접 쿼리할 수 있도록 크로스 클라우드 레이크하우스를 설정하는 방법을 설명합니다. 이 기능을 사용하면 외부 데이터 소스를 기존 Google Cloud환경과 통합하여 데이터 분석을 통합할 수 있습니다.
그런 다음 Lakehouse를 사용하여 페더레이션 데이터에 대한 액세스를 관리할 수 있습니다.
시작하기 전에
- 레이크하우스 개요를 검토하여 레이크하우스가 데이터 액세스를 관리하는 방법을 알아보세요.
- 크로스 클라우드 레이크하우스 정보를 읽고 작동 방식을 이해합니다.
- 지원되는 카탈로그를 검토하여 외부 위치 요구사항과 지원되는 구성을 확인하세요.
- 리전 Secret Manager 보안 비밀 사용 방법을 이해합니다. 비밀 기반 인증을 사용하여 Snowflake로 크로스 클라우드 Lakehouse를 설정하는 데 필요합니다.
- 비밀 기반 인증을 사용하는 경우 대상 카탈로그에 대한 읽기 액세스 권한이 있는 개인 액세스 토큰 (PAT)을 Snowflake Horizon 환경 내에서 생성합니다. 이 프로세스는 이 문서에서 다루지 않습니다.
- 워크로드 아이덴티티 제휴를 사용하는 경우 서비스 사용자를 프로비저닝할 수 있는
ACCOUNTADMIN권한으로 Snowflake 계정 UI에 액세스할 수 있는지 확인합니다. - 선택사항: Google Cloud VPC와 원격 클라우드 제공업체의 VPC (예: AWS) 간의 비공개 인터커넥트를 통해 쿼리를 라우팅하려는 경우 원격 제공업체에 활성 계정이 있고, 전용 크로스 클라우드 인터커넥트 또는 파트너 크로스 클라우드 인터커넥트를 프로비저닝하고, Cloud Router와 BGP 세션을 설정하고, 두 클라우드 환경 모두에 필요한 ID 및 액세스 관리 (IAM) 권한이 있는지 확인합니다.
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
필요한 역할
크로스 클라우드 레이크하우스를 설정하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
레이크하우스 카탈로그 관리:
BigLake 관리자 (
roles/biglake.admin) -
보안 비밀 관리: Secret Manager 관리자 (
roles/secretmanager.admin) -
비공개 상호 연결을 통해 트래픽 라우팅: Compute 네트워크 관리자 (
roles/compute.networkAdmin), 서비스 디렉터리 뷰어 (roles/servicedirectory.viewer), 서비스 디렉터리 PSC 승인 서비스 (roles/servicedirectory.pscAuthorizedService)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
지원되는 카탈로그 세부정보
이 가이드에서는 Amazon Web Services (AWS) 및 Google Cloud에서 Snowflake 카탈로그 (Snowflake Horizon)를 사용하여 크로스 클라우드 Lakehouse를 설정하는 방법을 설명합니다. 외부 위치 요구사항 및 지원되는 구성에 관한 자세한 내용은 지원되는 카탈로그를 참고하세요.
제한사항 및 고려사항
이 섹션에는 크로스 클라우드 레이크하우스 사용에 관한 제한사항과 고려사항이 나와 있습니다.
- 지원되는 클라우드 제공업체: 교차 클라우드 Lakehouse와의 비공개 상호 연결은 Amazon Web Services (AWS)와 같은 원격 클라우드 제공업체에서 지원됩니다. 전용 Cross-Cloud Interconnect 또는 파트너 Cross-Cloud Interconnect를 사용할 수 있습니다.
- 네트워크 라우팅: 비공개 인터커넥트 (예: 전용 CCI 또는 파트너 CCI)가 구성되지 않은 경우 쿼리는 공개 인터넷을 통해 라우팅됩니다. 이로 인해 원격 클라우드 제공업체에서 이그레스 요금이 더 많이 청구되고 성능을 예측하기 어려워질 수 있습니다.
- 데이터 최신성: 연합 카탈로그의
--refresh-interval플래그는 메타데이터가 동기화되는 빈도를 결정합니다. 간격이 짧을수록 최신 데이터가 제공되지만 원격 카탈로그 제공업체에서 추가 API 비용이 발생할 수 있습니다. - Iceberg 측정항목 보고:
Iceberg 측정항목 보고는 페더레이션 카탈로그에서 사용할 수 없습니다. 제휴 카탈로그에 액세스할 때 Iceberg 클라이언트에서
rest-metrics-reporting-enabled속성을false로 설정합니다.
일반 워크플로
크로스 클라우드 레이크하우스를 설정하고 사용하려면 다음 일반 단계를 따르세요.
- Cross-Cloud Interconnect 설정 (선택사항): Google Cloud VPC와 원격 클라우드 제공업체 간에 비공개 연결을 구성합니다.
- 제휴 설정: 인증을 구성하고 Lakehouse에서 제휴 카탈로그를 만듭니다.
- 보안 비밀 기반 인증 (PAT): 원격 카탈로그 사용자 인증 정보를 사용하여 Secret Manager에서 보안 비밀을 만듭니다. 그런 다음 Lakehouse에서 제휴 카탈로그를 만들고 카탈로그 서비스 계정에 보안 비밀에 대한 액세스 권한을 부여합니다.
- 워크로드 아이덴티티 제휴 (WIF): 필요한 Snowflake 역할을 지정하여 Lakehouse에 제휴 카탈로그를 만듭니다. 그런 다음 카탈로그의 서비스 계정 ID를 Snowflake의 서비스 사용자에 연결합니다. Snowflake 서비스 사용자에게 원격 Snowflake 카탈로그에 대한 사용 권한이 있어야 합니다.
- 연결 확인: Lakehouse가 원격 카탈로그에 성공적으로 연결할 수 있는지 확인합니다.
- 데이터 쿼리: BigQuery 또는 Managed Service for Apache Spark를 사용하여 통합 데이터에 대해 쿼리를 실행합니다. 자세한 내용은 크로스 클라우드 Lakehouse 사용을 참고하세요.
- 권한 구성: IAM을 사용하여 통합 데이터를 보고 쿼리할 수 있는 사용자를 관리합니다.
Cross-Cloud Interconnect 설정 (선택사항)
원격 카탈로그에 대한 쿼리는 기본적으로 공개 인터넷을 통해 이동합니다. 보안 및 규정 준수를 강화하고, 예측 가능한 성능을 제공하며, 데이터 전송 비용을 줄이려면 비공개 인터커넥트를 사용하세요. 이렇게 하면 Google Cloud가상 프라이빗 클라우드 (VPC)와 원격 클라우드 제공업체의 네트워크 (예: AWS) 간에 전용 비공개 네트워크 연결이 설정됩니다.
Google Cloud VPC와 원격 클라우드 제공업체의 VPC(예: AWS) 간에 다음 비공개 인터커넥트 옵션 중 하나를 프로비저닝하고 구성할 수 있습니다.
- 전용 Cross-Cloud Interconnect: 전용 물리적 연결입니다.
- 파트너 Cross-Cloud Interconnect: 지원되는 서비스 제공업체를 통한 연결입니다.
경로 교환을 위해 Google Cloud 의 Cloud Router와 원격 클라우드 제공업체의 VPC 간에 BGP 세션을 설정합니다.
비공개 쿼리를 사용 설정하려면 비공개 상호 연결을 통해 Lakehouse에서 원격 스토리지 버킷 (예: AWS Amazon S3 버킷)으로의 경로를 구성해야 합니다. 이 라우팅을 구성하기 위해 따를 수 있는 두 가지 아키텍처 흐름이 있습니다.
- 내부 리전 프록시 네트워크 부하 분산기 라우팅: 이 흐름에서는Google Cloud 내부 리전 프록시 네트워크 부하 분산기를 사용하여 여러 AWS 탄력적 네트워크 인터페이스 (ENI)를 가리키는 하이브리드 연결 네트워크 엔드포인트 그룹 (NEG)에 요청을 분산합니다. 이 흐름은 부하 분산, 확장성, 고가용성에 필수적입니다. 파트너 CCI에는 필요하고 전용 CCI에는 부하 분산, 확장성, 고가용성을 위해 권장됩니다.
- 직접 엔드포인트 라우팅: 이 흐름은 서비스 디렉터리를 단일 AWS 인터페이스 VPC 엔드포인트 IP 주소에 직접 연결합니다. 이 흐름은 전용 CCI에만 적용되며 파트너 CCI에는 지원되지 않습니다.
아키텍처 요구사항에 맞는 구성 흐름을 선택합니다.
내부 리전 프록시 네트워크 부하 분산기
고가용성 및 부하 분산을 위해 여러 AWS ENI에 요청을 분산하도록 내부 리전 프록시 네트워크 부하 분산기를 구성하려면 다음 단계를 따르세요.
AWS 네트워킹 구성
먼저 Amazon S3 VPC 인터페이스 엔드포인트 (AWS PrivateLink)를 만듭니다.
- AWS VPC 콘솔에서 Amazon S3용 인터페이스 엔드포인트를 만듭니다.
- 서비스 이름으로
com.amazonaws.AWS_REGION.s3를 지정합니다. - Direct Connect를 통해 Google Cloud VPC에 연결된 VPC 및 서브넷을 선택합니다.
- 인바운드 액세스를 제어하기 위해 엔드포인트에 보안 그룹을 연결합니다.
- 이렇게 하면 선택한 각 서브넷에 탄력적 네트워크 인터페이스 (ENI)가 프로비저닝됩니다. 이러한 ENI의 비공개 IP 주소를 확인합니다.
다음으로 보안 그룹을 구성합니다.
- Amazon S3 엔드포인트 ENI에 연결된 보안 그룹이 Google Cloud VPC에서 포트
443의 인바운드 TCP 트래픽을 허용하는지 확인합니다. 여기에는 상태 점검과 전달된 트래픽을 허용하는Google Cloud 프록시 전용 서브넷의 CIDR 범위가 포함되어야 합니다.
네트워킹 Google Cloud 구성
설정을 간소화하려면 다음 명령어를 실행하여 내부 부하 분산기를 구성하세요. 고급 구성 또는 자세한 내용은 하이브리드 엔드포인트용 내부 리전 프록시 네트워크 부하 분산기 설정을 참고하세요.
gcloud compute networks subnets create PROXY_SUBNET_NAME \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION \ --network=VPC_NETWORK \ --range=PROXY_SUBNET_RANGE
다음을 바꿉니다.
PROXY_SUBNET_NAME: 프록시 전용 서브넷의 이름입니다.PROXY_SUBNET_RANGE: VPC 네트워크 내에서 사용되지 않는 CIDR 범위 (예:10.129.0.0/23)
리전 상태 점검을 만듭니다.
gcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --region=REGION \ --port=443
다음을 바꿉니다.
HEALTH_CHECK_NAME: 상태 점검의 이름입니다.REGION: Google Cloud 리전 (예:us-east4)
하이브리드 연결 네트워크 엔드포인트 그룹 (NEG)을 만들고 엔드포인트를 추가합니다.
각 영역에 대해 하이브리드 NEG (
NON_GCP_PRIVATE_IP_PORT)를 만듭니다.gcloud compute network-endpoint-groups create NEG_NAME \ --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \ --zone=ZONE \ --network=VPC_NETWORK
AWS ENI의 비공개 IP 주소를 해당 하이브리드 NEG에 추가합니다.
gcloud compute network-endpoint-groups update NEG_NAME \ --zone=ZONE \ --add-endpoint="ip=AWS_S3_IP,port=443"
다음을 바꿉니다.
NEG_NAME: 하이브리드 NEG의 이름입니다.ZONE: Google Cloud 영역 (예:us-east4-a). 이 영역은 Cross-Cloud Interconnect VLAN 연결의 리전 내에 있어야 합니다.VPC_NETWORK: VPC 네트워크의 이름입니다.AWS_S3_IP: 해당 영역에 있는 AWS Amazon S3 VPC 엔드포인트 (ENI)의 비공개 IP 주소입니다.
AWS ENI가 여러 영역에 분산되어 있는 경우 이 명령어를 반복하여 다른 영역의 NEG를 만들고 엔드포인트를 추가합니다.
백엔드 서비스를 만들고 구성합니다.
내부 관리형 부하 분산을 사용하여 리전 백엔드 서비스를 만듭니다.
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=TCP \ --region=REGION \ --health-checks=HEALTH_CHECK_NAME \ --health-checks-region=REGION
하이브리드 NEG를 백엔드 서비스에 추가합니다.
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --region=REGION \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=ZONE \ --balancing-mode=CONNECTION \ --max-connections=MAX_CONNECTIONS
다음을 바꿉니다.
BACKEND_SERVICE_NAME: 백엔드 서비스의 이름입니다.NEG_NAME: 이전 단계에서 만든 하이브리드 NEG의 이름입니다.ZONE: Google Cloud 영역 (예:us-east4-a)MAX_CONNECTIONS: 백엔드에서 처리해야 하는 최대 동시 연결 수입니다 (예:100).
생성한 각 하이브리드 NEG에 대해
add-backend명령어를 반복합니다.부하 분산기 프런트엔드를 구성합니다.
대상 TCP 프록시를 만듭니다.
gcloud compute target-tcp-proxies create TARGET_PROXY_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --region=REGION
대상 프록시로 트래픽을 라우팅하는 전달 규칙을 만듭니다.
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=VPC_NETWORK \ --subnet=VPC_SUBNET \ --ports=443 \ --region=REGION \ --target-tcp-proxy=TARGET_PROXY_NAME \ --target-tcp-proxy-region=REGION \ --allow-global-access
다음을 바꿉니다.
TARGET_PROXY_NAME: 대상 프록시의 이름입니다.FORWARDING_RULE_NAME: 전달 규칙의 이름입니다.VPC_SUBNET: VPC 서브네트워크의 이름입니다.
부하 분산기의 전달 규칙을 만든 후 부하 분산기에 할당된 내부 IP 주소를 확인합니다. ILB_IP_ADDRESS입니다.
서비스 디렉터리 구성
Lakehouse가 검색할 수 있도록 서비스 디렉터리에 ILB의 IP 주소를 등록합니다.
원격 클라우드의 네임스페이스를 만듭니다.
gcloud service-directory namespaces create NAMESPACE \ --project=PROJECT_ID \ --location=REGION
다음을 바꿉니다.
NAMESPACE: 네임스페이스의 고유 식별자입니다.PROJECT_ID: Google Cloud 프로젝트 ID입니다.REGION: Google Cloud 리전입니다. 예를 들면us-east4입니다. 이 리전은 제휴 카탈로그와 동일한 리전이어야 합니다.
서비스 디렉터리 네임스페이스에서 서비스를 만듭니다.
gcloud service-directory services create SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION
다음을 바꿉니다.
SERVICE_NAME: 서비스의 고유 식별자입니다.
서비스에서 ILB의 엔드포인트를 만듭니다.
gcloud service-directory endpoints create ENDPOINT_NAME \ --project=PROJECT_ID \ --namespace=NAMESPACE \ --service=SERVICE_NAME \ --location=REGION \ --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \ --address=ILB_IP_ADDRESS \ --port=443
다음을 바꿉니다.
ENDPOINT_NAME: 엔드포인트의 고유 식별자입니다.PROJECT_NUMBER: Google Cloud프로젝트 번호--network플래그에 프로젝트 번호를 사용합니다.ILB_IP_ADDRESS: ILB 전달 규칙의 내부 IP 주소입니다.
직접 엔드포인트
트래픽을 단일 AWS 인터페이스 VPC 엔드포인트 IP 주소로 직접 라우팅하도록 서비스 디렉터리를 구성하려면 다음 단계를 따르세요.
- AWS VPC 내에서 Amazon S3용 인터페이스 VPC 엔드포인트를 만듭니다. 이 엔드포인트의 IP 주소와 포트를 기록해 둡니다.
원격 클라우드의 네임스페이스를 만듭니다.
gcloud service-directory namespaces create NAMESPACE \ --project=PROJECT_ID \ --location=REGION
다음을 바꿉니다.
NAMESPACE: 네임스페이스의 고유 식별자입니다.PROJECT_ID: Google Cloud 프로젝트 ID입니다.REGION: Google Cloud 리전입니다. 예를 들면us-east4입니다. 이 리전은 제휴 카탈로그와 동일한 리전이어야 합니다.
서비스 디렉터리 네임스페이스에서 서비스를 만듭니다.
gcloud service-directory services create SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION
다음을 바꿉니다.
SERVICE_NAME: 서비스의 고유 식별자입니다.
Amazon S3 인터페이스 VPC 엔드포인트의 라우팅 정보가 포함된 서비스에 엔드포인트를 만듭니다.
gcloud service-directory endpoints create ENDPOINT_NAME \ --service=SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION \ --address=S3_VPCE_IP_ADDRESS \ --port=S3_VPCE_PORT \ --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK
다음을 바꿉니다.
ENDPOINT_NAME: 엔드포인트의 고유 식별자입니다.S3_VPCE_IP_ADDRESS: Amazon S3 인터페이스 VPC 엔드포인트의 IP 주소입니다. 예를 들면10.0.1.45입니다.S3_VPCE_PORT: Amazon S3 인터페이스 VPC 엔드포인트의 포트 번호입니다. 예를 들면443입니다.PROJECT_NUMBER: Google Cloud프로젝트 번호--network플래그에 프로젝트 번호를 사용합니다.VPC_NETWORK: 비공개 인터커넥트와 연결된 Google Cloud VPC 네트워크 이름입니다.
제휴 설정
데이터를 쿼리하려면 원격 Snowflake 카탈로그에 연결되는 Lakehouse 제휴 카탈로그를 설정해야 합니다. 인증 방법을 선택합니다.
보안 비밀 기반 (PAT)
인증 구성
연동에는 원격 Snowflake 카탈로그에 액세스할 사용자 인증 정보가 필요합니다. Snowflake Horizon의 경우 세션에 필요한 특정 Snowflake 역할과 함께 Snowflake에서 생성된 장기 토큰인 개인 액세스 토큰 (PAT)을 사용해야 합니다.
리전 Secret Manager에서 사용자 인증 정보를 저장할 보안 비밀을 만듭니다.
페이로드가 포함된
credentials.json이라는 JSON 파일을 만듭니다.{ "client_secret": "SNOWFLAKE_PAT_TOKEN", "scope": "session:role:SNOWFLAKE_ROLE" }
다음을 바꿉니다.
SNOWFLAKE_PAT_TOKEN: Snowflake 개인 액세스 토큰 (PAT)입니다.SNOWFLAKE_ROLE: 세션에 필요한 특정 Snowflake 역할입니다. 예를 들면ICEBERG_VIEW입니다.
Secret Manager의 리전 엔드포인트를 구성합니다.
기본적으로 Secret Manager는 전역 엔드포인트를 사용합니다. 하지만 크로스 클라우드 Lakehouse를 사용하려면 비밀이 Lakehouse 카탈로그와 동일한 리전에 저장되어야 합니다.
gcloudCLI를 사용하여 리전 보안 비밀과 상호작용하려면 현재 세션 또는 프로필의 기본 API 엔드포인트를 재정의해야 합니다. 연결 문제를 방지하려면 보안 비밀과 카탈로그를 동일한 리전에 만들어야 합니다.gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
다음을 바꿉니다.
REGION: Secret Manager 보안 비밀이 저장된 Google Cloud 리전입니다. 예를 들면us-east4입니다. 연결 문제를 방지하려면 보안 비밀과 카탈로그를 동일한 리전에서 만들어야 합니다.
페이로드를 Secret Manager에 업로드합니다.
gcloud secrets create SNOWFLAKE_SECRET_NAME \ --location="REGION" \ --project="PROJECT_ID" \ --data-file=credentials.json
다음을 바꿉니다.
SNOWFLAKE_SECRET_NAME: Snowflake 보안 비밀의 이름입니다.PROJECT_ID: Google Cloud 프로젝트 ID입니다.
제휴 카탈로그 만들기
gcloud alpha biglake iceberg catalogs create명령어를 사용하여 연합 카탈로그를 만듭니다.공개 인터넷 (CCI 없음)
CCI를 구성하지 않으면 연결이 공용 인터넷을 통해 안전하게 이동합니다.
gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="snowflake" \ --secret-name="projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME" \ --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \ --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \ --refresh-interval="REFRESH_INTERVAL" \ --namespace-filters="NAMESPACE_FILTERS"
다음을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트 ID입니다.REGION: 제휴 카탈로그가 생성되는 Lakehouse 리전입니다. 예를 들면us-east4입니다. 지연 시간을 최소화하려면 Snowflake 리전과 가장 가까운 Google Cloud 리전을 선택하세요.SNOWFLAKE_SECRET_NAME: Snowflake 보안 비밀의 이름입니다.SNOWFLAKE_ACCOUNT_IDENTIFIER: Snowflake 계정 식별자입니다 (예:my_org-my_account).SNOWFLAKE_WAREHOUSE: 페더레이션할 Snowflake 카탈로그 이름입니다.REFRESH_INTERVAL: 선택사항: 카탈로그 정보를 업데이트하는 빈도를 지정합니다. 이 값을 기간으로 설정합니다(예:330s또는5m30s). 간격이 짧을수록 데이터가 더 자주 업데이트되지만 API 호출 비용이 더 많이 들 수 있습니다. 간격이 길면 비용이 절감될 수 있지만 쿼리된 데이터가 최신 데이터 세트를 반영하지 않을 수 있습니다. 생략되거나 값이0s로 설정된 경우 백그라운드 메타데이터 새로고침이 시작되지 않습니다. 새로고침 간격이 양수로 업데이트될 때까지 사용 중지된 상태로 유지됩니다.NAMESPACE_FILTERS: 선택사항: 페더레이션할 네임스페이스의 쉼표로 구분된 목록입니다. 예를 들면ns1,ns2입니다. 생략하면 모든 네임스페이스가 포함됩니다.
고객 소유 (CCI)
전용 CCI 또는 파트너 CCI와 같은 비공개 인터커넥트를 구성한 경우 Lakehouse가 트래픽을 비공개로 라우팅할 수 있도록 서비스 디렉터리 엔드포인트 참조를 제공합니다.
gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="snowflake" \ --secret-name="projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME" \ --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \ --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \ --refresh-interval="REFRESH_INTERVAL" \ --namespace-filters="NAMESPACE_FILTERS" \ --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME/endpoints/ENDPOINT_NAME"
다음을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트 ID입니다.REGION: 제휴 카탈로그가 생성되는 Lakehouse 리전입니다. 참고: 서비스 디렉터리 네임스페이스 및 리전 보안 비밀과 동일한 리전이어야 합니다.SNOWFLAKE_SECRET_NAME: Snowflake 보안 비밀의 이름입니다.SNOWFLAKE_ACCOUNT_IDENTIFIER: Snowflake 계정 식별자입니다.SNOWFLAKE_WAREHOUSE: 연동할 Snowflake 카탈로그 이름REFRESH_INTERVAL: 선택사항: 카탈로그 정보를 업데이트하는 빈도를 지정합니다.NAMESPACE_FILTERS: 선택사항: 페더레이션할 네임스페이스의 쉼표로 구분된 목록입니다.NAMESPACE: 비공개 인터커넥트 설정 중에 만든 서비스 디렉터리 네임스페이스입니다.SERVICE_NAME: 비공개 인터커넥트 설정 중에 만든 서비스 디렉터리 서비스 이름입니다.ENDPOINT_NAME: 비공개 상호 연결 설정 중에 만든 서비스 디렉터리 엔드포인트 이름입니다.
인증 설정 완료
카탈로그가 생성되면 Lakehouse에서 카탈로그의 고유한 서비스 계정을 프로비저닝합니다 (리소스 설명에서
biglake-service-account로 반환됨).이 서비스 계정에 이전에 만든 보안 비밀에 액세스할 수 있는 권한을 부여해야 합니다. IAM 정책이 전파되는 데 몇 분 정도 걸릴 수 있습니다.
카탈로그의 서비스 계정에 보안 비밀에 액세스할 수 있는 권한을 부여합니다.
gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/ gcloud secrets add-iam-policy-binding SNOWFLAKE_SECRET_NAME \ --project="PROJECT_ID" \ --location="REGION" \ --member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --location="REGION" \ --format='value(biglake-service-account)')" \ --role="roles/secretmanager.secretAccessor"
연합 카탈로그 서비스 계정에 보안 비밀에 대한 액세스 권한이 있는지 확인하려면 다음 명령어를 실행합니다.
gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/ gcloud secrets get-iam-policy SNOWFLAKE_SECRET_NAME \ --project="PROJECT_ID" \ --location="REGION"
출력에서
biglake-service-account서비스 계정에roles/secretmanager.secretAccessor역할이 할당되어 있는지 확인합니다.
워크로드 아이덴티티 제휴
워크로드 아이덴티티 제휴 (WIF)는 Lakehouse 서비스 계정을 Snowflake 서비스 사용자에 직접 연결하여 수명이 긴 보안 비밀의 사용을 방지합니다.
제휴 카탈로그 만들기
Google Cloud 콘솔, Lakehouse REST API 또는 gcloud CLI를 사용하여 페더레이션 카탈로그를 만듭니다. 사용할 Snowflake 역할을 지정해야 합니다.
콘솔
보안 비밀 기반 인증을 사용하여 제휴 카탈로그를 만들려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Lakehouse로 이동합니다.
카탈로그 만들기를 클릭합니다.
제휴 카탈로그를 클릭합니다.
카탈로그 구성 세부정보가 표시됩니다.
제휴 카탈로그 소스에서 Snowflake Horizon을 선택합니다.
데이터 위치에서 페더레이션 카탈로그를 만들 Lakehouse 리전을 선택합니다. 예를 들면
us-east4입니다. 지연 시간 (공개 인터넷을 통한 경우에도)을 최소화하려면 리전을 선택할 때 다음 단계를 따르세요.- Snowflake 카탈로그가 AWS에 있는 경우 AWS 리전과 가장 가까운Google Cloud 리전을 선택합니다.
계속을 클릭합니다.
연결 세부정보가 표시됩니다.
원격 카탈로그 세부정보 섹션의 Snowflake 계정 식별자 필드에 Snowflake 계정 식별자를 입력합니다. 예를 들면
my_org-my_account입니다.Snowflake 웨어하우스 필드에 Snowflake 웨어하우스 이름을 입력합니다.
보안 비밀에 보안 비밀의 이름을 입력합니다.
projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME형식을 사용합니다.(선택사항) 서비스 디렉터리 이름 필드에 서비스 디렉터리 엔드포인트 또는 서비스의 경로를 입력합니다. 비공개 상호 연결 (Cross-Cloud Interconnect)을 구성하는 경우에만 필요합니다.
만들기를 클릭합니다.
REST API
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -H "x-goog-user-project: PROJECT_ID" \ -d '{ "catalog-type": "CATALOG_TYPE_FEDERATED", "federated-catalog-options": { "snowflake-catalog-info": { "account-identifier": "SNOWFLAKE_ACCOUNT_IDENTIFIER", "warehouse": "SNOWFLAKE_WAREHOUSE", "snowflake-role": "SNOWFLAKE_ROLE" }, "refresh-options": { "refresh-schedule": { "refresh-interval": "REFRESH_INTERVAL" } } } }' \ "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs?iceberg_catalog_id=FEDERATED_CATALOG_NAME&primary_location=REGION"
gcloud CLI
공개 인터넷 (CCI 없음)
gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="snowflake" \ --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \ --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \ --snowflake-role="SNOWFLAKE_ROLE" \ --refresh-interval="REFRESH_INTERVAL" \ --namespace-filters="NAMESPACE_FILTERS"
고객 소유 (CCI)
비공개 인터커넥트를 구성한 경우 Lakehouse가 트래픽을 비공개로 라우팅할 수 있도록 서비스 디렉터리 서비스 참조를 제공합니다.
gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="snowflake" \ --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \ --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \ --snowflake-role="SNOWFLAKE_ROLE" \ --refresh-interval="REFRESH_INTERVAL" \ --namespace-filters="NAMESPACE_FILTERS" \ --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME/endpoints/ENDPOINT_NAME"
다음을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트 ID입니다.SNOWFLAKE_ACCOUNT_IDENTIFIER: Snowflake 계정 식별자입니다.SNOWFLAKE_WAREHOUSE: 페더레이션할 Snowflake 카탈로그 이름입니다.SNOWFLAKE_ROLE: 세션에 필요한 특정 Snowflake 역할입니다. 예를 들면ICEBERG_VIEW입니다.FEDERATED_CATALOG_NAME: Lakehouse 제휴 카탈로그의 이름REGION: 제휴 카탈로그가 생성되는 Lakehouse 리전입니다.REFRESH_INTERVAL: 선택사항: 카탈로그 정보를 업데이트하는 빈도를 지정합니다. 예를 들면300s입니다.NAMESPACE_FILTERS: 선택사항: 페더레이션할 네임스페이스의 쉼표로 구분된 목록입니다. 예를 들면ns1,ns2입니다. 생략하면 모든 네임스페이스가 포함됩니다.NAMESPACE: 서비스 디렉터리 서비스의 네임스페이스입니다.SERVICE_NAME: 서비스 디렉터리 서비스의 이름입니다.ENDPOINT_NAME: 서비스 디렉터리 엔드포인트의 이름입니다.
Snowflake에서 ID 연결
카탈로그를 만든 후에는 카탈로그의 서비스 계정 ID를 Snowflake의 서비스 사용자에 연결해야 합니다.
카탈로그 세부정보에서 Lakehouse 서비스 계정 ID (주체)를 추출합니다.
생성 명령어의 JSON 응답 (필드
biglake-service-account-id)에서 가져올 수 있습니다.또는 카탈로그에서 describe 명령어를 실행하여 값을 가져올 수 있습니다.
gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID"
출력에서
biglake-service-account-id을 찾습니다.Snowflake 관리 인스턴스에 로그인하고 다음 스크립트를 실행하여 Lakehouse 서비스 ID와의 신뢰 관계를 설정합니다.
USE ROLE ACCOUNTADMIN; CREATE USER SNOWFLAKE_SERVICE_USER TYPE = SERVICE WORKLOAD_IDENTITY = ( TYPE = GCP SUBJECT = 'LAKEHOUSE_SERVICE_ACCOUNT_ID' ) DEFAULT_ROLE = SNOWFLAKE_ROLE COMMENT = 'Service user for Lakehouse federation over WIF'; -- Also explicitly GRANT permissions to the role GRANT ROLE SNOWFLAKE_ROLE TO USER SNOWFLAKE_SERVICE_USER;
다음을 바꿉니다.
SNOWFLAKE_SERVICE_USER: Snowflake의 새 서비스 사용자의 이름입니다.LAKEHOUSE_SERVICE_ACCOUNT_ID: 이전 단계에서 추출한 서비스 계정 ID입니다.SNOWFLAKE_ROLE: Snowflake 역할입니다 (카탈로그 생성 중에 지정된 역할과 일치해야 함).
연결 확인하기
카탈로그 백그라운드 메타데이터 새로고침 주기가 성공적으로 완료되고 네임스페이스가 동기화되었는지 확인합니다.
gcloud CLI
새로고침 상태가 성공을 나타내는지 확인합니다.
gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --location="REGION"
원격 데이터베이스 스키마가 동기화된 네임스페이스로 표시되는지 확인합니다.
gcloud alpha biglake iceberg namespaces list \ --catalog="FEDERATED_CATALOG_NAME" \ --project="PROJECT_ID" \ --location="REGION"
REST API
카탈로그 페더레이션 동기화 상태를 확인합니다.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -H "x-goog-user-project: PROJECT_ID" \ "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME"
동기화된 네임스페이스를 나열합니다.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -H "x-goog-user-project: PROJECT_ID" \ "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME/namespaces"
동기화된 네임스페이스의 테이블을 나열합니다.
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -H "x-goog-user-project: PROJECT_ID" \ "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME/namespaces/NAMESPACE_NAME/tables"