次の方法で共有


セマンティック リンクのサービス プリンシパルのサポート

Azure サービス プリンシパル (SPN) は、特定の Azure リソースにアクセスするためにアプリケーションまたは自動化ツールによって使用されるセキュリティ ID です。 ユーザー ID とは異なり、サービス プリンシパルは、正確なアクセス許可を割り当てることができる非対話型のアプリケーション ベースの ID であり、自動化されたプロセスやバックグラウンド サービスに最適です。 一般的なサービス プリンシパルの詳細については、「 Microsoft Entra ID のアプリケーション オブジェクトとサービス プリンシパル オブジェクト」を参照してください。

Microsoft Fabric では、サービス プリンシパル認証でセマンティック リンクを使用するための 2 つの一般的なシナリオがサポートされています。

  • サービス プリンシパルによってトリガーされるノートブックの実行: サービス プリンシパルを使用して、セマンティック リンクを呼び出す自動またはスケジュールされたノートブック ジョブを認証し、ユーザーのサインインなしで非対話型の実行を有効にします。
  • サービス プリンシパルを使用してセマンティック リンクを手動で認証する: 対話型ワークフローまたはアドホック ワークフロー中にセマンティック リンクを呼び出すときに、サービス プリンシパルの資格情報を指定します。

ワークフローに一致するシナリオを選択し、構成手順に進みます。

サービス プリンシパルのサポートには、セマンティック リンク バージョン 0.12.0 以降が必要です。 既定のランタイム イメージには、以前のバージョンが含まれている場合があります。 ノートブック環境のパッケージを次の方法で更新します。

%pip install -U semantic-link

インストール後、カーネルを再起動 (またはジョブを再実行) して、更新されたパッケージを取得します。 インストールされているバージョンを確認します。

import sempy
print(sempy.__version__)

パイプラインまたはジョブ スケジューラ API を使用してノートブックを実行する場合は、実行環境でジョブのセットアップの一部として更新されたパッケージがインストールされていることを確認します。

サービス プリンシパルによってトリガーされるノートブックの実行は、サービス プリンシパルで認証される非対話型ノートブックの実行を指します。 次の 2 つのシナリオがあります。

  • ファブリック パイプライン: サービス プリンシパル認証を使用してパイプラインの一部として呼び出されるノートブック。
  • ジョブ スケジューラ API: サービス プリンシパル認証を使用して Fabric パブリック 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

対話型ノートブックの実行に対してサービス プリンシパルを認証するには、次の 2 つの方法があります。

[前提条件]

  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)

ノートブックにシークレットを埋め込まない場合は、 set_service_principalへの Key Vault 参照を指定します。 set_service_principal は、シークレットまたは証明書の形式 (vault_url、secret_name) のタプルを受け取り、実行時に解決し、資格情報をコードや格納された成果物から除外します。 ノートブックを実行するサービス プリンシパルに、シークレットと証明書に対する Key Vault の "取得" アクセス許可があることを確認します。

例:


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)

または、Fabric Analytics SDK の既定の認証として TokenCredential を設定します。

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