用于 Snowflake 托管存储卷的 AWS VPC 接口端点。

本主题提供通过 AWS VPC 接口端点连接到 Snowflake 托管存储卷的概念和详细操作指南。

概述

当您使用 Apache Spark 等外部查询引擎对使用 Snowflake 托管存储的 Iceberg 表进行读取或写入时,该查询引擎会直接与托管在 Amazon S3 上的原生 Iceberg 卷进行通信。默认情况下,此流量可以穿过公共互联网。

用于 Amazon S3 <https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html (https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)>`_ 的 `AWS PrivateLink 可以与 VPC 接口端点结合使用,为托管存储卷提供安全的连接。此设置可确保从外部查询引擎到原生 Iceberg 卷的读写操作通过 AWS 内部网络进行,而非公共互联网。

优势

实施 VPC 接口端点来访问 Snowflake 托管存储卷具有以下优势:

  • 当外部查询引擎读取或写入 Snowflake 管理的 Iceberg 卷时,数据不会穿过公共互联网。

  • 在 AWS VPC 外部运行的客户端和 SaaS 应用程序(如 Microsoft PowerBI)可以安全地连接到 Snowflake。

  • 管理员无需修改防火墙设置即可访问卷数据。

  • 管理员可以对查询引擎连接存储的方式实施一致的安全策略和监控。

限制

AWS 不支持 Amazon S3 服务的跨区域 VPC 接口端点。因此,VPC 接口端点必须与 Snowflake 账户位于同一区域,才能提供与 Snowflake 托管存储卷的入站连接。

对 AWS PrivateLink 的跨区域支持在政府区域或中华人民共和国不可用。

使用 SnowGov 区域以符合联邦信息处理标准 (FIPS) 的客户应注意,Amazon S3 的 AWS Privatelink 不支持 FIPS 端点。

有关强制执行 FIPS 的 AWS 区域的更多信息,请参阅 支持的云区域

有关查找账户区域名称的信息,请参阅 Find the cloud-provider's name of the region for your account

有关 AWS PrivateLink 限制的更多信息,请参阅 AWS 文档 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#privatelink-limitations)。

开始使用

在配置 AWS 和 Snowflake 以允许请求通过 AWS PrivateLink 访问 Snowflake 托管存储卷之前,您必须满足相关前提条件。

先决条件

  • AWS PrivateLink for S3 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)。

    重要

    AWS PrivateLink for S3 是一项 AWS 服务,必须在您的云环境中启用。

    配置和实施此服务时如需帮助,请联系您的内部 AWS 管理员。

  • 按如下方式更新防火墙允许列表:

  • 适用于 us-east-1 客户:如果使用下列 Snowflake 客户端之一连接到 Snowflake,请升级到如下客户端版本:

    • JDBC 驱动程序:3.13.3(或更高版本)

    • ODBC 驱动程序:2.23.2(或更高版本)

    • Python Connector for Snowflake:2.5.1(或更高版本)

    • SnowSQL:1.2.17(或更高版本)

      • 请先升级 SnowSQL,然后再使用此功能。有关更多信息,请参阅 安装 SnowSQL

      • 从版本 1.3.0 开始,SnowSQL 默认禁用自动升级,以避免发生自动升级时可能影响生产环境的潜在问题。要升级,您应该手动下载和安装新版本,最好是在非生产环境中。Snowflake 建议您将此设置设为禁用,但您可以通过配置 SnowSQL noup 选项 选项手动启用自动升级行为。

使用接口端点访问 Snowflake 托管存储卷

要配置 VPC 接口端点以访问 Snowflake 托管存储卷,您组织中的以下角色必须相互协调:

  1. Snowflake 账户管理员(即具有 Snowflake ACCOUNTADMIN 系统角色的用户)。

  2. AWS 管理员。

  3. 网络管理员。

根据组织的不同,可能需要与多个人员或团队协调配置工作,从而实施以下配置步骤。

过程

请完成以下步骤,从而配置和实施通过 VPC 端点对 Snowflake 托管存储卷的安全访问:

  1. 作为 AWS 管理员,使用 AWS 控制台为 S3 创建一个 VPC 端点。记下 VPCE DNS 名称,以供下一步使用;不要 记录任何 VPCE DNS 分区名称。

    端点创建后,可通过 描述接口端点 (https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#describe-interface-endpoint) 找到 VPCE DNS 名称。

    示例 VPCE DNS名称:*.vpce-000000000000a12-abc00ef0.s3.us-west-2.vpce.amazonaws.com

  2. 配置外部查询引擎以直接使用 VPCE DNS 名称。请将 VPCE DNS 名称中的 * 替换为 bucket。例如,在 Apache Spark 中:

    .config("spark.sql.catalog.<catalog_name>.s3.endpoint",
            "bucket.vpce-000000000000a12-abc00ef0.s3.us-west-2.vpce.amazonaws.com")
    

    小技巧

    请使用单独的 Snowflake 账户进行测试,并在测试 DNS 中配置专用托管 VPC 区域来测试该功能,这样一来,测试是隔离的,不会影响其他工作负载。

阻止公共访问

在配置 VPC 接口端点以通过 AWS PrivateLink 访问托管存储卷之后,您可以选择使用网络规则和网络策略来限制对该卷的访问。

先决条件

要使用网络规则限制对 Snowflake 托管存储卷的访问,账户管理员必须启用 ENFORCE_NETWORK_RULES_FOR_SNOWFLAKE_MANAGED_STORAGE_VOLUME 参数:

USE ROLE ACCOUNTADMIN;
ALTER ACCOUNT SET ENFORCE_NETWORK_RULES_FOR_SNOWFLAKE_MANAGED_STORAGE_VOLUME = true;

创建网络规则

创建一个包含 MODE = SNOWFLAKE_MANAGED_STORAGE_VOLUMETYPE = AWSVPCEID 的网络规则,根据 VPC 端点标识符来限制对托管存储卷的访问:

CREATE NETWORK RULE managed_volume_rule
  TYPE = AWSVPCEID
  VALUE_LIST = ('vpce-123abc3420c1931')
  MODE = SNOWFLAKE_MANAGED_STORAGE_VOLUME
  COMMENT = 'Allow access from Horizon and S3 VPC endpoints';

应用网络策略

创建使用网络规则的网络策略并将其应用于账户:

CREATE NETWORK POLICY managed_volume_policy
  ALLOWED_NETWORK_RULE_LIST = ('managed_volume_rule')
  COMMENT = 'Restrict Snowflake-managed storage volume access to specific VPC endpoints';

ALTER ACCOUNT SET NETWORK_POLICY = managed_volume_policy;