Azure / Microsoft Entra ID

Microsoft Entra ID認証・サービスプリンシパル・Managed Identityの違い

Azureでアプリ認証を設定していると、「アプリの登録」「エンタープライズアプリ」「サービスプリンシパル」「Managed Identity」という似た言葉が登場します。 これらはすべて同じものではありません。 Entra IDは認証とトークン発行の基盤サービスプリンシパルはアプリがテナント内で活動するためのIDManaged IdentityはAzureが資格情報を管理してくれるサービスプリンシパルです。 このページでは、それぞれの役割と関係を2枚の図で分かりやすく解説します。

Entra ID認証 認証の仕組み 誰・どのアプリなのかを確認し、トークンを発行する仕組み
サービスプリンシパル アプリ側のID アプリや自動処理がサインインするためのID
Managed Identity Azure管理型のID Azureが資格情報を管理してくれるサービスプリンシパル
Conclusion

まずは3つの違いを一言で

Entra ID認証は「認証の仕組み」です。 サービスプリンシパルとManaged Identityは、認証される「アプリ側のID」です。 Managed Identityはサービスプリンシパルの一種ですが、クライアントシークレットや証明書などの資格情報をAzureが自動的に管理します。

重要:同じ種類の概念ではありません

「Entra ID認証」と「サービスプリンシパル」は、同じ種類の概念ではありません。

  • Entra ID認証:認証とトークン発行の仕組み
  • サービスプリンシパル:認証される主体
  • Managed Identity:Azure管理型の認証主体
Figure 1

アプリの登録・サービスプリンシパル・エンタープライズアプリの関係

「アプリの登録」は設計図、「サービスプリンシパル」はテナント内で動く実体、「エンタープライズアプリ」はその実体を管理する画面です。

Azureのアプリ登録、サービスプリンシパル、エンタープライズアプリの関係を示した図。アプリ登録は設計図、サービスプリンシパルはアプリのログインID、エンタープライズアプリはテナント内の実体を管理する画面として説明している。
図1:アプリの登録でApplication Objectを作成し、各Entra IDテナントにService Principalが作成されます。Azure PortalではService Principalを「エンタープライズアプリ」から管理します。

設計図アプリの登録

  • 認証設定 / リダイレクトURI
  • APIアクセス許可
  • クライアントシークレット / 証明書
  • Application Objectを保持

実体サービスプリンシパル

  • テナント内でサインインする実体
  • Azure RBACの割り当て対象
  • APIアクセス許可の付与対象
  • テナントごとに作成される

管理画面エンタープライズアプリ

  • ユーザー・グループの割り当て
  • シングルサインオン / 条件付きアクセス
  • サインインログ / プロビジョニング
  • Service Principalを管理する画面
Application Object & Service Principal

Application ObjectとService Principalは何が違うのか

Application Objectは、アプリケーションそのものの定義です。アプリ名、リダイレクトURI、必要なAPIアクセス許可、認証方式など、アプリに共通する情報を保持します。

Service Principalは、そのアプリケーションが特定のEntra IDテナント内で活動するためのセキュリティIDです。Azure RBACのロール、ユーザーやグループの割り当て、テナント固有のアクセス制御などは、Service Principalに対して設定されます。

Application Object

  • アプリの定義
  • 「アプリの登録」から管理
  • ホームテナントに作成
  • Application(Client)IDを持つ
  • アプリ共通の設定を保持

Service Principal

  • テナント内におけるアプリの実体
  • 「エンタープライズアプリ」から管理
  • 利用される各テナントに作成
  • テナントごとに異なるObject IDを持つ
  • RBACやテナント固有の設定を保持
Client IDとObject IDを混同しない
  • Client ID:アプリケーションを識別するID
  • Object ID:Entra ID内の個別オブジェクトを識別するID

同じアプリでも、Application ObjectとService PrincipalのObject IDは異なります。

Authentication

Microsoft Entra ID認証とは

Microsoft Entra IDは、ユーザー、アプリケーション、サービス、ワークロードのIDを確認し、アクセストークンを発行するクラウドID基盤です。 ユーザーだけでなく、アプリケーションもEntra IDへサインインできます。

