サービス プリンシパルとアプリケーション シークレットを使用した Power BI コンテンツの埋め込み

サービス プリンシパルとは、Microsoft Entra アプリケーションが Power BI サービスのコンテンツと API にアクセスできるようにするための認証方法です。

Microsoft Entra アプリを作成すると、 サービス プリンシパル オブジェクト が作成されます。 サービス プリンシパル オブジェクト (単に "サービス プリンシパル" とも呼ばれる) を使用することで、Microsoft Entra ID はご利用のアプリの認証を行うことができます。 認証が完了すると、アプリは Microsoft Entra テナント リソースにアクセスできるようになります。

認証を行うために、サービス プリンシパルでは、Microsoft Entra アプリの "アプリケーション ID" と次のいずれかが使用されます。

  • 証明書
  • アプリケーション シークレット

この記事では、"アプリケーション ID" と "アプリケーション シークレット" を使ったサービス プリンシパル認証について説明します。

注意

ご利用のバックエンド サービスは、秘密キーではなく、証明書を使ってセキュリティで保護することをお勧めします。

メソッド

埋め込み分析にサービス プリンシパルとアプリケーション ID を使うには、次の手順を実行します。 以下のセクションでは、これらの手順について説明します。

  1. Microsoft Entra アプリを作成します。

    1. Microsoft Entra アプリのシークレットを作成します。
    2. アプリの "アプリケーション ID" と "アプリケーション シークレット" を取得します。

    注意

    これらの手順については手順 1 で説明します。 Microsoft Entra アプリの作成の詳細については、「Microsoft Entra アプリの作成」を参照してください。

  2. Microsoft Entra セキュリティ グループを作成します。

  3. Power BI サービス管理者設定を有効にします。

  4. サービス プリンシパルを、ご利用のワークスペースに追加します。

  5. 自分のコンテンツを埋め込みます。

重要

Microsoft Entra アプリケーションをサービス プリンシパル用に作成した場合、Azure portal で委任されたアクセス許可またはアプリケーションのアクセス許可を構成する必要はありません。 サービス プリンシパルが Power BI REST API にアクセスするための Microsoft Entra アプリケーションを作成する場合は、アクセス許可を追加しないようにすることをお勧めします。 これらは使用されることはなく、トラブルシューティングが困難なエラーを引き起こす可能性があります。

手順 1 - Microsoft Entra アプリを作成する

次のいずれかの方法を使用して Microsoft Entra アプリを作成します。

Azure portal で Microsoft Entra アプリを作成する

  1. Azure portal にサインインします。

  2. [アプリの登録] を検索して選択します。

    検索ボックスにアプリの登録が表示されている Azure portal のスクリーンショット。そのボックスと [アプリの登録] アイコンが強調表示されています。

  3. [新規登録] を選択します。

    Azure portal の [アプリの登録] ページのスクリーンショット。[新規登録] が強調表示されています。

  4. 必要な情報を入力します。

    • 名前 - 自分のアプリケーションの名前を入力します。
    • サポートされているアカウントの種類 - サポートされているアカウントの種類を選びます。
    • (省略可能) リダイレクト URI - 必要に応じて URI を入力します。
  5. [登録] を選択します。

  6. アプリを登録すると、[概要] タブから [アプリケーション ID] を取得できます。後で使用できるように [アプリケーション ID] をコピーして保存します。

    新しいアプリの [概要] ページのスクリーンショット。[アプリケーション ID] は判読できず、強調表示されています。

  7. [証明書とシークレット] を選択します。

    新しいアプリの [概要] ページのスクリーンショット。ナビゲーション ウィンドウで、[証明書とシークレット] が強調表示されています。

  8. [新しいクライアント シークレット] を選択します。

    アプリの [証明書とシークレット] ページの一部を示すスクリーンショット。[クライアント シークレット] の [新しいクライアント シークレット] ボタンが強調表示されています。

  9. [クライアント シークレットの追加] ウィンドウで、説明を入力し、クライアント シークレットの有効期限を指定し、[追加] を選びます。

  10. クライアント シークレット値をコピーして保存します。

    アプリの [証明書とシークレット] ページのスクリーンショット。[クライアント シークレット] の下に、新しいシークレットが表示されます。その解読不能な値が強調表示されています。

    Note

    このウィンドウを閉じると、クライアント シークレット値は非表示になり、再び表示したりコピーしたりすることはできなくなります。

PowerShell を使用して Microsoft Entra アプリを作成する

次のサンプル PowerShell スクリプトを使って、新しい Microsoft Entra アプリとサービス プリンシパルを作成します。 このスクリプトを実行する前に、次の操作を行ってください。

スクリプトの実行後、スクリプトの出力に含まれる以下の情報をメモしておきます。

  • 新しいアプリのクライアント ID
  • 新しいサービス プリンシパルのオブジェクト ID
  • サービス プリンシパル シークレットの値
