サービス プリンシパルと証明書を使用した Power BI コンテンツの埋め込みEmbed Power BI content with service principal and a certificate

サービス プリンシパルとは、Azure AD アプリケーションが Power BI サービスのコンテンツと API にアクセスできるようにするための認証方法です。Service principal is an authentication method that can be used to let an Azure AD application access Power BI service content and APIs.

Azure Active Directory (Azure AD) アプリを作成すると、サービス プリンシパル オブジェクトが作成されます。When you create an Azure Active Directory (Azure AD) app, a service principal object is created. サービス プリンシパル オブジェクト (単に "サービス プリンシパル" とも呼ばれる) を使用することで、Azure AD はご利用のアプリの認証を行うことができます。The service principal object, also known simply as service principal, allows Azure AD to authenticate your app. 認証が完了すると、アプリは Azure AD テナント リソースにアクセスできるようになります。Once authenticated, the app can access Azure AD tenant resources.

認証を行うために、サービス プリンシパルでは、Azure AD アプリの "アプリケーション ID" と次のいずれかが使用されます。To authenticate, the service principal uses the Azure AD app's Application ID, and one of the following:

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

注意

ご利用のバックエンド サービスは、秘密キーではなく、証明書を使用してセキュリティで保護することをお勧めします。We recommend that you secure your backend services using certificates, rather than secret keys. 秘密キーまたは証明書を使用して Azure AD からアクセス トークンを取得する方法の詳細を説明しますLearn more about getting access tokens from Azure AD using secret keys or certificates.

証明書ベースの認証Certificate-based authentication

証明書ベースの認証では、Windows、Android、または iOS デバイス上のクライアント証明書、または Azure Key Vault に保持されているクライアント証明書を、Azure Active Directory (Azure AD) と共に使用して認証することができます。Certificate-based authentication enables you to be authenticated by Azure Active Directory (Azure AD) with a client certificate on a Windows, Android or iOS device, or kept in an Azure Key Vault.

この認証方法を使用すると、ローテーションまたは失効に対して、証明書を中央の場所から CA を使用して管理できます。Using this method of authentication allows managing certificates from a central place, using the CA, for rotation or revocation.

Azure AD での証明書の詳細については「クライアント資格情報フロー」GitHub ページを参照してください。You can learn more about certificates in Azure AD in the Client credential flows GitHub page.

メソッドMethod

埋め込み分析でサービス プリンシパルと証明書を使用するには、次の手順を行います。To use service principal and a certificate with embedded analytics, follow these steps:

  1. 証明書を作成する。Create a certificate.

  2. Azure AD アプリケーションを作成するCreate an Azure AD Application.

  3. 証明書認証を設定するSet up certificate authentication.

  4. Azure Key Vault から証明書を取得するGet the certificate from Azure Key Vault.

  5. サービス プリンシパルと証明書を使用して認証するAuthenticate using service principal and a certificate.

手順 1 - 証明書を作成するStep 1 - Create a certificate

信頼された "証明機関" から証明書を取得することも、証明書を自分で生成することもできます。You can procure a certificate from a trusted Certificate Authority, or generate a certificate yourself.

このセクションでは、Azure Key Vault を使用して証明書を作成する方法、および公開キーを含む .cer ファイルをダウンロードする方法について説明します。This section describes creating a certificate using Azure Key Vault, and downloading the .cer file which contains the public key.

  1. Microsoft Azure にログインします。Log into Microsoft Azure.

  2. Key Vaults を検索し、 [Key Vaults] リンクをクリックします。Search for Key Vaults and click the Key Vaults link.

    キー コンテナー

  3. 証明書の追加先とするキー コンテナーをクリックします。Click the key vault you want to add a certificate to.

    Key Vault の選択

  4. [証明書] をクリックします。Click Certificates.

    [証明書] がコールアウトされた [キー コンテナー] ページを表示するスクリーンショット。

  5. [生成/インポート] をクリックします。Click Generate/Import.

    [生成/インポート] がコールアウトされた [証明書] ウィンドウを表示するスクリーンショット。

  6. 次のように、 [証明書フィールドの作成] を構成します。Configure the Create a certificate fields as follows:

    • [証明書の作成方法] - 一般的Method of Certificate Creation - General

    • [証明書名] - 証明書の名前を入力するCertificate Name - Enter a name for your certificate

    • [証明機関 (CA) の種類] - 自己署名証明書Type of Certificate Authority (CA) - Self-signed certificate

    • [件名] - X.500 識別名Subject - An X.500 distinguished name

    • [DNS 名] - 0 個の DNS 名DNS Names - 0 DNS names

    • [有効期間 (月単位)] - 証明書の有効期間を入力するValidity Period (in months) - Enter the certificate's validity duration

    • [コンテンツの種類] - PKCS #12Content Type - PKCS #12

    • [有効期間のアクション タイプ] - 有効期間が指定された割合になったら、自動的に更新するLifetime Action Type - Automatically renew at a given percentage lifetime

    • [有効期間の割合] - 80Percentage Lifetime - 80

    • [ポリシーの詳細構成] - 未構成Advanced Policy Configuration - Not configured

  7. [作成] をクリックします。Click Create. 新しく作成された証明書は、既定では無効にされます。The newly created certificate is disabled by default. それは有効になるまで最大 5 分かかることがあります。It can take up to five minutes to become enabled.

  8. 作成した証明書を選択します。Select the certificate you created.

  9. [CER 形式でダウンロード] をクリックします。Click Download in CER format. ダウンロードしたファイルには、公開キーが含まれています。The downloaded file contains the public key.

    cer としてダウンロードする

