语义链接的服务主体支持

Azure 服务主体(SPN)是应用程序或自动化工具用于访问特定 Azure 资源的安全标识。 与用户标识不同,服务主体是非交互式的基于应用程序的标识,可以分配精确的权限,使它们非常适合自动化过程或后台服务。 若要了解有关服务主体的详细信息,请参阅 Microsoft Entra ID 中的应用程序和服务主体对象

Microsoft Fabric 支持将语义链接与服务主体身份验证结合使用的两种常见方案:

  • 服务主体触发的笔记本运行:使用服务主体对调用语义链接的自动或计划的笔记本作业进行身份验证,从而在没有用户登录的情况下启用非交互式执行。
  • 使用服务主体手动对语义链接进行身份验证:在交互式或即席工作流期间调用语义链接时提供服务主体凭据。

选择与工作流匹配的方案,并继续执行配置步骤。

注释

服务主体支持需要语义链接版本 0.12.0 或更高版本。 默认运行时映像可能包括早期版本。 使用以下命令更新笔记本环境中的包:

%pip install -U semantic-link

安装后,重启内核(或重新运行作业)以选取更新的包。 验证已安装的版本:

import sempy
print(sempy.__version__)

如果在管道中或通过作业计划程序 API 运行笔记本,请确保执行环境在作业设置过程中安装更新的包。

服务主体触发的笔记本运行是指使用服务主体进行身份验证的非交互式笔记本执行。 有两种情况:

  • 构造管道:使用服务主体身份验证作为管道的一部分调用的笔记本。
  • 作业计划程序 API:使用服务主体身份验证通过 构造公共 API 触发的笔记本。

默认情况下,服务主体触发的笔记本运行不需要额外的配置或代码更改。 默认令牌服务会自动处理语义链接的基础身份验证。 但是,此默认流具有 功能限制 ,仅支持语义链接功能的子集,请参阅 支持的语义链接函数。 若要使用其他功能,建议 使用服务主体手动对语义链接进行身份验证

使用默认令牌服务运行服务主体触发的笔记本运行支持以下语义链接函数:

注释

服务主体身份验证阻止访问个人“我的工作区”。 目标为“我的工作区”的任何调用都失败,包括此受支持列表中的函数。

  • sempy.fabric.FabricRestClient
  • sempy.fabric.create_folder
  • sempy.fabric.create_lakehouse
  • sempy.fabric.create_notebook
  • sempy.fabric.delete_folder
  • sempy.fabric.delete_item
  • sempy.fabric.list_items
  • sempy.fabric.list_folders
  • sempy.fabric.list_datsets(..., mode='rest', endpoint='fabric')
  • sempy.fabric.list_dataflows(..., endpoint='fabric')
  • sempy.fabric.list_reports(..., endpoint='fabric')
  • sempy.fabric.list_workspaces(..., endpoint='fabric')
  • sempy.fabric.move_folder
  • sempy.fabric.rename_folder
  • sempy.fabric.resolve_workspace_id
  • sempy.fabric.resolve_workspace_name
  • sempy.fabric.resolve_workspace_name_and_id
  • sempy.fabric.resolve_dataset_id
  • sempy.fabric.resolve_dataset_name
  • sempy.fabric.resolve_dataset_name_and_id
  • sempy.fabric.resolve_folder_id
  • sempy.fabric.resolve_folder_path
  • sempy.fabric.resolve_item_id
  • sempy.fabric.resolve_item_name
  • sempy.fabric.run_notebook_job
  • sempy.fabric.get_lakehouse_id
  • sempy.fabric.get_workspace_id
  • sempy.fabric.get_artifact_id
  • sempy.fabric.get_notebook_workspace_id

可以通过两种方式对交互式笔记本运行的服务主体进行身份验证:

先决条件

  1. 使用 Azure 创建服务主体、分配角色和创建机密

  2. 确保具有管理员工作区角色的用户可以通过在工作区中 管理访问权限 授予 SPN 的访问权限。

    管理访问弹出窗口的 Fabric 门户的屏幕截图。

可以使用纯值设置服务主体身份验证:


import sempy.fabric as fabric
from sempy.fabric import set_service_principal

dataset = "<replace-with-your-dataset-name>"
workspace = "<replace-with-your-workspace-id>"

tenant_id = "<replace-with-your-tenant-id>"
client_id = "<replace-with-your-client-id>"
client_secret = "<replace-with-your-client-secret>"

with set_service_principal(tenant_id, client_id, client_secret=client_secret):
    fabric.run_model_bpa(dataset, workspace=workspace)

如果不想在笔记本中嵌入机密,请提供对 Key Vault 的引用 set_service_principalset_service_principal 接受机密或证书的元组(vault_url、secret_name),并在运行时解析它们,使凭据远离代码和存储的项目。 确保运行笔记本的服务主体具有密钥保管库“获取”机密和证书的权限。

示例:


tenant_kv = ("<replace-with-your-tenant-vault-url>", "<replace-with-your-tenant-secret-name>")
client_kv = ("<replace-with-your-client-vault-url>", "<replace-with-your-client-secret-name>")
client_cert_kv = ("<replace-with-your-client-certification-vault-url>", "<replace-with-your-client-certification-secret-name>")

with set_service_principal(tenant_kv, client_kv, client_certificate=client_cert_kv):
    fabric.run_model_bpa(dataset, workspace=workspace)

使用 Azure SDK 令牌凭据

可以使用 Azure SDK TokenCredential 与其他 Azure 库进行更多的控制和互作性。 创建凭据对象并将其传递给 sempy 函数,或在 Fabric Analytics SDK 中将其设置为默认值。

示例:

创建 TokenCredential 并将其传递给 sempy 函数:

from azure.identity import ClientSecretCredential

tenant_id = "your-tenant-id"
client_id = "your-client-id"
client_secret = "your-client-secret" 

credential = ClientSecretCredential(tenant_id, client_id, client_secret)

fabric.run_model_bpa(dataset, workspace=workspace, credential=credential)

或者将 TokenCredential 设置为 Fabric Analytics SDK 中的默认身份验证:

from fabric.analytics.environment.credentials import SetFabricAnalyticsDefaultTokenCredentials

with SetFabricAnalyticsDefaultTokenCredentials(credential):
    fabric.run_model_bpa(dataset, workspace=workspace)

注释

  • 不要将机密提交到源代码管理。 使用环境变量或 Key Vault 引用。
  • 确保服务主体具有所需的角色和工作区访问权限。
  • 服务主体身份验证仍无法访问“我的工作区”。

局限性

使用服务主体手动对语义链接进行身份验证时,请注意以下限制:

  • 拒绝访问个人“我的工作区”。 面向它的任何调用都失败。
  • 服务主体身份验证不支持以下函数:
    • sempy.fabric.list_apps
    • sempy.fabric.list_dataflow_storage_accounts
    • sempy.fabric.evaluate_measure
    • sempy.fabric.read_table(..., mode='rest')
    • sempy.fabric.execute_tmsl