Azure 专用链接和 Snowflake Open Catalog¶
本主题介绍如何配置 Azure 专用链接,以使用入站专用连接将 Snowflake Open Catalog 账户直接连接到查询引擎。
先决条件¶
您的 Snowflake Open Catalog 账户托管在 Azure 上。
您拥有必要的权限,可以通过 Open Catalog 账户的专用连接 URL 来配置 DNS 服务。
第 1 步:检索 Open Catalog 账户设置¶
检索以下设置,以使用 Azure 专用链接配置对 Open Catalog 的访问权限。
登录 Snowflake Open Catalog。
在导航菜单中,选择 Settings。
在“Settings”页面上,将以下设置的值复制到文本编辑器中:
PrivateLink 账户 URL
无区域 PrivateLink 账户 URL
PrivateLink OCSP URL
无区域 PrivateLink OCSP URL
专用链接服务 ID
在 使用 Azure 专用链接配置对 Open Catalog 的访问权限 和 通过 Azure 专用链接连接到 Open Catalog 时,可以粘贴这些值。
有关每项设置的描述,请参阅 Snowflake 文档中的 SYSTEM$GET_PRIVATELINK_CONFIG 系统函数的返回值。在本主题中,账户设置的名称采用 JSON 格式。
备注
请记住,在适用的情况下,描述指的是 Snowflake 账户,但您的值实际上是针对 Snowflake Open Catalog 账户的。例如,privatelink-account-url
是 Snowflake Open Catalog 账户的 URL。
可选:要检索采用 JSON 格式的值,请 为 Open Catalog 创建 Snowflake CLI 连接,然后调用 SYSTEM$GET_PRIVATELINK_CONFIG 系统函数。
第 2 步:使用 Azure 专用链接配置对 Open Catalog 的访问权限¶
注意
本节仅介绍用于配置 VNet 环境的 Open Catalog 特定详细信息。此外,请注意,Snowflake 不负责所需防火墙更新和 DNS 记录的实际配置。如有与这些配置任务有关的问题,请直接联系 Microsoft 支持部门。
本节介绍如何使用 Azure 专用链接将 VNet 连接到 Open Catalog VNet。
要完成说明,需要使用 Azure CLI 或 Azure PowerShell。有关安装帮助,请参阅有关 Azure CLI (https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) 或 Azure PowerShell (https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell?view=azps-13.4.0&viewFallbackFrom=azps-2.6.0) 的 Microsoft 文档。
使用 Azure 专用链接启动与 Snowflake Open Catalog 的连接后,您可以在 Azure 门户中确定连接的批准状态。
创建专用端点。¶
备注
如果您已经为 Snowflake 账户创建了专用端点,并且该账户与 Open Catalog 账户处于同一个部署状态,则无需为 Open Catalog 账户创建新的专用端点。您可以选择跳过此步骤。
检索 Azure 账户详细信息。以下示例使用了 Azure CLI 的
az account list
命令。Name CloudName SubscriptionId State IsDefault ------- ---------- ------------------------------------ ------- ---------- MyCloud AzureCloud 13c... Enabled True
在 Azure 门户中,搜索 Private Link,然后在结果中选择 Private Link。
点击 Private endpoints,然后点击 Add。
在 Basics 选项卡上,填写环境的 Subscription、Resource group、Name 和 Region 字段,然后点击 Next:Resource。
在 Resource 选项卡上,对于 Connection Method,选择 Connect to an Azure resource by resource ID or alias。
对于 Resource ID or alias,输入您在 检索到专用连接的 Open Catalog 账户设置 时获取的
Private Link Service ID
的值。如果您收到有关别名值的错误消息,请联系 Snowflake 支持部门 获取资源 ID 值,然后使用该值重复此步骤。
专用端点获得批准后,“Private Link Center”页面的“Private endpoints”部分中的 CONNECTION STATE 将显示值 Pending。当您在下一个步骤中完成授权时,此值将更改为 Approved。
启用入站专用连接¶
在此过程中,您可以为 Open Catalog 账户启用 Azure 专用链接。此配置允许查询引擎通过专用连接连接到 Open Catalog。您将需要专用端点资源 ID、订阅 ID,以及包含联合用户访问凭据的联合令牌值。
要获取这些值,请在 Azure CLI 中执行以下命令:
要获取专用端点资源 ID,请执行以下命令,并将该值复制到文本编辑器中:
az network private-endpoint show
要获取订阅 ID,请执行以下命令,并在输出中记下 SubscriptionID 列中的值:
az account list --output table
要获取联合令牌值,请执行以下命令,然后将 accessToken 值复制到文本编辑器中:
az account get-access-token --subscription <SubscriptionID>
其中:
SubscriptionID
是您在上一步中获取的唯一标识符。
重要
生成 Azure 访问令牌的用户必须对订阅具有读取权限。最低权限是 Microsoft.Subscription/subscriptions/acceptOwnershipStatus/read (https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftsubscription)。 或者,默认角色
Reader
授予更多粗粒度的权限。accessToken
值是敏感信息,应将其视同密码值 – 不要 共享此值。如果需要,请联系 Snowflake 支持部门,在创建支持工单之前编辑任何命令和 URLs 中的访问令牌。
登录 Snowflake Open Catalog。
在导航菜单中,选择 Settings。
选择 *Authorize。
在“Authorize Private Link”对话框中,为账户启用专用连接:
对于 ID,输入您复制到文本编辑器的专用端点资源 ID。
对于 Federated token,输入您复制到文本编辑器的联合令牌值。
选择 Save。
设置 DNS¶
所有对 Open Catalog 的请求都必须通过专用端点进行路由。要将 Open Catalog 账户和 OCSP URLs 解析到专用端点的专用 IP 地址,请更新 DNS。
要获取端点 IP 地址,请在 Azure 门户搜索栏中输入您创建的专用端点的名称。
选择网络接口结果。
复制 Private IP address 的值。
配置 DNS,以将相应的端点值从 专用连接的 Open Catalog 账户设置 解析到专用 IP 地址。
第 3 步:通过 Azure 专用链接连接到 Open Catalog¶
要注册服务连接并通过 Azure 专用链接将查询引擎连接到 Open Catalog,请使用以下代码:
import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('iceberg_lab') \ .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,<maven_coordinate>') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'opencatalog') \ .config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \ .config('spark.sql.catalog.opencatalog.type', 'rest') \ .config('spark.sql.catalog.opencatalog.uri','https://<open_catalog_privatelink_account_url>/polaris/api/catalog') \ .config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \ .config('spark.sql.catalog.opencatalog.credential','<client_id>:<client_secret>') \ .config('spark.sql.catalog.opencatalog.warehouse','<catalog_name>') \ .config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:<principal_role_name>') \ .getOrCreate()
参数¶
备注
确保将 DNS 服务设置为与您为 <open_catalog_account_identifier>
指定的值相匹配。
参数 |
描述 |
---|---|
|
指定要连接的目录的名称。 |
|
指定外部云存储提供商的 Maven 坐标:
|
|
指定服务主体要使用的客户端 ID。 |
|
指定服务主体要使用的客户密钥。 |
|
指定 URL,以使用 AWS PrivateLink 或 Azure 专用链接连接到 Snowflake 账户。
|
|
指定授予服务主体的主体角色。 |
第 4 步(可选):为 Snowflake 创建目录集成¶
如果您使用 Snowflake 查询 Open Catalog 管理的表,请使用专用 IP 地址为 Snowflake 创建目录。要创建此目录集成,Snowflake 账户必须与 Open Catalog 账户处于相同的部署状态。
有关示例,请参阅 Snowflake 文档中的 示例:使用专用 IP 地址的目录集成 <https://docs.snowflake.com/en/user-guide/tables-iceberg-open-catalog-query#example-catalog-integration-that-uses-a-private-ip-address>
_。
备注
您还可以为 Snowflake Open Catalog UI 配置专用连接。此配置与为 Open Catalog 账户配置专用连接相结合,允许您通过专用连接(而不是通过公共互联网)访问 Open Catalog UI。
要配置此访问权限,请参阅 为 Snowflake Open Catalog UI 配置专用连接。