为 Snowflake 转移配置专用连接

本指南介绍了如何配置专用连接,以创建从 Snowflake 到 BigQuery 的专用数据传输。借助私有数据传输,您可以在专用网络中将数据从一个来源传输到另一个来源,并降低通过公共互联网传输数据时的安全风险。

以下部分介绍了在创建 Snowflake 转移作业之前配置专用连接所需的步骤。

对于托管在 Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud上的 Snowflake 实例,支持私密转移。

从 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 必须具有 Snowflake 转移所需的 Cloud Storage 暂存桶

设置跨云互连或高可用性 VPN

从 AWS 或 Azure 设置跨云互连或高可用性 VPN。Google Cloud托管的 Snowflake 账号不需要执行此步骤。

AWS

高可用性 VPN 可让您通过加密的 VPN 隧道传输数据。如需使用高可用性 VPN 进行私密 Snowflake 传输,请参阅在 Google Cloud 和 AWS 之间创建高可用性 VPN 连接

Cross-Cloud Interconnect 连接可在云提供商之间创建专用私有链路,适合需要低延迟的大规模数据传输。如需使用跨云互连进行私有 Snowflake 传输,请参阅连接到 AWS

Azure

高可用性 VPN 可让您通过加密的 VPN 隧道传输数据。如需使用高可用性 VPN 进行私密 Snowflake 传输,请参阅在 Google Cloud 和 Azure 之间创建高可用性 VPN 连接

Cross-Cloud Interconnect 连接可在云提供商之间创建专用私有链路,适合需要低延迟的大规模数据传输。如需使用跨云互连进行私有 Snowflake 传输,请参阅连接到 Azure

创建代理虚拟机

如需完成私密连接,需要使用代理虚拟机来完成数据源之间的连接,而无需让数据到达公共互联网。对于托管在 AWS、Azure 或 Google Cloud上的 Snowflake 实例,此步骤是必需的。

如需为 Snowflake 私有转移创建和配置代理虚拟机,请执行以下操作:

  1. 在使用方 VPC 网络中创建一个或多个 Compute Engine 虚拟机实例
  2. 下载 TCP 代理软件(例如 HAProxy 或 Nginx),然后配置以下内容:
    1. 指定端口。例如 443
    2. 将所有传入的 TCP 流量转发到 Snowflake 实例上的专用主机名和端口。
  3. 配置虚拟机,使其能够通过使用方 VPC 网络中配置的 DNS 解析 Snowflake 专用主机名。
  4. 通过执行以下操作来设置内部直通式负载均衡器:
    1. 将代理虚拟机分组到托管式实例组 (MIG) 中
    2. 设置具有虚拟机实例组后端的内部直通式网络负载平衡器

创建服务连接

使用 Private Service Connect 创建网络连接并发布服务。 对于托管在 AWS、Azure 或 Google Cloud上的 Snowflake 实例,此步骤是必需的。

服务附件必须与 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 Transfer Service 需要 *.blob.core.windows.net 端点。不支持 *.dfs.core.windows.net 端点。

创建后,记下端点的 IP 地址。您需要在下一部分中创建负载均衡器时指定 IP 地址。

创建网络负载均衡器

在 Google Cloud中,设置具有混合连接的区域级内部代理网络负载平衡器。这会提供一个内部 IP 地址,该地址仅限于与负载均衡器在同一 VPC 网络中运行的客户端,并将流量路由到您在上一个部分中创建的 S3 VPC 端点或 Azure 存储专用端点。

您应在与 Cloud Interconnect 对接的 VLAN 连接所在的同一项目和 VPC 网络中创建负载均衡器。虽然互连本身可以位于同一组织内的不同项目中,但连接必须与负载均衡器位于同一 VPC 和区域中。

当您完成标记为将端点添加到混合连接 NEG 的步骤时,请指定 S3 VPC 端点或 Azure 存储专用端点 IP 地址。

记下 NLB 的前端 IP 地址和端口,因为您需要在下一部分中指定它们。

验证连接

在继续操作之前,我们建议您验证负载平衡器是否可以连接到远程存储端点。

为此,请执行以下操作:

  1. 在负载平衡器所在的同一 VPC 网络中创建 Compute Engine 虚拟机。
  2. 在虚拟机中,使用 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}。创建转移作业时,您需要用到此值。

准备临时存储桶

如需完成 Snowflake 数据转移,您必须创建暂存存储桶,然后将其配置为允许从 Snowflake 进行写入访问。

从下列选项中选择一项:

AWS

对于 AWS 托管的 Snowflake 账号,请创建一个 Amazon S3 存储桶来暂存 Snowflake 数据,然后再将其加载到 BigQuery 中。

  1. 创建 Amazon S3 存储桶

  2. 创建并配置 Snowflake 存储集成对象,以允许 Snowflake 将数据写入 Amazon S3 存储桶作为外部阶段。

如需允许对 Amazon S3 存储桶进行读取访问,您还必须执行以下操作:

  1. 创建专用的 Amazon IAM 用户,并为其授予 AmazonS3ReadOnlyAccess 政策。

  2. 为 IAM 用户创建 Amazon 访问密钥对

Azure

对于 Azure 托管的 Snowflake 账号,请创建一个 Azure Blob Storage 容器来暂存 Snowflake 数据,然后再将其加载到 BigQuery 中。

  1. 创建 Azure 存储账号,并在其中创建一个存储容器
  2. 创建并配置 Snowflake 存储集成对象,以允许 Snowflake 将数据写入 Azure 存储容器作为外部阶段。您可以跳过创建外部阶段的步骤,因为这不是必需的。

如需允许对 Azure 容器进行读取访问,请为其生成 SAS 令牌

Google Cloud

对于 Google Cloud托管的 Snowflake 账号,请创建一个 Cloud Storage 存储桶来暂存 Snowflake 数据,然后再将其加载到 BigQuery 中。

  1. 创建 Cloud Storage 存储桶
  2. 创建并配置 Snowflake 存储集成对象,以允许 Snowflake 将数据写入 Cloud Storage 存储桶作为外部阶段。
  3. 如需允许访问临时存储桶,请使用以下命令向 DTS 服务代理授予 roles/storage.objectViewer 角色:

    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 转移作业。设置转移配置时,请执行以下操作:

控制台

  • 对于使用专用网络,请选择 True
  • 对于 PSC 服务连接,输入服务连接 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
  • 您要用于转移作业的临时存储桶的 URI:
  • 对于 Cloud Provider,请根据您的 Snowflake 账号托管在哪个云提供商上,选择 AWSAZUREGCP

    AWS

    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:根据 Snowflake 账号的云提供商,输入 AWSAZUREGCP
  • staging_s3_uri:输入要用作暂存桶的 S3 存储桶的 URI。仅当 cloud_providerAWS 时才需要。
  • aws_access_key_id:输入访问密钥对。仅当 cloud_providerAWS 时才需要。
  • aws_secret_access_key:输入访问密钥对。仅当 cloud_providerAWS 时才需要。
  • azure_storage_account:输入要用作暂存桶的存储账号名称。仅当 cloud_providerAZURE 时才需要。
  • staging_azure_container:输入 Azure Blob Storage 中的容器,以用作临时存储桶。仅当 cloud_providerAZURE 时才需要。
  • azure_sas_token:输入 SAS 令牌。仅当 cloud_providerAZURE 时才需要。
  • staging_gcs_uri:输入要用作暂存存储桶的 Cloud Storage 的 URI。仅当 cloud_providerGCP 时才需要。