サービス プリンシパルを使用した Azure 認証

この記事では、サービス プリンシパルを使用した Microsoft Entra トークン認証が、Azure Identity ライブラリによってどのようにサポートされているかについて説明します。 この記事に含まれるサブジェクトは次のとおりです。

詳細については、Microsoft Entra ID プラットフォームのアプリケーションとサービス プリンシパルのオブジェクトに関するページを参照してください。 サービス プリンシパル認証の問題のトラブルシューティングについては、「サービス プリンシパル認証のトラブルシューティング」を参照してください。

Azure CLI でサービス プリンシパルを作成する

クライアント シークレットの資格情報を作成または取得するには、次の Azure CLI の例を使用します。

次のコマンドを使用して、サービス プリンシパルを作成し、Azure リソースへのアクセスを構成します。

az ad sp create-for-rbac \
    --name <your application name> \
    --role Contributor \
    --scopes /subscriptions/mySubscriptionID

このコマンドにより、次の出力のような値が返されます。

{
"appId": "generated-app-ID",
"displayName": "dummy-app-name",
"name": "http://dummy-app-name",
"password": "random-password",
"tenant": "tenant-ID"
}

次のコマンドを使用して、証明書と共にサービス プリンシパルを作成します。 この証明書のパスと場所をメモしておきます。

az ad sp create-for-rbac \
    --name <your application name> \
    --role Contributor \
    --cert <certificate name> \
    --create-cert

返された資格情報を確認し、次の情報をメモしておきます。

  • AZURE\_CLIENT\_ID (appId)。
  • AZURE\_CLIENT\_SECRET (パスワード)。
  • AZURE\_TENANT\_ID (テナント)。

クライアント シークレットの資格情報

この資格情報は、作成されたサービス プリンシパルを、そのクライアント シークレット (パスワード) を使用して認証します。 この例では、ClientSecretCredential を使用して azure-security-keyvault-secrets クライアント ライブラリから SecretClient を認証することを示しています。

/**
 *  Authenticate with client secret.
 */
ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
  .clientId("<your client ID>")
  .clientSecret("<your client secret>")
  .tenantId("<your tenant ID>")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(clientSecretCredential)
  .buildClient();

クライアント証明書の資格情報

この資格情報は、作成されたサービス プリンシパルを、そのクライアント証明書を使用して認証します。 この例では、ClientCertificateCredential を使用して azure-security-keyvault-secrets クライアント ライブラリから SecretClient を認証することを示しています。

/**
 *  Authenticate with a client certificate.
 */
ClientCertificateCredential clientCertificateCredential = new ClientCertificateCredentialBuilder()
  .clientId("<your client ID>")
  .pemCertificate("<path to PEM certificate>")
  // Choose between either a PEM certificate or a PFX certificate.
  //.pfxCertificate("<path to PFX certificate>", "PFX CERTIFICATE PASSWORD")
  .tenantId("<your tenant ID>")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(clientCertificateCredential)
  .buildClient();

次のステップ

この記事では、サービス プリンシパルを使用した認証について説明しました。 この形式の認証は、Azure SDK for Java で可能な認証方法のうちの 1 つです。 次の記事では、他の方法について説明します。

サービス プリンシパル認証に関連する問題が発生した場合は、「サービス プリンシパル認証のトラブルシューティング」を参照してください。

認証について習得した後、SDK によって提供されるログ機能の詳細について「Azure SDK for Java でログを構成する」を参照してください。