Google Cloud 外部存储卷的专用连接

本主题介绍如何在 Google Cloud Storage (GCS) 上配置与外部卷的出站专用连接。出站公共连接和出站专用连接的主要区别在于如何设置外部卷的 USE_PRIVATELINK_ENDPOINT 属性。

当外部卷配置为使用专用连接时,您与 Google Cloud Storage 服务的连接将通过 Google Cloud 内部网络进行。通过将外部卷配置为使用出站专用连接,可以阻止对存储账户的公共访问,从而为数据卸载操作增加额外的安全性。

有关使用外部卷为 Iceberg 表连接外部云存储的更多信息,请参阅 配置外部卷

备注

You can use Google Cloud Private Service Connect to access Snowflake-managed Iceberg tables and Iceberg tables that use a catalog integration for object storage. In addition, you can use Google Cloud Private Service Connect to access externally managed Iceberg tables and Iceberg tables created from Delta files in object storage.

出站专用连接成本

您为每个专用连接端点以及处理的总数据量付费。有关这些项目的定价,请参阅 Snowflake 服务使用量表

在 ACCOUNT_USAGE 和 ORGANIZATION_USAGE 架构中查询计费视图时,可以通过筛选以下服务类型来查看这些项目的成本:

  • OUTBOUND_PRIVATELINK_ENDPOINT

  • OUTBOUND_PRIVATELINK_DATA_PROCESSED

例如,您可以查询 USAGE_IN_CURRENCY_DAILY 视图并筛选这些服务类型。

注意事项

您可以为同一个云存储服务配置出站公共连接和出站专用连接。如果要这样做,请为出站公共连接创建专用外部卷,并指定 USE_PRIVATELINK_ENDPOINT = FALSE

限制

与 Google Cloud Storage 卷的出站专用连接不支持多区域桶。

为外部卷指定专用连接

外部卷的 USE_PRIVATELINK_ENDPOINT 属性决定了是通过专用连接还是通过穿过公共网络来访问外部卷。要使用专用连接,请在创建或修改外部卷时设置 USE_PRIVATELINK_ENDPOINT = TRUE,如以下示例所示。

使用以下语法创建外部卷:

CREATE OR REPLACE EXTERNAL VOLUME <ext_volume_name>
  STORAGE_LOCATIONS =
  (
    (
      NAME = 'my-gcs-loc'
      STORAGE_PROVIDER = 'gcs'
      STORAGE_BASE_URL = 'gcs://<bucket>/<prefix>/'
      USE_PRIVATELINK_ENDPOINT = [ TRUE | FALSE ]
    )
  )
  ALLOW_WRITES=true;
Copy

使用以下语法更改现有的外部卷:

ALTER EXTERNAL VOLUME <ext_volume_name>
  UPDATE STORAGE_LOCATION = '<storage_location_name>'
  USE_PRIVATELINK_ENDPOINT = [ TRUE | FALSE ]
Copy

DESCRIBE EXTERNAL VOLUME 命令包括 USE_PRIVATELINK_ENDPOINT 属性及其值。

配置专用端点

通过以下步骤为 Google Cloud Storage 卷配置专用端点:

  1. 在 Snowflake 中,调用 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 系统函数。提供区域存储 API 端点和主机名作为实参。例如:

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
      'storage.us-east4.rep.googleapis.com',
      'storage.us-east4.rep.googleapis.com');
    
    Copy

    备注

    Snowflake 仅支持 Google Cloud 区域存储 API 端点。不支持 Google Cloud 多区域桶。

    使用 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 在 Snowflake VNet 中配置专用端点,使 Snowflake 能够通过专用连接连接到外部 Google Cloud Storage。只有由启用了 USE_PRIVATELINK_ENDPOINT 属性的外部卷引用的桶才能通过端点访问。

  2. 在 Snowflake 中,调用 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 函数。

    当 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 的输出中包括 "status": "APPROVED" 时,您从 Snowflake 到存储账户的连接将可以使用专用连接。

    在等待 "APPROVED" 状态时,您可以继续执行后续步骤。

配置外部卷访问

通过以下步骤配置与外部存储卷的专用连接:

  1. 创建外部卷,并将 USE_PRIVATELINK_ENDPOINT 属性设置为 TRUE。例如:

    CREATE EXTERNAL VOLUME external_volume
      STORAGE_LOCATIONS =
      (
        (
          NAME = 'my-gcs-loc'
          STORAGE_PROVIDER = 'gcs'
          STORAGE_BASE_URL =  'gcs://<bucket>/<prefix>/'
          USE_PRIVATELINK_ENDPOINT = true
        )
      )
      ALLOW_WRITES=true;
    
    Copy
  2. 使用 CREATE ICEBERG TABLE 命令创建引用外部卷的 Iceberg 表。例如:

    CREATE ICEBERG TABLE rand_table (data STRING)
      BASE_LOCATION='table'
      EXTERNAL_VOLUME=external_volume
      CATALOG='snowflake';
    
    Copy
  3. 专用端点具有“APPROVED”状态后,测试将数据从 Snowflake 卸载到外部卷。

禁用专用连接

如果您不再需要外部卷的专用连接,可以将外部卷的 USE_PRIVATELINK_ENDPOINT 属性设置为 FALSE,然后调用 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 系统函数以取消配置端点。例如:

ALTER EXTERNAL VOLUME <ext_volume_name>
  UPDATE STORAGE_LOCATION = '<storage_location_name>'
  USE_PRIVATELINK_ENDPOINT = false;

SELECT SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT('storage.us-east4.rep.googleapis.com');
Copy
语言: 中文