手順 2 - Azure AD アプリケーションを作成するStep 2 - Create an Azure AD Application

  1. Microsoft Azure にログインします。Log into Microsoft Azure.

  2. [アプリの登録] を検索し、 [アプリの登録] リンクをクリックします。Search for App registrations and click the App registrations link.

    Azure アプリの登録

  3. [新規登録] をクリックします。Click New registration.

    新しい登録

  4. 必要な情報を入力します。Fill in the required information:

    • 名前 - 自分のアプリケーションの名前を入力しますName - Enter a name for your application
    • サポートされているアカウントの種類 - サポートされているアカウントの種類を選択しますSupported account types - Select supported account types
    • (省略可能) リダイレクト URI - 必要に応じて URI を入力します(Optional) Redirect URI - Enter a URI if needed
  5. [登録] をクリックします。Click Register.

  6. 登録した後、 [概要] タブで "アプリケーション ID" を使用できます。後で使用できるように、"アプリケーション ID" をコピーして保存します。After registering, the Application ID is available from the Overview tab. Copy and save the Application ID for later use.

    アプリケーション ID

手順 3 - 証明書の認証を設定するStep 3 - Set up certificate authentication

  1. Azure AD アプリケーションで、 [証明書とシークレット] タブをクリックします。In your Azure AD application, click the Certificates & secrets tab.

    アプリの [証明書とシークレット] ウィンドウを Azure portal で表示するスクリーンショット。

  2. [証明書のアップロード] をクリックし、このチュートリアルの最初の手順で作成およびダウンロードした .cer ファイルをアップロードします。Click Upload certificate and upload the .cer file you created and downloaded in the first step of this tutorial. .cer ファイルには公開キーが含まれています。The .cer file contains the public key.

手順 4 - Azure Key Vault から証明書を取得するStep 4 - Get the certificate from Azure Key Vault

マネージド サービス ID (MSI) を使用して Azure Key Vault から証明書を取得します。Use Managed Service Identity (MSI) to get the certificate from Azure Key Vault. このプロセスでは、公開キーと秘密キーの両方を含む .pfx 証明書を取得する必要があります。This process involves getting the .pfx certificate that contains both the public and private keys.

Azure Key Vault から証明書を読み取る方法については、コード例を参照してください。Refer to the code example for reading the certificate from Azure Key Vault. Visual Studio を使用する場合は、「MSI を使用するように Visual Studio を構成する」を参照してください。If you want to use Visual Studio, refer to Configure Visual Studio to use MSI.

private X509Certificate2 ReadCertificateFromVault(string certName)
{
    var serviceTokenProvider = new AzureServiceTokenProvider();
    var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(serviceTokenProvider.KeyVaultTokenCallback));
    CertificateBundle certificate = null;
    SecretBundle secret = null;
    try
    {
        certificate = keyVaultClient.GetCertificateAsync($"https://{KeyVaultName}.vault.azure.net/", certName).Result;
        secret = keyVaultClient.GetSecretAsync(certificate.SecretIdentifier.Identifier).Result;
    }
    catch (Exception)
    {
        return null;
    }

    return new X509Certificate2(Convert.FromBase64String(secret.Value));
}

手順 5 - サービス プリンシパルと証明書を使用して認証するStep 5 - Authenticate using service principal and a certificate

