AWS 外部存储卷的专用连接

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

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

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

备注

您可以使用 AWS PrivateLink 访问 Snowflake 管理的 Iceberg 表,以及使用目录集成进行对象存储的 Iceberg 表。您当前无法使用专用连接访问使用其他目录集成的 Iceberg 表。

出站专用连接成本

您为每个专用连接端点以及处理的总数据量付费。有关这些项目的定价,请参阅 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 系统函数。

语言: 中文