为 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'
)
);
备注
在为 STORAGE_BASE_URL 指定值时,使用
azure://
前缀,不使用https://
。有关指定 OneLake 位置(预览功能)的信息,请参阅 CREATE EXTERNAL VOLUME 参考页面。
如果您使用 Microsoft Fabric OneLake 存储位置的区域端点,请使用与 Microsoft Fabric 容量相同的区域。这也必须是托管您的 Snowflake 账户的同一区域。
第 2 步:授予 Snowflake 对存储位置的访问权限¶
要检索 Microsoft 权限请求页面的 URL,请使用 DESCRIBE EXTERNAL VOLUME 命令。指定先前创建的外部卷的名称。
DESC EXTERNAL VOLUME exvol;
记录以下属性的值:
属性
描述
AZURE_CONSENT_URL
Microsoft 权限请求页面的 URL。
AZURE_MULTI_TENANT_APP_NAME
为账户创建的 Snowflake 客户端应用程序的名称。在本部分后面的步骤中,您会授予此应用程序在允许的存储位置获取访问令牌的权限。
您可在以下步骤中使用这些值。
在 Web 浏览器中,导航到 Microsoft 权限请求页面 (
AZURE_CONSENT_URL
)。选择 Accept。此操作允许为 Snowflake 账户创建的 Azure 服务主体获取租户内指定资源的访问令牌。仅当您在存储账户级授予服务主体适当的权限时,才能成功获取访问令牌(请参阅下一步)。
Microsoft 权限请求页面会重定向到 Snowflake 公司站点 (snowflake.com)。
登录 Microsoft Azure 门户。
前往 Azure Services » Storage Accounts。选择 Snowflake 服务主体需要访问的存储账户的名称。
备注
您必须在存储账户级别(而非容器级别)为外部卷设置 IAM 权限。
选择 Access Control (IAM) » Add role assignment。
选择要授予 Snowflake 服务主体的读写访问权限的
Storage Blob Data Contributor
角色。备注
Storage Blob Data Contributor
角色授予对外部卷位置的写入访问权限。要完全配置写入访问权限,请将外部卷的ALLOW_WRITES
参数设置为TRUE
(默认值)。搜索 Snowflake 服务主体。这是 DESC EXTERNAL VOLUME 输出(第 1 步中)中 AZURE_MULTI_TENANT_APP_NAME 属性的身份。在 AZURE_MULTI_TENANT_APP_NAME 属性中搜索下划线 之前 的字符串。
重要
Azure 可能需要一个小时或更长时间才能创建通过此部分中的 Microsoft 请求页面请求的 Snowflake 服务主体。如果服务主体不能立即使用,请等待一两个小时,然后再次搜索。
如果删除了服务主体,外部卷将停止工作。
选择 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');
后续步骤¶
配置外部卷后,您可以创建 Iceberg 表。
要创建使用外部目录的只读 Iceberg 表,请参阅 配置目录集成。
要创建具有完整 Snowflake 平台支持的 Iceberg 表,请参阅 创建 Snowflake 管理的表。