設定 Snowflake 移轉作業的私人連線

本指南說明如何設定私人連線,從 Snowflake 建立私人資料轉移至 BigQuery。透過私有資料移轉功能,您可以在私有網路中將資料從一個來源移轉至另一個來源,並降低透過公用網際網路移轉資料時的安全性風險。

下列章節說明設定私人連線的必要步驟,完成後才能建立 Snowflake 轉移作業

如果 Snowflake 執行個體託管於 Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud,則支援私人轉移。

從 AWS、Azure 或 Google Cloud代管的 Snowflake 帳戶將私人資料移轉至 BigQuery

建立私人連結,將 Snowflake 帳戶連結至雲端供應商。如需更多資訊,請選取下列其中一個選項:

AWS

設定 AWS PrivateLink,將 Snowflake 帳戶連結至 AWS 帳戶。AWS 帳戶必須包含 Snowflake 移轉所需的 Amazon S3 中繼值區

Azure

設定 Azure Private Link,將 Azure 虛擬網路 (VNet) 連線至 Azure 中的 Snowflake VNet。您的 Azure 帳戶必須包含 Snowflake 轉移作業所需的 Blob 暫存值區

Google Cloud

設定 Google Cloud Private Service Connect,將虛擬私有雲 (VPC) 網路子網路連線至 Google Cloud上代管的 Snowflake 帳戶。Google Cloud 您必須具備 Cloud Storage 中繼 bucket,才能進行 Snowflake 轉移

設定跨雲端互連或高可用性 VPN

從 AWS 或 Azure 設定 Cross-Cloud Interconnect 或高可用性 VPN。如果是Google Cloud代管的 Snowflake 帳戶,則不需要執行這個步驟。

AWS

高可用性 VPN 可讓您透過加密的 VPN 通道傳輸資料。如要使用高可用性 VPN 進行私有 Snowflake 傳輸,請參閱「在 Google Cloud 和 AWS 之間建立高可用性 VPN 連線」。

Cross-Cloud Interconnect 連線會在雲端供應商之間建立專屬的私人連結,適合用於有低延遲需求的大量資料移轉作業。如要使用 Cross-Cloud Interconnect 進行私有 Snowflake 傳輸,請參閱「連線至 AWS」。

Azure

高可用性 VPN 可讓您透過加密的 VPN 通道傳輸資料。如要使用高可用性 VPN 進行私有 Snowflake 轉移,請參閱「在 Google Cloud 和 Azure 之間建立高可用性 VPN 連線」。

Cross-Cloud Interconnect 連線會在雲端供應商之間建立專屬的私人連結,適合用於有低延遲需求的大量資料移轉作業。如要使用 Cross-Cloud Interconnect 進行私有 Snowflake 傳輸,請參閱「連線至 Azure」。

建立 Proxy VM

如要完成私人連線,您必須使用 Proxy VM 完成資料來源之間的連線,且資料不會傳輸到公開網際網路。如果 Snowflake 執行個體代管於 AWS、Azure 或 Google Cloud,則必須執行這個步驟。

如要為 Snowflake 私人傳輸建立及設定 Proxy VM,請執行下列操作:

  1. 在消費者虛擬私有雲網路中建立一或多個 Compute Engine VM 執行個體
  2. 下載 TCP Proxy 軟體 (例如 HAProxy 或 Nginx),並設定下列項目:
    1. 指定通訊埠。例如 443
    2. 將所有傳入的 TCP 流量轉送至 Snowflake 執行個體上的私有主機名稱和通訊埠。
  3. 設定 VM,透過消費者 VPC 網路中設定的 DNS 解析 Snowflake 私人主機名稱。
  4. 如要設定內部直通式負載平衡器,請執行下列操作:
    1. 將 Proxy VM 分組至代管執行個體群組 (MIG)
    2. 設定具有 VM 執行個體群組後端的內部直通式網路負載平衡器

建立服務連結

使用 Private Service Connect 建立網路連結並發布服務。如果 Snowflake 執行個體代管於 AWS、Azure 或 Google Cloud,則必須執行這個步驟。

服務連結必須與 BigQuery 資料集位於相同區域。