代表的な仕組み:OAuth 2.0 / OpenID Connect / SAML / アクセストークン / IDトークン / SSO / MFA / 条件付きアクセス / サインインログ / ID保護

分かりやすい例え

Entra IDは「社員証を確認し、入館証を発行する受付」のような存在です。 Service PrincipalやManaged Identityは、受付で確認される「アプリの社員証」に相当します。

Service Principal

サービスプリンシパルとは

サービスプリンシパルは、アプリケーション、スクリプト、自動化ツール、CI/CDなどがEntra IDへサインインするためのセキュリティIDです。 ユーザーアカウントを使わず、アプリ自身のIDとして認証できます。

代表的な認証方法:クライアントシークレット / 証明書 / フェデレーション資格情報 / Workload Identity Federation

デプロイ・CI/CD

GitHub ActionsやAzure DevOpsからAzureへデプロイ・リソース操作。

オンプレ・外部連携

オンプレのバッチ処理や外部SaaSからMicrosoft Graphを呼び出す。

IaC・独自アプリ

TerraformからAzureリソースを管理、独自アプリからAzure APIを利用。

シークレットの取り扱いに注意

クライアントシークレットは便利ですが、漏えい、期限切れ、ローテーション忘れのリスクがあります。 GitHub Actionsなど対応サービスでは、長期間保存するクライアントシークレットよりも、Workload Identity Federationを優先してください。

Managed Identity

Managed Identityとは

Managed Identityは、Azureリソースに対してEntra IDのIDを割り当てる機能です。 内部的にはService Principalが作成されますが、アプリケーションコードでクライアントシークレットや証明書を管理する必要がありません。 Azureが資格情報の作成、保管、ローテーションを管理します。

利用できる代表的なサービス:App Service / Functions / Virtual Machines / Container Apps / AKS / Automation / Logic Apps / API Management / Data Factory

アクセス先の例:Key Vault / Storage / Azure SQL Database / Cosmos DB / Service Bus / App Configuration / Azure Resource Manager / Microsoft Graphの一部シナリオ

有効化だけではアクセスできません

Managed Identityを有効化しただけでは、対象リソースへアクセスできません。Key Vault、Storage、SQLなどのアクセス先に対して、 必要最小限のRBACロールまたはAPIアクセス許可を割り当てる必要があります。 「シークレットが不要」とは、開発者がシークレットを保持・管理する必要がないという意味で、内部の資格情報はAzureが管理します。

Figure 2

Entra ID認証・サービスプリンシパル・Managed Identityの違い

認証の仕組みと、認証される2種類のアプリ用IDの関係を1枚で整理します。

Entra ID認証、サービスプリンシパル、Managed Identityの違いを比較した図。Entra IDは本人確認とトークン発行、サービスプリンシパルはアプリのID、Managed IdentityはAzureが資格情報を管理するアプリ用IDとして説明している。
図2:Entra IDは認証とトークン発行の基盤、Service PrincipalはアプリのID、Managed IdentityはAzureが資格情報を管理するService Principalです。

例1:Azure上のサービスから

VM / App Service / Functions Managed Identity Key Vault / Storage / SQL

Azure上のワークロードはManaged Identityでシークレットレスに接続できます。

例2:Azure外のツールから

GitHub Actions / 外部ツール Service Principal Azure

Azure外からはService Principal(できればフェデレーション資格情報)で接続します。

Comparison

Service PrincipalとManaged Identityの比較

Service Principal と Managed Identity の主な違い
観点 Service Principal Managed Identity
正体Entra IDテナント内のアプリ用セキュリティIDAzureによって管理されるService Principal
主な利用場所Azure外を含むアプリ、CI/CD、外部ツール、自動処理Managed Identityに対応したAzureサービス
資格情報シークレット、証明書、フェデレーション資格情報などAzureが管理するため、アプリ側で秘密情報を保持しない
資格情報のローテーション方式によって管理が必要Azureが管理
Azure RBAC利用可能利用可能
APIアクセス許可利用可能対象APIと認証方式に応じて利用可能
外部環境からの利用可能原則として対応Azureリソース上から利用
運用負荷認証方式によっては期限管理やローテーションが必要比較的低い
推奨シーンGitHub Actions、外部システム、マルチクラウド、オンプレミスApp Service、Functions、VMなどAzure上のワークロード
System-assigned / User-assigned

