Azure Active Directory のアプリケーション オブジェクトとサービス プリンシパル オブジェクト (Azure AD)

「アプリケーション」という用語の意味が、Azure AD のコンテキストで使用する場合に誤解されることがあります。 この記事の目的は、Azure AD アプリケーションの統合について概念的な側面と具体的な側面を、マルチテナント アプリケーションの登録および同意の例を示しながら明らかにして、この用語の意味をよりわかりやすくすることです。

概要

Azure AD と統合されているアプリケーションは、ソフトウェアとしての側面以外の意味を持ちます。 「アプリケーション」は、アプリケーション ソフトウェアを指すだけではなく、実行時の認証/承認の「メッセージ交換」における Azure AD の登録やロールを指すなど、概念的な用語として頻繁に使用されます。 定義上、アプリケーションはクライアント ロール (リソースの使用)、リソース サーバー ロール (クライアントへの API の公開)、またはその両方のロールで動作できます。 メッセージ交換プロトコルは OAuth 2.0 承認付与フローで定義されています。これにより、クライアントとリソースが、それぞれリソースのデータにアクセスし、保護できるようになります。 次にもう 1 段階掘り下げ、Azure AD アプリケーション モデルにおいて、デザイン時および実行時にアプリケーションが内部的にはどのように表されるのかを見てみましょう。

アプリケーションの登録

Azure Portal で Azure AD アプリケーションを登録すると、Azure AD テナントに、アプリケーション オブジェクトとサービス プリンシパル オブジェクトという 2 つのオブジェクトが作成されます。

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

Azure AD アプリケーションは、その唯一のアプリケーション オブジェクトによって定義されます。アプリケーション オブジェクトは、アプリケーションの登録先である Azure AD テナント (アプリケーションの "ホーム" テナントと呼ばれます) 内にあります。 アプリケーション オブジェクトのプロパティのスキーマは、Azure AD Graph Application エンティティによって定義されています。

サービス プリンシパル オブジェクト

サービス プリンシパル オブジェクトは、特定のテナントでアプリケーションを使用する場合のポリシーとアクセス許可を定義しており、実行時にアプリケーションを表す、セキュリティ プリンシパルの基となる情報を提供します。 サービス プリンシパル オブジェクトのプロパティのスキーマは、Azure AD Graph ServicePrincipal エンティティによって定義されています。

アプリケーションとサービス プリンシパルのリレーションシップ

アプリケーション オブジェクトはアプリケーションのグローバルな表現 (すべてのテナント用) であり、サービス プリンシパル オブジェクトはアプリケーションのローカルな表現 (特定のテナント用) と考えることができます。 アプリケーション オブジェクトは、対応するサービス プリンシパル オブジェクトの作成に使用するために、一般的な既定のプロパティが派生するテンプレートとして機能します。 そのため、アプリケーション オブジェクトには、ソフトウェア アプリケーションとの間に 1 対 1 のリレーションシップがあり、対応するサービス プリンシパル オブジェクトとの間に 1 対多のリレーションシップがあります。

サービス プリンシパルは、テナントによりセキュリティで保護されたリソースにサインインしたり、アクセスするための ID を設定できるように、アプリケーションを使用するテナントごとに作成する必要があります。 シングル テナント アプリケーションには、通常アプリケーション登録時に使用するために作成され、同意されたサービス プリンシパルが (そのホーム テナントに) 1 つだけがあります。 マルチテナント Web アプリケーションまたは API にも、そのテナントからユーザーが使用に同意したテナントごとに作成されたサービス プリンシパルがあります。

メモ

アプリケーション オブジェクトに加えたすべての変更は、アプリケーションのホーム テナント (アプリケーションが登録されたテナント) にだけ存在するサービス プリンシパル オブジェクトにも反映されます。 マルチテナント アプリケーションの場合は、アプリケーション アクセス パネルを通じてアクセス権を削除し、もう一度アクセス権を付与するまで、そのコンシューマー テナントのサービス プリンシパル オブジェクトにアプリケーション オブジェクトへの変更が反映されることはありません。

既定でネイティブ アプリケーションがマルチテナントとして登録されていることにも注意してください。

次の図は、 HR アプリという名前のサンプル マルチテナント アプリケーションを基に、アプリケーションのアプリケーション オブジェクトと、対応するサービス プリンシパル オブジェクトの間のリレーションシップを表しています。 このシナリオには、次の 3 つの Azure AD テナントがあります。

  • Adatum - HR アプリを開発した会社が使用するテナント
  • Contoso - HR アプリのコンシューマーである Contoso という組織が使用するテナント
  • Fabrikam - Contoso と同じく HR アプリのコンシューマーである Fabrikam という組織が使用するテナント

Relationship between an application object and a service principal object

前の図でのステップ 1. は、アプリケーションとサービス プリンシパル オブジェクトを、アプリケーションのホーム テナント内に作成するプロセスです。

ステップ 2. では、Contoso と Fabrikam の管理者が同意を終えると、それぞれの会社の Azure AD テナント内にサービス プリンシパル オブジェクトが作成され、それに管理者が付与したアクセス許可が割り当てられます。 HR アプリは、個々のユーザー用として、ユーザーによる同意を許可するように構成/設計することができる点にも注目してください。

ステップ 3 では、HR アプリケーション (Contoso と Fabrikam) のコンシューマー テナントにそれぞれ独自のサービス プリンシパル オブジェクトが作成されます。 それぞれ実行時におけるアプリケーションのインスタンスの使用を表し、それぞれの管理者によって同意されたアクセス許可によって管理されます。

次のステップ

Azure AD Graph API、Azure ポータルのアプリケーション マニフェスト エディター、または Azure AD PowerShell コマンドレットを通じて、OData Application エンティティによって表されるアプリケーションのアプリケーション オブジェクトにアクセスできます。

Azure AD Graph API または Azure AD PowerShell コマンドレットを通じて、OData ServicePrincipal エンティティによって表されるアプリケーションのサービス プリンシパル オブジェクトにアクセスできます。

Azure AD Graph Explorer は、アプリケーションとサービス プリンシパル オブジェクトの両方を照会するのに便利です。