为 Azure 配置外部卷

使用外部卷向 Snowflake 授予对您自己的 Microsoft Azure 容器的受限访问权限。对于外部卷,Snowflake 支持以下 Azure 云存储服务:

  • Blob 存储

  • Data Lake Storage Gen2

  • 常规用途 v1

  • General-purpose v2

  • Microsoft Fabric OneLake

备注

为了加强安全态势,您可以将外部卷配置为使用专用连接(而不是公共互联网)传输网络流量。有关更多信息,请参阅 Microsoft Azure 外部存储卷的专用连接

先决条件

在配置外部卷之前,您需要具备以下条件:

  • Azure 存储容器。

    • 要使用 Snowflake 作为目录,容器必须位于托管 Snowflake 账户的同一区域。

    • 要将外部卷用于外部管理的 Iceberg 表,所有表数据和元数据文件都必须位于容器中。

    • 为支持数据恢复,为外部云存储位置启用版本控制

  • 在 Azure 中创建和管理 IAM 策略和角色的权限。如果您不是 Azure 管理员,请让 Azure 管理员执行这些任务。

如果使用 Azure 存储防火墙阻止未经授权的流量进入存储账户,请按照 允许 VNet 子网 IDs 中的说明明确授予 Snowflake 访问您的 Azure 存储账户的权限。

第 1 步:在 Snowflake 中创建外部卷

使用 CREATE EXTERNAL VOLUME 命令创建外部卷。

备注

只有账户管理员(具有 ACCOUNTADMIN 角色的用户)可执行此 SQL 命令。

以下示例创建一个外部卷,该卷定义了采用加密的 Azure 存储位置:

CREATE EXTERNAL VOLUME exvol
  STORAGE_LOCATIONS =
    (
      (
        NAME = 'my-azure-northeurope'
        STORAGE_PROVIDER = 'AZURE'
        STORAGE_BASE_URL = 'azure://exampleacct.blob.core.windows.net/my_container_northeurope/'
        AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
      )
    );
Copy

备注

  • 在为 STORAGE_BASE_URL 指定值时,使用 azure:// 前缀,不使用 https://

  • 有关指定 OneLake 位置(预览功能)的信息,请参阅 CREATE EXTERNAL VOLUME 参考页面。

  • 如果您使用 Microsoft Fabric OneLake 存储位置的区域端点,请使用与 Microsoft Fabric 容量相同的区域。这也必须是托管您的 Snowflake 账户的同一区域。

第 2 步:授予 Snowflake 对存储位置的访问权限

  1. 要检索 Microsoft 权限请求页面的 URL,请使用 DESCRIBE EXTERNAL VOLUME 命令。指定先前创建的外部卷的名称。

    DESC EXTERNAL VOLUME exvol;
    
    Copy

    记录以下属性的值:

    属性

    描述

    AZURE_CONSENT_URL

    Microsoft 权限请求页面的 URL。

    AZURE_MULTI_TENANT_APP_NAME

    为账户创建的 Snowflake 客户端应用程序的名称。在本部分后面的步骤中,您会授予此应用程序在允许的存储位置获取访问令牌的权限。

    您可在以下步骤中使用这些值。

  2. 在 Web 浏览器中,导航到 Microsoft 权限请求页面 (AZURE_CONSENT_URL)。

  3. 选择 Accept。此操作允许为 Snowflake 账户创建的 Azure 服务主体获取租户内指定资源的访问令牌。仅当您在存储账户级授予服务主体适当的权限时,才能成功获取访问令牌(请参阅下一步)。

    Microsoft 权限请求页面会重定向到 Snowflake 公司站点 (snowflake.com)。

  4. 登录 Microsoft Azure 门户。

  5. 前往 Azure Services » Storage Accounts。选择 Snowflake 服务主体需要访问的存储账户的名称。

    备注

    您必须在存储账户级别(而非容器级别)为外部卷设置 IAM 权限。

  6. 选择 Access Control (IAM) » Add role assignment

  7. 选择要授予 Snowflake 服务主体的读写访问权限的 Storage Blob Data Contributor 角色。

    备注

    Storage Blob Data Contributor 角色授予对外部卷位置的写入访问权限。要完全配置写入访问权限,请将外部卷的 ALLOW_WRITES 参数设置为 TRUE (默认值)。

  8. 搜索 Snowflake 服务主体。这是 DESC EXTERNAL VOLUME 输出(第 1 步中)中 AZURE_MULTI_TENANT_APP_NAME 属性的身份。在 AZURE_MULTI_TENANT_APP_NAME 属性中搜索下划线 之前 的字符串。

    重要

    • Azure 可能需要一个小时或更长时间才能创建通过此部分中的 Microsoft 请求页面请求的 Snowflake 服务主体。如果服务主体不能立即使用,请等待一两个小时,然后再次搜索。

    • 如果删除了服务主体,外部卷将停止工作。

    在 Azure 存储控制台中添加角色分配
  9. 选择 Review + assign

    备注

    分配角色时,变更最多可能需要 10 分钟才能生效。有关更多信息,请参阅 Microsoft Azure 文档中的 症状 – 未检测到角色分配变更 (https://learn.microsoft.com/en-us/azure/role-based-access-control/troubleshooting?tabs=bicep#symptom---role-assignment-changes-are-not-being-detected)。

第 3 步:验证存储访问

要检查 Snowflake 是否能成功对您的存储提供商进行身份验证,请调用 SYSTEM$VERIFY_EXTERNAL_VOLUME 函数。

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
Copy

后续步骤

配置外部卷后,您可以创建 Iceberg 表。

语言: 中文