Private connectivity to external volumes for Amazon Web Services

本主题提供了设置与 AWS 外部卷的出站专用连接的配置详细信息。出站公共连接和出站专用连接的主要区别在于如何设置外部卷的 USE_PRIVATELINK_ENDPOINT 属性。

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

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

备注

You can use AWS PrivateLink to access Snowflake-managed Iceberg tables and Iceberg tables that use a catalog integration for object storage. In addition, you can use AWS PrivateLink 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

语法更新

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

CREATE EXTERNAL VOLUME 和 ALTER EXTERNAL VOLUME 的新语法如下:

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

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

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

配置外部卷访问

使用以下步骤使用出站专用连接将数据卸载到 AWS 上的外部卷:

  1. 调用 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 系统函数以在 Snowflake VNet 中配置专用端点,使 Snowflake 能够使用专用连接连接到外部 AWS 云存储。

    如以下示例所示,您必须使用通配符 (*),而非指定单个 AWS S3 桶。使用通配符并不意味着所有 S3 桶都通过专用连接访问。只有由启用了 USE_PRIVATELINK_ENDPOINT 参数的外部卷引用的桶,才可以通过端点访问。

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
        'com.amazonaws.us-west-2.s3',
        '*.s3.us-west-2.amazonaws.com');
    
    Copy

    此函数将专用端点与主机名绑定,从而使外部卷可以使用专用端点连接到存储位置(只要对象上启用了 AWS PrivateLink)。

  2. 调用 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 函数。

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

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

  3. 创建外部卷,确保将 USE_PRIVATELINK_ENDPOINT 属性设置为:code:TRUE。例如:

    CREATE EXTERNAL VOLUME external_volume
      STORAGE_LOCATIONS =
        (
          (
            NAME = 'my-s3-loc'
            STORAGE_PROVIDER = 's3'
            STORAGE_BASE_URL = 's3://bucketinuswest2/'
            STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
            USE_PRIVATELINK_ENDPOINT = TRUE
          )
        )
      ALLOW_WRITES=TRUE;
    
    Copy
  4. 使用 CREATE ICEBERG TABLE 命令创建引用外部卷的 Iceberg 表。例如:

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

撤销端点

如果不再需要外部卷的专用连接端点,请取消设置外部卷的 USE_PRIVATELINK_ENDPOINT 属性,然后调用 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 系统函数。

语言: 中文