如果您的服務使用明確核准 (connection-preference 設為 ACCEPT_MANUAL),則 Snowflake 私人資料轉移作業中使用的服務帳戶必須具備下列 IAM 權限:

  • compute.serviceAttachments.get
  • compute.serviceAttachments.update
  • compute.regionOperations.get

建立服務連結後,請記下服務連結 URI。建立 Snowflake 轉移設定時,您需要這個 URI。

建立端點

在 AWS 或 Azure 帳戶中建立端點。 如果是Google Cloud代管的 Snowflake 帳戶,則不需要執行這個步驟。

AWS

在 AWS 中,建立連線至 Amazon S3 的 VPC 端點。詳情請參閱「使用介面 VPC 端點存取 AWS 服務」。

Azure

在 Azure 的儲存體帳戶上設定私人端點。詳情請參閱「使用 Azure 儲存空間的私人端點」。

Storage 移轉服務需要 *.blob.core.windows.net 端點。系統不支援 *.dfs.core.windows.net 端點。

建立完成後,請記下端點的 IP 位址。在下一節中建立負載平衡器時,您需要指定 IP 位址。

建立網路負載平衡器

在 Google Cloud中,設定具備混合式連線的區域性內部 Proxy 網路負載平衡器。這會提供內部 IP 位址,僅限於與負載平衡器位於相同 VPC 網路中執行的用戶端,並將流量轉送至您在上一節中建立的 S3 VPC 端點或 Azure 儲存空間私人端點。

您應在與 Cloud Interconnect 介接的 VLAN 附件所在的專案和虛擬私有雲網路中,建立負載平衡器。互連本身可以位於同一機構組織內的不同專案,但附件必須與負載平衡器位於相同的虛擬私有雲和區域。

當您完成標示為「將端點新增至混合式連線 NEG」的步驟時,請指定 S3 VPC 端點或 Azure 儲存空間私人端點 IP 位址。

請記下 NLB 的前端 IP 位址和通訊埠,因為您需要在下一節中指定這些項目。

驗證連線

繼續操作前,建議您先驗證負載平衡器是否能連線至遠端儲存端點。

方法如下:

  1. 在與負載平衡器相同的虛擬私有雲網路中,建立 Compute Engine VM。
  2. 在 VM 中,使用 curl 測試與負載平衡器 IP 位址和通訊埠的連線:

    curl -v --resolve HOSTNAME:PORT:LOAD_BALANCER_IP https://HOSTNAME
    

    更改下列內容:

    • HOSTNAME 是來源儲存空間供應商的主機名稱。
      • 如果是 AWS S3,請使用值區所在區域的 S3 API 端點,例如 s3.us-west-1.amazonaws.com
      • 如果是 Azure 儲存空間,請使用儲存體帳戶的 Blob 端點,例如 mystorageaccount.blob.core.windows.net
    • PORT 是您在負載平衡器的轉送規則中設定的通訊埠,通常為 443
    • LOAD_BALANCER_IP 是負載平衡器的前端 IP 位址。

遠端端點的回應 (即使是錯誤) 表示連線成功。連線逾時表示網路設定有誤,請先解決問題再繼續操作。

註冊 NLB

在 Service Directory 中註冊 NLB。BigQuery 會使用 Service Directory 解析負載平衡器的位址,並直接連線至負載平衡器。

按照操作說明註冊內部負載平衡器。使用您在指定轉送規則時建立的負載平衡器 IP 位址和通訊埠。

建立服務後,請記下服務的自我連結。格式為 projects/{project_id}/locations/{location}/namespaces/{namespace}/services/{service}。建立移轉作業時,您會需要用到這個值。

準備暫存 bucket

如要完成 Snowflake 資料移轉,您必須建立暫存值區,然後設定該值區,允許 Snowflake 寫入資料。

選取下列選項之一:

AWS

如果是 AWS 代管的 Snowflake 帳戶,請建立 Amazon S3 值區來暫存 Snowflake 資料,再將資料載入 BigQuery。

  1. 建立 Amazon S3 bucket

  2. 建立及設定 Snowflake 儲存空間整合物件,允許 Snowflake 將資料寫入 Amazon S3 值區,做為外部階段。