サービス プリンシパルと、Azure Key Vault に格納されている証明書を使用してご自分のアプリを認証するには、Azure Key Vault に接続します。You can authenticate your app using service principal and a certificate that's stored in Azure Key Vault, by connecting to Azure Key Vault.

Azure Key Vault に接続して証明書を読み取るには、次のコードを参照してください。To connect and read the certificate from Azure Key Vault, refer to the code below.

注意

ご自分の組織によって作成された証明書を既にお持ちの場合は、 .pfx ファイルを Azure Key Vault にアップロードしてください。If you already have a certificate created by your organization, upload the .pfx file to Azure Key Vault.

// Preparing needed variables
var Scope = "https://analysis.windows.net/powerbi/api/.default"
var ApplicationId = "{YourApplicationId}"
var tenantSpecificURL = "https://login.microsoftonline.com/{YourTenantId}/"
X509Certificate2 certificate = ReadCertificateFromVault(CertificateName);

// Authenticating with a SP and a certificate
public async Task<AuthenticationResult> DoAuthentication(){
    IConfidentialClientApplication clientApp = null;
    clientApp = ConfidentialClientApplicationBuilder.Create(ApplicationId)
                                                    .WithCertificate(certificate)
                                                    .WithAuthority(tenantSpecificURL)
                                                    .Build();
    try
    {
        authenticationResult = await clientApp.AcquireTokenForClient(Scope).ExecuteAsync();
    }
    catch (MsalException)
    {
        throw;
    }
    return authenticationResult
}

MSI を使用するように Visual Studio を構成するConfigure Visual Studio to use MSI

埋め込みソリューションを作成する場合は、マネージド サービス ID (MSI) を使用するように Visual Studio を構成すると便利な場合があります。When creating your embedded solution, it may be useful to configure Visual Studio to use Managed Service Identity (MSI). MSI は、Azure AD ID を管理できるようにする機能です。MSI is a feature that enables you to manage your Azure AD identity. 構成が完了すると、Visual Studio は Azure Key Vault に対して認証を行うようになります。Once configured, it will let Visual Studio authenticate against your Azure Key Vault.

  1. Visual Studio でプロジェクトを開きます。Open your project in Visual Studio.

  2. [ツール] > [オプション] の順にクリックします。Click Tools > Options.

    Visual Studio のオプション

  3. [アカウントの選択] を検索し、 [アカウントの選択] をクリックします。Search for Account Selection and click Account Selection.

    アカウントの選択

  4. ご利用の Azure Key Vault へのアクセス権を持つアカウントを追加します。Add the account that has access to your Azure Key Vault.

考慮事項と制限事項Considerations and limitations

  • サービス プリンシパルは、新しいワークスペースでのみ動作します。Service principal only works with new workspaces.
  • サービス プリンシパルを使用する場合は、マイ ワークスペースはサポートされません。My Workspace isn't supported when using service principal.
  • 運用環境に移行するときは、専用の容量が必要です。Dedicated capacity is required when moving to production.
  • サービス プリンシパルを使用して Power BI ポータルにサインインすることはできません。You can't sign into the Power BI portal using service principal.
  • Power BI 管理ポータル内の開発者向け設定でサービス プリンシパルを有効にするには、Power BI 管理者権限が必要です。Power BI admin rights are required to enable service principal in developer settings within the Power BI admin portal.
  • 組織のアプリケーションへの埋め込みでは、サービス プリンシパルを使用することはできません。Embed for your organization applications can't use service principal.
  • データフロー管理はサポートされていません。Dataflows management is not supported.
  • サービス プリンシパルでは現在、管理 API は一切サポートされていません。Service principal currently does not support any admin APIs.
  • サービス プリンシパルを Azure Analysis Services データ ソースと共に使用する場合、サービス プリンシパル自体に Azure Analysis Services インスタンスのアクセス許可が含まれている必要があります。When using service principal with an Azure Analysis Services data source, the service principal itself must have an Azure Analysis Services instance permissions. この目的のためのサービス プリンシパルを含むセキュリティ グループを使用することはできません。Using a security group that contains the service principal for this purpose, doesn't work.
  • 現在、サービス プリンシパルでゲートウェイのデータ ソースにアクセスすることはできません。Service principal currently not able to access data sources in the gateway. つまり、ゲートウェイのデータ ソース ユーザーとしてサービス プリンシパルを追加することはできません。i.e, you cannot able to add service prinicpal as the data source users in gateway.

次の手順Next steps