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

サービス プリンシパルとは、Azure Active Directory (Azure AD) アプリケーションによる Power BI サービスのコンテンツと API へのアクセスを可能にするための認証方法です。

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

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

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

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

注意

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

メソッド

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

  1. Azure AD アプリを作成します。

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

    注意

    これらの手順については手順 1 で説明します。 Azure AD アプリの作成の詳細については、Azure AD アプリの作成に関するページを参照してください。

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

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

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

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

重要

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

手順 1 - Azure AD アプリを作成する

次のいずれかの方法を使って、Azure AD アプリを作成します。

Azure portal で Azure AD アプリを作成する

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

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

    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.

    Note

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

PowerShell を使用した Azure AD アプリの作成

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

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

  • 新しいアプリのクライアント 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 - Azure AD セキュリティ グループを作成する

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

注意

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

Azure AD セキュリティ グループを作成するには、次の 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 サービス管理者設定を有効にする

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

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

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

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

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

  • 組織全体または Azure AD で作成した特定にセキュリティ グループに対して、[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 - サービス プリンシパルを、ご利用のワークスペースに追加します。

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

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

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

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

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

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

    • ご利用のサービス プリンシパル。 サービス プリンシパルの名前は、Azure AD アプリの [概要] タブに表示される、Azure AD アプリの "表示名" です。
    • サービス プリンシパルを含むセキュリティ グループ
  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 インスタンスのアクセス許可が含まれている必要があります。 このために、サービス プリンシパルを含むセキュリティ グループを使用することはできません。

次のステップ