如要允許 Amazon S3 bucket 的讀取權限, 您也必須執行下列操作:

  1. 建立專用的 Amazon IAM 使用者,並授予 AmazonS3ReadOnlyAccess 政策。

  2. 為 IAM 使用者建立 Amazon 存取金鑰組

Azure

如果是 Azure 代管的 Snowflake 帳戶,請建立 Azure Blob 儲存體容器,暫存 Snowflake 資料,然後再載入 BigQuery。

  1. 建立 Azure 儲存體帳戶,並在其中建立儲存體容器
  2. 建立及設定 Snowflake 儲存空間整合物件,允許 Snowflake 將資料寫入 Azure 儲存空間容器,做為外部階段。您可以略過建立外部階段的步驟,因為這不是必要步驟。

如要允許讀取 Azure 容器,請為該容器產生 SAS 權杖

Google Cloud

如果是 Google Cloud代管的 Snowflake 帳戶,請建立 Cloud Storage bucket,暫存 Snowflake 資料,再載入至 BigQuery。

  1. 建立 Cloud Storage bucket
  2. 建立及設定 Snowflake 儲存空間整合物件,允許 Snowflake 將資料寫入 Cloud Storage bucket 做為外部階段。
  3. 如要允許存取暫存值區,請使用下列指令,將 roles/storage.objectViewer 角色授予 DTS 服務代理程式

    gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET_NAME \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com \
      --role=roles/storage.objectViewer

建立私有 Snowflake 移轉設定

建立 Snowflake 移轉作業。設定移轉設定時,請執行下列操作:

控制台

  • 在「Use Private Network」(使用私人網路) 中選取「True」(是)
  • 在「PSC 服務連結」部分,輸入服務連結 URI。如要瞭解如何找出服務附件 URI,請參閱「查看已發布服務的詳細資料」。服務連結 URI 的格式為 projects/PROJECT_ID/regions/REGION/serviceAttachments/SERVICE_ATTACHMENT
  • 如果是私有網路服務,請輸入 NLB 服務的自我連結。 該值使用格式 projects/PROJECT_ID/locations/LOCATION/namespaces/NAMESPACE/services/SERVICE_NAME
  • 要用於轉移作業的暫存值區 URI:
  • 在「Cloud Provider」(雲端服務供應商) 部分,根據代管 Snowflake 帳戶的雲端服務供應商,選取 AWSAZUREGCP

    AWS

    • 在「Amazon S3 URI」部分,輸入將做為暫存值區使用的 Amazon S3 值區的 URI
    • 在「Access key ID」(存取金鑰 ID) 和「Secret access key」(存取密鑰) 部分,輸入存取金鑰組

    Azure

    Google Cloud

bq

  • use_private_network 參數設為 TRUE
  • 如果是 service_attachment 參數,請指定服務連結 URI。如要瞭解如何找出服務附件 URI,請參閱「查看已發布服務的詳細資料」。服務連結 URI 的格式為 projects/PROJECT_ID/regions/REGION/serviceAttachments/SERVICE_ATTACHMENT
  • 針對 private_network_service 參數,請提供 NLB 服務的自我連結。 該值使用格式 projects/PROJECT_ID/locations/LOCATION/namespaces/NAMESPACE/services/SERVICE_NAME
  • cloud_provider:輸入 AWSAZUREGCP,視代管 Snowflake 帳戶的雲端服務供應商而定。
  • staging_s3_uri:輸入要當做暫存 bucket 的 S3 bucket URI。只有在 cloud_providerAWS 時才需要。
  • aws_access_key_id:輸入存取金鑰組。只有在 cloud_providerAWS 時才需要。
  • aws_secret_access_key:輸入存取金鑰組。只有在 cloud_providerAWS 時才需要。
  • azure_storage_account:輸入要用做暫存 bucket 的儲存空間帳戶名稱。只有在 cloud_providerAZURE 時才需要。
  • staging_azure_container:輸入Azure Blob 儲存體中的容器,做為暫存值區。只有在 cloud_providerAZURE 時才需要。
  • azure_sas_token:輸入 SAS 權杖。只有在 cloud_providerAZURE 時才需要。
  • staging_gcs_uri:輸入要用做暫存 bucket 的 Cloud Storage URI。只有在 cloud_providerGCP 時才需要。