为 Snowflake 转移配置专用连接
本指南介绍了如何配置专用连接,以创建从 Snowflake 到 BigQuery 的专用数据传输。借助私有数据传输,您可以在专用网络中将数据从一个来源传输到另一个来源,并降低通过公共互联网传输数据时的安全风险。
以下部分介绍了在创建 Snowflake 转移作业之前配置专用连接所需的步骤。
对于托管在 Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud上的 Snowflake 实例,支持私密转移。

创建指向 Snowflake 的专用链接
创建将 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 私有转移创建和配置代理虚拟机,请执行以下操作:
- 在使用方 VPC 网络中创建一个或多个 Compute Engine 虚拟机实例。
- 下载 TCP 代理软件(例如 HAProxy 或 Nginx),然后配置以下内容:
- 指定端口。例如
443。 - 将所有传入的 TCP 流量转发到 Snowflake 实例上的专用主机名和端口。
- 指定端口。例如
- 配置虚拟机,使其能够通过使用方 VPC 网络中配置的 DNS 解析 Snowflake 专用主机名。
- 通过执行以下操作来设置内部直通式负载均衡器:
创建服务连接
使用 Private Service Connect 创建网络连接并发布服务。 对于托管在 AWS、Azure 或 Google Cloud上的 Snowflake 实例,此步骤是必需的。
服务附件必须与 BigQuery 数据集位于同一区域。
如果您的服务使用明确审批(connection-preference 设置为 ACCEPT_MANUAL),则在 Snowflake 私密数据传输中使用的服务账号必须具有以下 IAM 权限:
compute.serviceAttachments.getcompute.serviceAttachments.updatecompute.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 地址和端口,因为您需要在下一部分中指定它们。
验证连接
在继续操作之前,我们建议您验证负载平衡器是否可以连接到远程存储端点。
为此,请执行以下操作:
- 在负载平衡器所在的同一 VPC 网络中创建 Compute Engine 虚拟机。
在虚拟机中,使用
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。
- 对于 AWS S3,请使用存储桶所在区域的 S3 API 端点,例如
- PORT 是您在负载均衡器的转发规则上配置的端口,通常为
443。 - LOAD_BALANCER_IP 是负载平衡器的前端 IP 地址。
- HOSTNAME 是源存储服务提供商的主机名。
来自远程端点的响应(即使是错误)也表示连接成功。连接超时表示网络设置存在配置错误,您应先解决此问题,然后再继续操作。
注册 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 中。
创建并配置 Snowflake 存储集成对象,以允许 Snowflake 将数据写入 Amazon S3 存储桶作为外部阶段。
如需允许对 Amazon S3 存储桶进行读取访问,您还必须执行以下操作:
创建专用的 Amazon IAM 用户,并为其授予
AmazonS3ReadOnlyAccess政策。为 IAM 用户创建 Amazon 访问密钥对。
Azure
对于 Azure 托管的 Snowflake 账号,请创建一个 Azure Blob Storage 容器来暂存 Snowflake 数据,然后再将其加载到 BigQuery 中。
- 创建 Azure 存储账号,并在其中创建一个存储容器。
- 创建并配置 Snowflake 存储集成对象,以允许 Snowflake 将数据写入 Azure 存储容器作为外部阶段。您可以跳过创建外部阶段的步骤,因为这不是必需的。
如需允许对 Azure 容器进行读取访问,请为其生成 SAS 令牌。
Google Cloud
对于 Google Cloud托管的 Snowflake 账号,请创建一个 Cloud Storage 存储桶来暂存 Snowflake 数据,然后再将其加载到 BigQuery 中。
- 创建 Cloud Storage 存储桶。
- 创建并配置 Snowflake 存储集成对象,以允许 Snowflake 将数据写入 Cloud Storage 存储桶作为外部阶段。
如需允许访问临时存储桶,请使用以下命令向 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:
- 对于 AWS 托管的 Snowflake 账号,您需要提供 Amazon S3 存储桶 URI 以及访问凭据。
- 对于 Azure 托管的 Snowflake,需要提供 Azure Blob Storage 账号和容器。
- 对于Google Cloud托管的 Snowflake 账号,需要提供 Cloud Storage 存储桶 URI。
对于 Cloud Provider,请根据您的 Snowflake 账号托管在哪个云提供商上,选择
AWS、AZURE或GCP。AWS
- 在 Amazon S3 URI 字段中,输入用作暂存桶的 Amazon S3 存储桶的 URI。
- 在访问密钥 ID 和私有访问密钥字段中,输入访问密钥对。
Azure
- 对于 Azure storage account name(Azure Storage 账号名称)和 The container in the Azure storage account(Azure Storage 账号中的容器),请输入要用作临时存储桶的 Azure Blob Storage 的存储账号和容器名称。
- 在 SAS 令牌中,输入为容器生成的 SAS 令牌。
Google Cloud
- 在 GCS URI 字段中,输入要用作暂存存储桶的 Cloud Storage 的 URI。
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 账号的云提供商,输入AWS、AZURE或GCP。staging_s3_uri:输入要用作暂存桶的 S3 存储桶的 URI。仅当cloud_provider为AWS时才需要。aws_access_key_id:输入访问密钥对。仅当cloud_provider为AWS时才需要。aws_secret_access_key:输入访问密钥对。仅当cloud_provider为AWS时才需要。azure_storage_account:输入要用作暂存桶的存储账号名称。仅当cloud_provider为AZURE时才需要。staging_azure_container:输入 Azure Blob Storage 中的容器,以用作临时存储桶。仅当cloud_provider为AZURE时才需要。azure_sas_token:输入 SAS 令牌。仅当cloud_provider为AZURE时才需要。staging_gcs_uri:输入要用作暂存存储桶的 Cloud Storage 的 URI。仅当cloud_provider为GCP时才需要。