Snowflake 管理的存储卷的 Azure Private Endpoint

本主题提供有关通过 Microsoft Azure Private Endpoint 连接到 Snowflake 内部暂存区的概念和详细说明。Snowflake 管理的存储卷是 使用 Snowflake 作为目录的 Apache Iceberg 表 的存储位置。

概述

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

Azure Private Endpoint (https://docs.microsoft.com/en-us/azure/private-link/private-endpoint-overview) 和 Azure 专用链接 (https://docs.microsoft.com/en-us/azure/private-link/private-link-overview) 可以组合在一起,以提供可连接至 Snowflake 管理的存储卷的安全连接。此设置可确保从外部查询引擎到原生 Iceberg 卷的读写操作通过 Azure 内部网络进行,而非公共互联网。

优势

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

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

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

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

限制

Microsoft Azure 定义了 Azure Private Endpoint 如何与 Snowflake 进行交互:

  • 单个 Azure Private Endpoint 可以与单个 Snowflake 服务端点通信。您可以有多个一对一配置连接到同一个管理的存储卷。

  • 您的存储账户中可以连接到 Snowflake 管理的存储卷的 Azure Private Endpoint 的最大数量是固定的。有关详细信息,请参阅 标准存储账户限制 (https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits#standard-storage-account-limits)。

配置 Azure Private Endpoint 以访问 Snowflake 管理的存储卷

若要将 Azure Private Endpoint 配置为访问 Snowflake 管理的存储卷,您必须获得组织中以下三个角色的支持:

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

  2. Microsoft Azure 管理员。

  3. 网络管理员。

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

完成以下步骤,通过 Azure Private Endpoint 配置和实现对 Snowflake 管理的存储卷的安全访问:

  1. 验证 Azure 订阅是否已注册到 Azure 存储资源管理器。此步骤允许您从专用端点连接到管理的存储卷。

  2. 作为 Snowflake 账户管理员,请在您的 Snowflake 账户中运行以下命令:记录分别由 privatelink-snowflake-managed-storage-volume-nfsprivatelink-snowflake-managed-storage-volume-fs 键定义的、属于 Snowflake 管理的存储卷(包括非故障安全和故障安全型)存储账户的资源 ID。有关更多信息,请参阅 ENABLE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK 和 。

    USE ROLE ACCOUNTADMIN;
    ALTER ACCOUNT SET ENABLE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK = true;
    SELECT KEY, VALUE FROM TABLE(FLATTEN(input=>PARSE_JSON(SYSTEM$GET_PRIVATELINK_CONFIG())));
    
  3. 作为 Azure 管理员,通过 Azure 门户为每个 Snowflake 管理的存储卷创建 Azure Private Endpoint。

    查看 Azure Private Endpoint 属性并记录资源 ID 值。您将提供此值作为下一步中的 privateEndpointResourceID 函数实参。

    有关更多信息,请参阅 Microsoft Azure 专用链接 文档 (https://docs.microsoft.com/en-us/azure/private-link/)。

    重要

    在继续执行下一步授权专用端点之前,您应该了解在存储位置 首次 授权专用端点时的 Microsoft Azure DNS 行为。

    当第一个专用端点连接并获得授权时,Azure 会在其公共 DNS 中自动创建一条 CNAME 记录。

    在正常情况下,此 DNS 更新不应影响到存储账户的现有公共连接。但是,如果您的环境已经配置了专用 DNS 区域,此 DNS 更新可能会导致意外行为。

    为避免此问题,Microsoft 建议在授权第一个专用端点之前,先在专用 DNS 区域配置中启用 Fallback to Internet 选项。

  4. 作为 Snowflake 管理员,使用 SYSTEM$AUTHORIZE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK_ACCESS 值作为函数实参调用 privateEndpointResourceID 函数。此步骤通过 Azure Private Endpoint 授权访问 Snowflake 管理的存储卷。

    USE ROLE ACCOUNTADMIN;
    SELECT SYSTEM$AUTHORIZE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK_ACCESS('<privateEndpointResourceID>');
    

    如有必要,请完成以下步骤以 撤消 对 Snowflake 管理的存储卷的访问权限。

  5. 让网络管理员参与更新专用 DNS 区域中的 DNS 设置。设置必须将专用链接 URL 解析为连接到 Snowflake 管理的存储卷存储账户的 Azure Private Endpoint 的专用 IP 地址。

    有关更多信息,请参阅 Azure Private Endpoint DNS 配置 (https://docs.microsoft.com/en-us/azure/private-link/private-endpoint-dns)。

    小技巧

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

    • 如果无法使用单独的 Snowflake 账户,请使用测试用户通过已更改 VNet 的 DNS 访问 Snowflake。

    • 若要从本地应用程序进行测试,请使用 DNS 转发将请求转发到已设置 DNS 的 VNet 中的 Azure 专用 DNS。

阻止公共访问

通过 Azure 专用链接将 Azure Private Endpoint 配置为访问管理的存储卷后,您可以选择阻止从公共 IP 地址到管理的存储卷的请求。阻止公共访问后,所有流量都必须通过 Azure Private Endpoint。

重要

在阻止公共访问 之前,确认使用专用连接的流量已成功到达托管存储卷。在不配置专用连接的情况下阻止公共访问可能会导致意外中断。

要阻止从公共 IP 地址到管理的存储卷的所有流量,请调用以下函数:

SELECT SYSTEM$BLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS();

该函数可能需要几分钟才能完成。

通过 IP 允许列表例外阻止公共访问

SYSTEM$BLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS_WITH_EXCEPTION 函数允许您在阻止公共访问的同时,保留允许访问管理的存储卷的 IP 地址或 CIDR 块白名单。

阻止公共访问,同时允许特定 IP 地址或 CIDR 块:

USE ROLE ACCOUNTADMIN;

SELECT SYSTEM$BLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS_WITH_EXCEPTION('1.2.3.4/24, 100.0.0.1');

确保阻止公共访问

确定公共 IP 地址是否可以访问 Snowflake 管理的存储卷,请调用 SYSTEM$SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS_STATUS 函数。

SELECT SYSTEM$SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS_STATUS();

解除对公共访问的阻止

要允许对先前被阻止的 Snowflake 管理的存储卷进行公共访问,请调用 SYSTEM$UNBLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS 函数。

SELECT SYSTEM$UNBLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS();

撤销 Azure Private Endpoint 以访问 Snowflake 管理的存储卷

要通过 Microsoft Azure Private Endpoint 撤消对 Snowflake 管理的存储卷的访问权限,请完成以下步骤:

  1. 作为 Snowflake 管理员,请确认 ENABLE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK 参数已设置为 TRUE。例如:

    USE ROLE ACCOUNTADMIN;
    SHOW PARAMETERS LIKE 'ENABLE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK' IN ACCOUNT;
    
  2. 作为 Snowflake 管理员,调用 SYSTEM$REVOKE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK_ACCESS 函数以撤销对专用端点的访问权限,并使用最初用于授权访问相同 privateEndpointResourceID 值。

    USE ROLE ACCOUNTADMIN;
    SELECT SYSTEM$REVOKE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK_ACCESS('<privateEndpointResourceID>');
    
  3. 作为 Azure 管理员,请通过 Azure 门户删除专用端点。

  4. 作为网络管理员,删除用于解析存储账户 URLs 的 DNS 和别名记录。