Microsoft Entra ID でのサービス プリンシパルのセキュリティ保護

Microsoft Entra サービス プリンシパルは、テナントまたはディレクトリ内のアプリケーション オブジェクトをローカルに表現したものです。 これは、アプリケーション インスタンスの ID です。 サービス プリンシパルは、アプリケーションへのアクセス権と、アプリケーションがアクセスするリソースを定義します。 サービス プリンシパルは、アプリケーションが使用される各テナント内に作成されて、グローバルに一意なアプリケーション オブジェクトを参照します。 テナントによって、サービス プリンシパルのサインインとリソースへのアクセスがセキュリティで保護されます。

詳細情報: Microsoft Entra ID のアプリケーション オブジェクトとサービス プリンシパル オブジェクト

テナントとサービス プリンシパルの関係

シングルテナント アプリケーションには、そのホーム テナント内にサービス プリンシパルが 1 つあります。 マルチテナント Web アプリケーションまたは API では、各テナント内にサービス プリンシパルが 1 つ必要です。 サービス プリンシパルは、そのテナントのユーザーがアプリケーションまたは API を使用することに同意すると作成されます。 この同意によって、マルチテナント アプリケーションとそれに関連付けられたサービス プリンシパルの間に、一対多の関係が作成されます。

マルチテナント アプリケーションは、1 つのテナントに所属し、他のテナント内にインスタンスを持ちます。 サービスとしてのソフトウェア (SaaS) アプリケーションのほとんどが、マルチテナントを許容します。 サービス プリンシパルを使用して、シングルまたはマルチテナントの両方のシナリオで、アプリケーションとそのユーザーに必要なセキュリティ態勢を確保します。

ApplicationID と ObjectID

アプリケーション インスタンスには、ApplicationID (つまり、ClientID) と ObjectID という 2 つのプロパティがあります。

注意

アプリケーションサービス プリンシパルという用語は、認証タスクでアプリケーションについて言及するとき、同じ意味で使用されます。 ただし、Microsoft Entra ID には、2 つの表現のアプリケーションがあります。

ApplicationID は、グローバルなアプリケーションを表し、テナント全体のアプリケーション インスタンスで同一です。 ObjectID は、アプリケーション オブジェクトの一意の値です。 ユーザー、グループ、その他のリソースと同様に、ObjectID は、Microsoft Entra ID 内のアプリケーション インスタンスを識別するのに役立ちます。

詳細については、「Microsoft Entra ID のアプリケーションとサービス プリンシパルのリレーションシップ」をご覧ください

アプリケーションとそのサービス プリンシパル オブジェクトを作成する

以下を使用して、テナント内にアプリケーションとそのサービス プリンシパル オブジェクト (ObjectID) を作成できます。

  • Azure PowerShell
  • Microsoft Graph PowerShell
  • Azure コマンドライン インターフェイス (Azure CLI)
  • Microsoft Graph API
  • Azure ポータル
  • その他のツール

Screenshot of Application or Client ID and Object ID on the New App page.

サービス プリンシパルの認証

サービス プリンシパルを使用する場合、クライアント証明書とクライアント シークレットという 2 つの認証のメカニズムがあります。

Screenshot of Certificates and Client secrets under New App, Certificates and secrets.

証明書の方が安全性が高いため、可能な場合は証明書を使用することをお勧めします。 クライアント シークレットとは異なり、クライアント証明書が誤ってコードに埋め込まれることはありません。 可能な場合は、Azure Key Vault を証明書とシークレットの管理に使用して、以下の資産を、ハードウェア セキュリティ モジュールによって保護されているキーで暗号化します。

  • 認証キー
  • ストレージ アカウント キー
  • データ暗号化キー
  • .pfx ファイル
  • パスワード

Azure Key Vault の詳細と、それを証明書とシークレットの管理に使用する方法については、次を参照してください。

課題と軽減策

サービス プリンシパルを使用する場合は、次の表で課題と軽減策を確認してください。

課題 対応策
特権ロールに割り当てられたサービス プリンシパルのアクセス レビュー この機能はプレビュー状態です
サービス プリンシパルのアクセス レビュー Azure portal を使用したリソース アクセス制御リストの手動チェック
過剰なアクセス許可が付与されたサービス プリンシパル オートメーション サービス アカウントまたはサービス プリンシパルを作成するときに、タスクのアクセス許可を付与します。 サービス プリンシパルを評価して特権を減らします。
サービス プリンシパルの資格情報または認証方法に対する変更の特定 - 「機密性の高い操作のレポート ブック
」をご覧ください - Tech Community のブログ記事「Solorigate リスクの評価に役立つ Microsoft Entra ブック」をご覧ください

サービス プリンシパルを使用してアカウントを見つける

アカウントを見つけるには、Azure CLI または PowerShell を使用して次のコマンドを実行します。

  • Azure CLI - az ad sp list
  • PowerShell - Get-MgServicePrincipal -All:$true

詳細については、「MgServicePrincipal を取得する」をご覧ください。

サービス プリンシパルのセキュリティを評価する

セキュリティを評価するには、特権と資格情報の保存について評価します。 次の表を使用して、課題を軽減してください。

課題 対応策
マルチテナント アプリに同意したユーザーを検出し、マルチテナント アプリに対する不正な同意の付与を検出する - 次の PowerShell を実行して、マルチテナント アプリを見つけます
Get-MgServicePrincipal -All:$true | ? {$_.Tags -eq "WindowsAzureActiveDirectoryIntegratedApp"}
- ユーザーの同意を無効にします
- 選択されたアクセス許可について、確認済みの発行元からのユーザーの同意を許可します (推奨)
- それらをユーザー コンテキストで構成します
- それらのトークンを使用してサービス プリンシパルをトリガーします
サービス プリンシパルを使用した、スクリプト内でのハードコーディングされた共有シークレットの使用 証明書を使用します
誰が証明書またはシークレットを使用しているかの追跡 Microsoft Entra サインイン ログを使用して、サービス プリンシパルのサインインを監視します
条件付きアクセスではサービス プリンシパルのサインインを管理できない Microsoft Entra サインイン ログを使用して、サインインを監視します
Azure ロールベースのアクセス制御 (Azure RBAC) の既定のロールが共同作成者である ニーズを評価し、可能な限り最小限のアクセス許可を適用します

詳細情報: 条件付きアクセスとは

ユーザー アカウントからサービス プリンシパルに移行する

サービス プリンシパルとして Azure ユーザー アカウントを使用している場合は、マネージド ID またはサービス プリンシパルに移行できるかどうかを評価します。 マネージド ID を使用できない場合は、必要なタスクを実行するのに十分なアクセス許可とスコープをサービス プリンシパルに付与します。 サービス プリンシパルは、アプリケーションを登録するか、PowerShell を使用して作成できます。

Microsoft Graph を使用するときは、API のドキュメントを確認してください。 アプリケーションのアクセス許可の種類がサポートされていることを確認します。
servicePrincipal を作成する」を参照してください

詳細情報:

次のステップ

サービス プリンシパルに関する詳細情報:

サービス アカウントをセキュリティで保護する:

条件付きアクセス:

条件付きアクセスを使用して、信頼されていない場所からのサービス プリンシパルをブロックします。

場所ベースの条件付きアクセス ポリシーを作成する」を参照してください