サービス プリンシパルと証明書を使用した Power BI コンテンツの埋め込み

証明書ベースの認証を使用すると、クライアント証明書を使用して Microsoft Entra ID で認証できます。 クライアント証明書は Windows、Android、または iOS デバイス上に配置できます。また、クライアント証明書は Azure キー コンテナー内に保存できます。

この認証方法を使用すると、ローテーションまたは失効に対して、証明書を中央の場所から証明機関 (CA) を使用して管理できます。

Microsoft Entra ID での証明書の詳細については「クライアント資格情報フロー」GitHub ページを参照してください。

Method

  1. サービス プリンシパルを使用してコンテンツを埋め込む

  2. 証明書を作成する

  3. 証明書認証を設定する

  4. Azure Key Vault から証明書を取得する

  5. サービス プリンシパルと証明書を使用して認証する

手順 1 - サービス プリンシパルを使用してコンテンツを埋め込む

サービス プリンシパルを使用してコンテンツを埋め込むには、「サービス プリンシパルとアプリケーション シークレットを使用した Power BI コンテンツの埋め込み」の指示に従います。

注意

サービス プリンシパルを使用して埋め込んだコンテンツが既にある場合は、この手順をスキップして、手順 2 に進みます。

手順 2 - 証明書を作成する

信頼された "証明機関" から証明書を取得することも、証明書を自分で生成することもできます。

このセクションでは、Azure Key Vault を使用して証明書を作成する方法、および公開キーを含む .cer ファイルをダウンロードする方法について説明します。

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

  2. [キー コンテナー] リンクを検索して選びます。

    Azure portal ウィンドウのスクリーンショット。[サービス] 一覧にキー コンテナー サービスへのリンクが表示されています。

  3. 証明書の追加先とするキー コンテナーを選択します。

    Azure portal ウィンドウのスクリーンショット。[キー コンテナー] 一覧にぼかしたキー コンテナー一覧が表示されています。

  4. [証明書] を選択します。

    Azure portal ウィンドウのスクリーンショット。[キー コンテナー] ページが表示され、[証明書] 項目が強調表示されています。

  5. [Generate/Import](生成/インポート) を選択します。

    Azure portal ウィンドウのスクリーンショット。[証明書] ペインが表示され、[生成/インポート] 項目が強調表示されています。

  6. 次のように、 [証明書フィールドの作成] を構成します。

    • [証明書の作成方法] - 一般的

    • [証明書名] - 証明書の名前を入力する

    • [証明機関 (CA) の種類] - 自己署名証明書

    • [件名] - X.500 識別名

    • [DNS 名] - 0 個の DNS 名

    • [有効期間 (月単位)] - 証明書の有効期間を入力する

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

    • [有効期間のアクション タイプ] - 有効期間が指定された割合になったら、自動的に更新する

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

    • [ポリシーの詳細構成] - 未構成

  7. [作成] を選択します 新しく作成された証明書は、既定では無効にされます。 それは有効になるまで最大 5 分かかることがあります。

  8. 作成した証明書を選択します。

  9. [CER 形式でダウンロード] を選択します。 ダウンロードしたファイルには、公開キーが含まれています。

    Azure portal ウィンドウのスクリーンショット。[CER 形式でダウンロード] ボタンが強調表示されています。

手順 3 - 証明書の認証を設定する

  1. Microsoft Entra アプリケーションで、[証明書とシークレット] タブを選択します。

    Azure portal ウィンドウのスクリーンショット。アプリの [証明書とシークレット] ペインが表示されています。

  2. [証明書のアップロード] を選択し、このチュートリアルの手順 2 で作成およびダウンロードした .cer ファイルをアップロードします。 .cer ファイルには公開キーが含まれています。

手順 4 - Azure Key Vault から証明書を取得する

マネージド サービス ID (MSI) を使用して Azure Key Vault から証明書を取得します。 このプロセスでは、公開キーと秘密キーの両方を含む .pfx 証明書を取得する必要があります。

Azure Key Vault から証明書を読み取る方法については、コード例を参照してください。 Visual Studio を使用する場合は、「MSI を使用するように Visual Studio を構成する」を参照してください。

private X509Certificate2 ReadCertificateFromVault(string certName)
{
    var serviceTokenProvider = new AzureServiceTokenProvider();
    var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(serviceTokenProvider.KeyVaultTokenCallback));
    CertificateBundle certificate = null;
    SecretBundle secret = null;

    certificate = keyVaultClient.GetCertificateAsync($"https://{KeyVaultName}.vault.azure.net/", certName).Result;
    secret = keyVaultClient.GetSecretAsync(certificate.SecretIdentifier.Identifier).Result;
    
    return new X509Certificate2(Convert.FromBase64String(secret.Value));
}

手順 5 - サービス プリンシパルと証明書を使用して認証する

サービス プリンシパルと、Azure Key Vault に格納されている証明書を使用してご自分のアプリを認証するには、Azure Key Vault に接続します。

Azure Key Vault に接続して証明書を読み取るには、次のコード サンプルを参照してください。

注意

ご自分の組織によって作成された証明書を既にお持ちの場合は、 .pfx ファイルを 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();
    return await clientApp.AcquireTokenForClient(Scope).ExecuteAsync();
}

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

埋め込みソリューションを作成する場合は、マネージド サービス ID (MSI) を使用するように Visual Studio を構成すると便利な場合があります。 MSI は、Microsoft Entra ID を管理できるようにする機能です。 構成が完了すると、Visual Studio は Azure Key Vault に対して認証を行うようになります。

注意

Visual Studio にサインインしたユーザーには、証明書を得るために Azure Key Vault のアクセス許可が必要です。

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

  2. [ツール]>[オプション] の順に選びます。

    Visual Studio ウィンドウのスクリーンショット。[ツール] メニューの [オプション] ボタンが強調表示されています。

  3. [アカウントの選択] を検索して選択します。

    Visual Studio の [オプション] ウィンドウのスクリーンショット。検索結果の [アカウントの選択] オプションが強調表示されています。

  4. ご利用の Azure Key Vault へのアクセス権を持つアカウントを追加します。