📜

【Azure】Entra ID のアプリケーションとサービスプリンシパル

2024/10/31に公開

まえがき

普段なんとなくで利用している、Microsoft Entra IDのアプリケーションオブジェクトと、サービスプリンシパル周りの概念について少しくらい理解を深めておこうという目的で作成された記事です。

抑えるべきポイント

  • アプリケーションオブジェクトは、すべてのテナントで使用する"グローバル"表現であり、サービスプリンシパルは、特定のテナントで使用する"ローカル"表現
  • アプリケーションオブジェクトは、対応するサービスプリンシパルの作成に使用するために、一般的な既定のプロパティが派生するテンプレートとして機能
  • サービスプリンシパルは、テナントによってセキュリティ保護されているリソースにアクセスするためのIDを確立できるように、アプリケーションが使用される各テナントで作成する必要がある

以下、ブラウザバックしてもらっても大丈夫です。

そもそもの話

アプリケーションオブジェクトやサービスプリンシパルとは何ぞやについて一言で表すと、
ID機能やアクセス権の管理等の認証をEntra IDで管理するためのオブジェクト
であり、あまりユーザーオブジェクトと扱いとしては変わらない認識。
(細かいパラメータは違いはあれど根本は同じだと思っている)

以下、公式より引用

ID およびアクセス管理の機能を Microsoft Entra ID に委任するには、アプリケーションを Microsoft Entra テナントに登録する必要があります。

アプリケーションの登録

アプリケーションオブジェクトとサービスプリンシパルを利用するためにまず必要な作業。
これを実行すると、登録先のAzureテナントに、 グローバルに一意なIDを持ったインスタンス が作成される。
Azureポータルや、Entra管理センターからアプリケーションの登録を行った場合は、アプリケーションオブジェクトとサービスプリンシパルが自動的にされるが、Microsoft Graph APIやAzure PoworShell、Azure CLIなどでアプリケーションの登録を実行する場合はサービスプリンシパルは別途作成する必要がある点に注意する。

アプリケーションオブジェクト

アプリケーションの登録作業を実施した際に、その登録先の Microsoft Entra テナントに作成されるグローバルに唯一なオブジェクト。
アプリケーションオブジェクトは、サービスプリンシパルを作成するためのテンプレートまたはブループリント に使用される。
直接認証に使われるわけではなく、あくまでサービスプリンシパルの元締め的なもの。
マルチテナントな利用をするためにこの形になっていると思われる。

サービスプリンシパル

アプリケーションオブジェクトから作成された、アプリケーションの具象インスタンス。
(単一テナントまたはディレクトリ内でのアプリケーションのローカル表現とも言える)
マルチテナントにおいて、アプリケーションが利用されるすべてのテナントでサービスプリンシパルの作成を行う必要がある。
サービスプリンシパルには、特定のテナント内でアプリが実際に実行できること、アプリにアクセスできるユーザー、アプリからアクセスできるリソースを定義する。

あとがき

時間があるならば公式を見た方が良い。
https://learn.microsoft.com/ja-jp/entra/identity-platform/app-objects-and-service-principals?tabs=browser

Discussion