2種類のManaged Identity

System-assigned

  • Azureリソースに直接ひも付く
  • リソース作成後に有効化できる
  • リソースとライフサイクルが同じ
  • リソースを削除するとIDも削除される
  • 基本的に1つのリソースで利用する

覚え方:「そのAzureリソース専用の社員証」

User-assigned

  • 独立したAzureリソースとして作成する
  • 複数のAzureリソースへ割り当てられる
  • 利用元リソースを削除してもIDは残る
  • 権限やIDを共通化できる
  • 複数サービスで同じIDを使う構成に向く

覚え方:「複数のAzureリソースで共有できる社員証」

選び方:1つのApp Serviceだけで利用し、ライフサイクルも同じでよいなら System-assigned。 複数のApp Service、Functions、VMで共通のIDを使いたいなら User-assigned が適しています。

Flow

Azureリソースへアクセスするまでの流れ

  1. ユーザーまたはアプリがEntra IDへ認証を要求する
  2. Entra IDがユーザー、Service Principal、Managed Identityを確認する
  3. Entra IDが対象リソース向けのアクセストークンを発行する
  4. アプリがアクセストークンを付けてAzureリソースへアクセスする
  5. AzureリソースがトークンとRBACまたはAPI権限を確認する
  6. 権限があれば処理を許可する
認証と認可は別物

認証に成功しても、権限が付与されていなければアクセスできません。 認証は「あなたは誰か」の確認、認可は「何をしてよいか」の確認です。

Decision

どれを使えばよいか

質問1:Azure上の対応サービスからAzureリソースへアクセスしますか?
Yes Managed Identityを第一候補にする / No 次の質問へ
質問2:GitHub Actions、Azure DevOps、外部CI/CD、オンプレミス、他クラウドからアクセスしますか?
Yes Service Principalを利用する
質問3:利用サービスはWorkload Identity Federationに対応していますか?
Yes フェデレーション資格情報を優先 / No 証明書を検討し、必要な場合のみクライアントシークレット

Azure上のワークロード

  1. Managed Identity
  2. Workload Identity Federation
  3. 証明書
  4. クライアントシークレット

外部CI/CDや外部ワークロード

  1. Workload Identity Federation
  2. 証明書
  3. クライアントシークレット

※ これは絶対的な順位ではなく、システム要件や各サービスの対応状況により異なる場合があります。

Examples

具体例で理解する

例1:App ServiceからKey Vault

App Service Managed Identity Key Vault Secrets User シークレット取得

アプリ設定にKey Vaultのクライアントシークレットを保存する必要がありません。

例2:Azure FunctionsからStorage

Functions Managed Identity Storage Blob Data Contributor Blob

接続文字列やストレージアカウントキーをコードに保持せずに接続できます。

例3:GitHub ActionsからAzureへデプロイ

GitHub Actions OpenID Connect SPのフェデレーション資格情報 短時間トークン デプロイ

GitHub Secretsへ長期間有効なAzureクライアントシークレットを保存せずに済みます。

例4:オンプレミスバッチからAzure SQL

オンプレのバッチ Service Principal 証明書 Entra ID認証 Azure SQL

オンプレミスでは通常のManaged Identityを直接利用できないため、Service Principalなどを利用します。

Misconceptions

よくある誤解

誤解:エンタープライズアプリとService Principalは別の製品である

Azure Portalの「エンタープライズアプリ」は、主にテナント内のService Principalを管理する画面です。

誤解:アプリの登録を作れば、それだけでAzureリソースへアクセスできる

認証設定だけでなく、Service Principalに対するRBACまたはAPIアクセス許可が必要です。

誤解:Client IDとObject IDは同じ

Client IDはアプリケーションを識別するIDです。Object IDはEntra ID内の個別オブジェクトを識別するIDです。

誤解:Managed IdentityはService Principalとは無関係

Managed Identityの内部ではService Principalが作成されます。Managed IdentityはAzure管理型のService Principalと考えると理解しやすくなります。

誤解:Managed Identityを有効にすれば、すべてのAzureリソースにアクセスできる

Managed Identityを有効にしただけでは権限はありません。アクセス先で必要最小限のRBACロールやAPI権限を付与します。

