使用服務主體和應用程式秘密內嵌Power BI內容

服務主體是一種驗證方法,可用來讓 Microsoft Entra 應用程式存取 Power BI 服務 內容和 API。

當您建立 Microsoft Entra 應用程式時, 會建立服務主體物件 。 服務主體物件,也稱為服務 主體,可讓 Microsoft Entra ID 驗證您的應用程式。 驗證之後,應用程式就可以存取 Microsoft Entra 租用戶資源。

若要進行驗證,服務主體會使用 Microsoft Entra 應用程式 的應用程式識別碼 和下列其中一項:

  • 憑證
  • 應用程式秘密

本文說明使用 應用程式識別碼應用程式秘密的服務主體驗證。

注意

建議您使用憑證而非秘密密鑰來保護後端服務。

方法

若要使用服務主體和應用程式標識碼進行內嵌分析,請採取下列步驟。 後續各節會詳細說明這些步驟。

  1. 建立 Microsoft Entra 應用程式

    1. 為您的 Microsoft Entra 應用程式建立秘密。
    2. 取得應用程式 的應用程式識別碼應用程式秘密

    注意

    這些步驟會在步驟 1說明。 如需建立 Microsoft Entra 應用程式的詳細資訊,請參閱 建立 Microsoft Entra 應用程式

  2. 建立 Microsoft Entra 安全組。

  3. 啟用 Power BI 服務 系統管理員設定。

  4. 將服務主體新增至您的工作區。

  5. 內嵌您的內容。

重要

Microsoft Entra 應用程式不需要您在服務主體建立 Azure 入口網站 中設定任何委派的許可權或應用程式許可權。 當您為服務主體建立 Microsoft Entra 應用程式以存取 Power BI REST API 時,建議您 避免新增許可權。 它們永遠不會使用,而且可能會導致難以疑難解答的錯誤。

步驟 1 - 建立 Microsoft Entra 應用程式

使用下列其中一種方法建立 Microsoft Entra 應用程式:

在 Azure 入口網站 中建立 Microsoft Entra 應用程式

  1. 登入 Azure 入口網站

  2. 搜尋並選取 [應用程式註冊]。

    Screenshot of the Azure portal, with app registration in the search box. That box and the App registrations icon are highlighted.

  3. 選取新增註冊

    Screenshot of the App registrations page in the Azure portal. New registration is highlighted.

  4. 填寫必要資訊:

    • 名稱 -輸入應用程式的名稱。
    • 支援的帳戶類型 - 選取支援的帳戶類型。
    • (選擇性) 重新導向 URI - 視需要輸入 URI。
  5. 選取註冊

  6. 註冊應用程式之後, 應用程式識別碼 可從 [ 概觀 ] 索引標籤取得。複製並儲存 應用程式識別碼 以供稍後使用。

    Screenshot of the Overview page of the new app. The Application ID is indecipherable and is highlighted.

  7. 選取 [ 憑證與秘密]。

    Screenshot of the Overview page of the new app. On the navigation pane, Certificates & secrets is highlighted.

  8. 選取 [新用戶端密碼]

    Screenshot that shows part of the Certificates & secrets page for the app. Under Client secrets, the New client secret button is highlighted.

  9. 在 [ 新增客戶端密碼 ] 視窗中,輸入描述、指定客戶端密碼到期的時間,然後選取 [ 新增]。

  10. 複製並儲存客戶端密碼值。

    Screenshot of the Certificates & secrets page for the app. Under Client secrets, a new secret is visible. Its indecipherable value is highlighted.

    注意

    離開此視窗之後,客戶端密碼值會隱藏,而且您無法再次檢視或複製它。

使用 PowerShell 建立 Microsoft Entra 應用程式

下列範例 PowerShell 腳本會建立新的 Microsoft Entra 應用程式和服務主體。 執行此文稿之前:

文稿執行之後,請記下腳本輸出中的下列資訊:

  • 新應用程式的用戶端識別碼
  • 新服務主體的物件標識碼
  • 服務主體秘密的值
# 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 安全組:

手動建立安全組

若要手動建立 Azure 安全組,請遵循建立基本群組和新增成員中的指示。

使用 PowerShell 建立安全組

下列範例腳本會建立新的安全組。 它也會將您稍早建立的服務主體新增至新的安全組。

  • 執行文稿之前,請將 取代 <app-client-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 中建立的特定安全組,啟用 在應用程式中 內嵌內容。

    Screenshot of the Developer settings in the Tenant settings section of the Admin portal. The option for embedding content in apps is turned on.

  • 啟用 [允許服務主體] 針對整個組織或您在 Microsoft Entra ID 中建立的特定安全組使用 Power BI API

    Screenshot of the Developer settings section. The option for allowing service principals to use Power BI APIs is turned on for one security group.

    重要

    服務主體可以存取他們啟用的任何租用戶設定。 視您的系統管理員設定而定,這包括特定的安全組或整個組織。

    若要限制服務主體存取特定租用戶設定,請只允許存取特定安全組。 或者,您可以建立服務主體的專用安全組,並將它從所需的租用戶設定中排除。

步驟 4 - 將服務主體新增至工作區

您的 Microsoft Entra 應用程式只有在可存取 Power BI 工作區時,才能存取 Power BI 報表、儀錶板和語意模型。 您可以藉由將應用程式的服務主體或其安全組新增至工作區作為成員或系統管理員,以提供該存取權。

有三種方式可將服務主體或其安全組新增至您的工作區:

手動新增服務主體或安全組

  1. 在 Power BI 服務 中,捲動至您想要啟用存取權的工作區。 從 [ 更多] 功能表中,選取 [ 工作區存取]。

    Screenshot that shows the expanded More menu for a workspace. On that menu, Workspace access is highlighted.

  2. 在 [存取] 窗格的 [新增系統管理員、成員或參與者] 底下,新增下列其中一項:

    • 您的 服務主體。 服務主體的名稱是 Microsoft Entra 應用程式的 [顯示名稱 ],如 Microsoft Entra 應用程式的 [概觀] 索引卷標中所示。
    • 包含服務主體的安全組
  3. 在下拉功能表中,選取 [成員] 或 [管理員]。

  4. 選取新增

使用 PowerShell 新增服務主體或安全組

下列各節提供範例 PowerShell 腳本,以成員身分將服務主體和安全組新增至 Power BI 工作區。

使用 PowerShell 將服務主體新增為工作區成員

下列腳本會將服務主體新增為工作區成員。 執行文稿之前:

  • 將取代 <service-principal-object-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> 為您稍早為新安全組記錄的物件識別碼。
  • 將取代 <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 實例許可權。 基於此目的使用包含服務主體的安全性群組將無法正常運作。