# Sign in as a user who's allowed to create an app.
Connect-MgGraph -Scopes "Application.ReadWrite.All" 

# Create a new Azure AD web application.
$web = @{
    RedirectUris = "https://localhost:44322"
    HomePageUrl = "https://localhost:44322"
}
$params = @{
    DisplayName = "myAzureADApp"
    Web = $($web)
}
$app = New-MgApplication @params
Write-Host "Client ID of new app: " $($app.AppId)

# Create a service principal.
$ServicePrincipalID=@{
  "AppId" = $($app.AppId)
  }
$sp = New-MgServicePrincipal -BodyParameter $($ServicePrincipalId)
Write-Host "Object ID of new service principal: " $($sp.Id)

# Create a key for the service principal.
$credential = Add-MgServicePrincipalPassword -ServicePrincipalId $($sp.Id)
Write-Host "Credential of new service principal: " $($credential.SecretText)

手順 2 - Microsoft Entra セキュリティ グループを作成する

ご利用のサービス プリンシパルには、Power BI コンテンツおよび API のいずれに対してもアクセス権がありません。 サービス プリンシパルにアクセス権を付与するために、Microsoft Entra ID でセキュリティ グループを作成します。 次に、作成したサービス プリンシパルをそのセキュリティ グループに追加します。

注意

組織全体に対してサービス プリンシパル アクセスを有効にする場合、この手順をスキップします。

Microsoft Entra セキュリティ グループを作成するには、次の 2 つの方法があります。

セキュリティ グループを手動で作成する

Azure セキュリティ グループを手動で作成するには、基本グループの作成とメンバーの追加に関する記事の手順を実行します。

PowerShell を使ってセキュリティ グループを作成する

次のサンプル スクリプトを使って、新しいセキュリティ グループを作成します。 また、先ほど作成したサービス プリンシパルを新しいセキュリティ グループに追加します。

  • このスクリプトを実行する前に、<app-client-ID> を、先ほどメモした新しいアプリのクライアント ID に置き換えます。
  • スクリプトを実行したら、スクリプトの出力に表示される新しいセキュリティ グループのオブジェクト ID をメモしておきます。
# Sign in as an admin.
Connect-MgGraph -Scopes "Application.ReadWrite.All"

# Get the service principal that you created earlier.
$servicePrincipal = Get-MgServicePrincipal -Filter "AppId eq '<app-client-ID>'"

# Create an Azure AD security group.
$group = New-MgGroup -DisplayName "securitygroup1" -SecurityEnabled -MailEnabled:$False -MailNickName "notSet"
Write-Host "Object ID of new security group: " $($group.Id)

# Add the service principal to the group.
New-MgGroupMember -GroupId $($group.Id) -DirectoryObjectId $($servicePrincipal.Id)

手順 3 - Power BI サービス管理者設定を有効にする

Microsoft Entra アプリから Power BI コンテンツと API にアクセスできるようにするには、Power BI 管理者が次の設定を有効にする必要があります。

  • アプリにコンテンツを埋め込む
  • Power BI API の使用をサービス プリンシパルに許可

Power BI 管理ポータル[テナントの設定] に移動し、[開発者向け設定] まで下にスクロールします。

  • 組織全体または Microsoft Entra ID で作成した特定のセキュリティ グループに対して、[アプリにコンテンツを埋め込む] を有効にします。

    管理ポータルの [テナントの設定] セクションにある [開発者向け設定] のスクリーンショット。[アプリにコンテンツを埋め込む] のオプションが有効になっています。

  • 組織全体または Power BI API で作成した特定にセキュリティ グループに対して、[Power BI API の使用をサービス プリンシパルに許可] を有効にします。

    [開発者向け設定] セクションのスクリーンショット。あるセキュリティ グループに対して、サービス プリンシパルが Power BI API を使うことを許可するオプションが有効になっています。

    重要

    サービス プリンシパルには、それが有効にされたテナント設定へのアクセス権があります。 これには、ご利用の管理者設定に応じて、特定のセキュリティ グループまたは組織全体が含まれます。

    サービス プリンシパル アクセスを特定のテナント設定に限定するには、特定のセキュリティ グループへのアクセスのみを許可します。 あるいは、サービス プリンシパル専用のセキュリティ グループを作成し、それを目的のテナント設定から除外することもできます。

手順 4 - サービス プリンシパルを、ご利用のワークスペースに追加します。

Microsoft Entra アプリが Power BI レポート、ダッシュボード、セマンティック モデルにアクセスできるのは、それが Power BI ワークスペースに対してアクセス権を持っている場合のみです。 そのアクセス権を付与するには、アプリのサービス プリンシパルまたはそのセキュリティ グループをメンバーまたは管理者としてワークスペースに追加します。