誤解:Managed Identityならセキュリティを考えなくてよい

資格情報の管理負荷は下がりますが、過剰なRBAC、不要な権限、ログ監視、ネットワーク制御などは引き続き考慮が必要です。

誤解:サービスプリンシパルでは必ずクライアントシークレットが必要

証明書やWorkload Identity Federationなども利用できます。可能であれば、長期間保存するシークレットを避けてください。

Azure Portal

Azure Portalではどこを見るのか

アプリの登録

Microsoft Entra ID → アプリの登録 → 対象アプリ

  • Application(Client)ID
  • Directory(Tenant)ID
  • Object ID
  • リダイレクトURI
  • APIのアクセス許可
  • 証明書とシークレット
  • フェデレーション資格情報

エンタープライズアプリ

Microsoft Entra ID → エンタープライズアプリ → 対象アプリ

  • Service PrincipalのObject ID
  • ユーザーとグループ
  • シングルサインオン
  • アクセス許可
  • サインインログ
  • プロビジョニング
  • プロパティ

Managed Identity

対象のAzureリソース → ID → システム割り当て済み / ユーザー割り当て済み

  • 状態
  • プリンシパルID
  • テナントID
  • User-assigned Managed Identityの割り当て
  • Azureロールの割り当て
Security

安全に利用するためのポイント

  • Azure上の対応サービスではManaged Identityを優先する
  • 外部CI/CDではWorkload Identity Federationを検討する
  • クライアントシークレットをソースコードへ書かない
  • appsettings.jsonへ平文保存しない
  • GitHubへ秘密情報をコミットしない
  • 最小権限の原則を適用する
  • サブスクリプションOwnerを安易に付けない
  • 必要なスコープだけにRBACを付与する
  • 証明書やシークレットには有効期限を設定する
  • 期限切れの事前通知を設定する
  • サインインログと監査ログを確認する
  • 不要になったService Principalを削除する
  • 所有者・用途・作成日・管理担当者を記録する
  • 定期的に棚卸しする

危険な例

  • アプリ設定にクライアントシークレットを直接記載
  • GitHub Secretsに長期間有効なAzureシークレットを保存

推奨する例

  • Managed IdentityからKey Vaultへアクセス
  • GitHub Actions OIDCとフェデレーション資格情報を利用
FAQ

よくある質問

Managed IdentityとService Principalは同じですか?

完全に同じ表現ではありませんが、Managed Identityの内部ではService Principalが作成されます。Managed Identityは、資格情報をAzureが管理するService Principalの一種です。

Managed Identityではシークレットは本当に不要ですか?

アプリケーション開発者がクライアントシークレットや証明書を作成・保存・ローテーションする必要がありません。資格情報はAzure側で管理されます。

Managed Identityを有効化しただけでKey Vaultへアクセスできますか?

できません。Key Vault側で、対象Managed Identityに必要なRBACロールまたはアクセスポリシーを設定する必要があります。

アプリの登録とエンタープライズアプリは同じですか?

アプリの登録はApplication Objectを管理する場所です。エンタープライズアプリは、そのアプリがテナント内で利用される際のService Principalを管理する場所です。

Client IDはアプリの登録とエンタープライズアプリで同じですか?

同じアプリケーションに対応するApplication ObjectとService Principalでは、Application(Client)IDは同じです。一方、Object IDは別です。

GitHub ActionsではManaged Identityを使えますか?

一般的なGitHubホステッドランナーはAzureリソース上のManaged Identityを直接利用しません。通常はService PrincipalとWorkload Identity Federationを組み合わせます。Azure上のセルフホステッドランナーでは構成によってManaged Identityを利用できる場合があります。

System-assignedとUser-assignedはどちらを使うべきですか?

1つのリソース専用でライフサイクルも同じならSystem-assigned、複数のAzureリソースでIDや権限を共有するならUser-assignedが適しています。

Azureの認証・アクセス制御でお困りですか?

Entra ID、サービスプリンシパル、Managed Identityを使った安全な認証・アクセス設計を、Smart Designerがご支援します。

無料で相談する

最終更新日:2026年7月 / 本記事はAzureの一般的な仕組みを分かりやすく整理した解説であり、最新の正確な仕様はMicrosoft公式ドキュメントをご確認ください。