サービス プリンシパルまたはそのセキュリティ グループをワークスペースに追加するには、次の 3 つの方法があります。

サービス プリンシパルまたはセキュリティ グループを手動で追加する

  1. Power BI サービスで、アクセスを有効にするワークスペースまでスクロールします。 [その他] メニューから、[ワークスペース アクセス] を選びます。

    ワークスペースの展開した [その他] メニューを示すスクリーンショット。そのメニューの [ワークスペース アクセス] が強調表示されています。

  2. [アクセス] ペインの [Add admins, members, or contributors] (管理者、メンバー、または共同作成者の追加) で次のいずれかを追加します。

    • ご利用のサービス プリンシパル。 サービス プリンシパルの名前は、Microsoft Entra アプリの [概要] タブに表示される、Microsoft Entra アプリの "表示名" です。
    • サービス プリンシパルを含むセキュリティ グループ
  3. ドロップダウン メニューで [メンバー] または [管理者] を選びます。

  4. [追加] を選択します。

PowerShell を使ってサービス プリンシパルまたはセキュリティ グループを追加する

以下のセクションでは、Power BI ワークスペースにメンバーとしてサービス プリンシパルとセキュリティ グループを追加するためのサンプル PowerShell スクリプトを紹介します。

PowerShell を使ってサービス プリンシパルをワークスペース メンバーとして追加する

次のスクリプトを使って、ワークスペース メンバーとしてサービス プリンシパルを追加します。 スクリプトを実行する前に、次の手順を実行します。

  • <service-principal-object-ID> を、先ほどメモした新しいサービス プリンシパルのオブジェクト ID に置き換えます。
  • <workspace-name> を、サービス プリンシパルにアクセス権を付与するワークスペースの名前に置き換えます。
# Sign in to Power BI.
Login-PowerBI

# Set up the service principal ID.
$SPObjectID = "<service-principal-object-ID>"

# Get the workspace.
$pbiWorkspace = Get-PowerBIWorkspace -Filter "name eq '<workspace-name>'"

# Add the service principal to the workspace.
Add-PowerBIWorkspaceUser -Id $($pbiWorkspace.Id) -AccessRight Member -PrincipalType App -Identifier $($SPObjectID)

PowerShell を使ってセキュリティ グループをワークスペース メンバーとして追加する

次のスクリプトを使って、ワークスペースのメンバーとしてセキュリティ グループを追加します。 スクリプトを実行する前に、次の手順を実行します。

  • <security-group-object-ID> を、先ほどメモした新しいセキュリティ グループのオブジェクト ID に置き換えます。
  • <workspace-name> を、セキュリティ グループにアクセス権を付与するワークスペースの名前に置き換えます。
# Sign in to Power BI.
Login-PowerBI

# Set up the security group object ID.
$SGObjectID = "<security-group-object-ID>"

# Get the workspace.
$pbiWorkspace = Get-PowerBIWorkspace -Filter "name eq '<workspace-name>'"

# Add the security group to the workspace.
Add-PowerBIWorkspaceUser -Id $($pbiWorkspace.Id) -AccessRight Member -PrincipalType Group -Identifier $($SGObjectID)

手順 5 - コンテンツを埋め込む

独自のアプリケーション内、またはサンプル アプリケーション内にコンテンツを埋め込むことができます。

コンテンツが埋め込まれると、運用開始の準備が整います。

注意

証明書を使ってコンテンツをセキュリティで保護するには、「サービス プリンシパルと証明書を使用した Power BI コンテンツの埋め込み」に記載されている手順に従います。

考慮事項と制限事項

  • サービス プリンシパルを使用する場合は、マイ ワークスペースはサポートされません。
  • 運用環境に移行するときは、容量が必要です。
  • サービス プリンシパルを使って Power BI ポータルにサインインすることはできません。
  • Power BI 管理ポータル内の開発者向け設定でサービス プリンシパルを有効にするには、Power BI 管理者権限が必要です。
  • 組織のアプリケーションへの埋め込みでは、サービス プリンシパルを使用することはできません。
  • データフロー管理はサポートされていません。
  • サービス プリンシパルでは、一部の読み取り専用管理 API のみがサポートされています。 読み取り専用管理 API に対するサービス プリンシパルのサポートを有効にするには、テナントで Power BI サービス管理者設定を有効にする必要があります。 詳細については、「読み取り専用の管理 API に対してサービス プリンシパル認証を有効にする」を参照してください。
  • サービス プリンシパルを Azure Analysis Services データ ソースと共に使う場合、サービス プリンシパル自体に Azure Analysis Services インスタンスのアクセス許可が含まれている必要があります。 このために、サービス プリンシパルを含むセキュリティ グループを使用することはできません。