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

「アプリケーション」という用語の意味が、Azure AD のコンテキストで使用する場合に誤解されることがあります。Sometimes the meaning of the term "application" can be misunderstood when used in the context of Azure AD. この記事の目的は、Azure AD アプリケーション統合の概念的および具体的な側面を、マルチテナント アプリケーションの登録と同意の例を示しながら明らかにすることです。The goal of this article is to clarify conceptual and concrete aspects of Azure AD application integration, with an illustration of registration and consent for a multi-tenant application.

概要Overview

Azure AD と統合されているアプリケーションは、ソフトウェアとしての側面以外の意味を持ちます。An application that has been integrated with Azure AD has implications that go beyond the software aspect. "アプリケーション" は、アプリケーション ソフトウェアだけでなく、実行時の認証/承認の "会話" におけるその Azure AD の登録やロールも指す概念的な用語としてよく使用されます。"Application" is frequently used as a conceptual term, referring to not only the application software, but also its Azure AD registration and role in authentication/authorization "conversations" at runtime. 定義上、アプリケーションはクライアント ロール (リソースの使用)、リソース サーバー ロール (クライアントへの API の公開)、またはその両方のロールで動作できます。By definition, an application can function in a client role (consuming a resource), a resource server role (exposing APIs to clients), or even both. メッセージ交換プロトコルは OAuth 2.0 承認付与フローで定義されています。これにより、クライアントとリソースが、それぞれリソースのデータにアクセスし、保護できるようになります。The conversation protocol is defined by an OAuth 2.0 Authorization Grant flow, allowing the client/resource to access/protect a resource's data respectively. 次にもう 1 段階掘り下げ、Azure AD アプリケーション モデルにおいて、デザイン時および実行時にアプリケーションが内部的にはどのように表されるのかを見てみましょう。Now let's go a level deeper, and see how the Azure AD application model represents an application at design-time and run-time.

アプリケーションの登録Application registration

Azure Portal で Azure AD アプリケーションを登録すると、Azure AD テナントに、アプリケーション オブジェクトとサービス プリンシパル オブジェクトという 2 つのオブジェクトが作成されます。When you register an Azure AD application in the Azure portal, two objects are created in your Azure AD tenant: an application object, and a service principal object.

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

Azure AD アプリケーションは、その唯一のアプリケーション オブジェクトによって定義されます。アプリケーション オブジェクトは、アプリケーションの登録先である Azure AD テナント (アプリケーションの "ホーム" テナントと呼ばれます) 内にあります。An Azure AD application is defined by its one and only application object, which resides in the Azure AD tenant where the application was registered, known as the application's "home" tenant. アプリケーション オブジェクトのプロパティのスキーマは、Azure AD Graph Application エンティティによって定義されています。The Azure AD Graph Application entity defines the schema for an application object's properties.

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

Azure AD テナントによってセキュリティ保護されているリソースにアクセスするためには、アクセスを必要とするエンティティをセキュリティ プリンシパルで表す必要があります。In order to access resources that are secured by an Azure AD tenant, the entity that requires access must be represented by a security principal. これは、ユーザー (ユーザー プリンシパル) とアプリケーション (サービス プリンシパル) の両方に当てはまります。This is true for both users (user principal) and applications (service principal). セキュリティ プリンシパルは、そのテナント内のユーザー/アプリケーションのアクセス ポリシーとアクセス許可を定義します。The security principal defines the access policy and permissions for the user/application in that tenant. これにより、サインイン時のユーザー/アプリケーションの認証、リソースへのアクセス時の承認などのコア機能を利用できるようになります。This enables core features such as authentication of the user/application during sign-in, and authorization during resource access.

アプリケーションが (登録または同意によって) テナント内のリソースへのアクセス許可を与えられると、サービス プリンシパル オブジェクトが作成されます。When an application is given permission to access resources in a tenant (upon registration or consent), a service principal object is created. サービス プリンシパル オブジェクトのプロパティのスキーマは、Azure AD Graph ServicePrincipal エンティティによって定義されています。The Azure AD Graph ServicePrincipal entity defines the schema for a service principal object's properties.

アプリケーションとサービス プリンシパルのリレーションシップApplication and service principal relationship

アプリケーション オブジェクトはアプリケーションのグローバルな表現 (すべてのテナント用) であり、サービス プリンシパル オブジェクトはアプリケーションのローカルな表現 (特定のテナント用) と考えることができます。Consider the application object as the global representation of your application for use across all tenants, and the service principal as the local representation for use in a specific tenant. アプリケーション オブジェクトは、対応するサービス プリンシパル オブジェクトの作成に使用するために、一般的な既定のプロパティが派生するテンプレートとして機能します。The application object serves as the template from which common and default properties are derived for use in creating corresponding service principal objects. そのため、アプリケーション オブジェクトにはソフトウェア アプリケーションとの 1 対 1 の関係と、対応するサービス プリンシパル オブジェクトとの 1 対多の関係が存在します。An application object therefore has a 1:1 relationship with the software application, and a 1:many relationships with its corresponding service principal object(s).

サービス プリンシパルは、テナントによってセキュリティ保護されているリソースにサインインまたはアクセスするための ID を確立できるように、アプリケーションが使用される各テナントで作成する必要があります。A service principal must be created in each tenant where the application is used, enabling it to establish an identity for sign-in and/or access to resources being secured by the tenant. シングルテナント アプリケーションには、アプリケーション登録中に作成され、使用が同意されたサービス プリンシパルが (そのホーム テナントに) 1 つだけあります。A single-tenant application has only one service principal (in its home tenant), created and consented for use during application registration. マルチテナント Web アプリケーション/API には、そのテナントのユーザーが使用に同意した各テナントで作成されたサービス プリンシパルもあります。A multi-tenant Web application/API also has a service principal created in each tenant where a user from that tenant has consented to its use.

注意

アプリケーション オブジェクトに加えたすべての変更は、アプリケーションのホーム テナント (アプリケーションが登録されたテナント) にだけ存在するサービス プリンシパル オブジェクトにも反映されます。Any changes you make to your application object, are also reflected in its service principal object in the application's home tenant only (the tenant where it was registered). マルチテナント アプリケーションの場合は、アプリケーション アクセス パネルを通じてアクセス権を削除し、もう一度アクセス権を付与するまで、そのコンシューマー テナントのサービス プリンシパル オブジェクトにアプリケーション オブジェクトへの変更が反映されることはありません。For multi-tenant applications, changes to the application object are not reflected in any consumer tenants' service principal objects, until the access is removed via the Application Access Panel and granted again.

既定でネイティブ アプリケーションがマルチテナントとして登録されていることにも注意してください。Also note that native applications are registered as multi-tenant by default.

Example

次の図は、 HR アプリという名前のサンプル マルチテナント アプリケーションを基に、アプリケーションのアプリケーション オブジェクトと、対応するサービス プリンシパル オブジェクトの間のリレーションシップを表しています。The following diagram illustrates the relationship between an application's application object and corresponding service principal objects, in the context of a sample multi-tenant application called HR app. このシナリオには、次の 3 つの Azure AD テナントがあります。There are three Azure AD tenants in this scenario:

  • Adatum - HR アプリを開発した会社が使用するテナントAdatum - the tenant used by the company that developed the HR app
  • Contoso - HR アプリのコンシューマーである Contoso という組織が使用するテナントContoso - the tenant used by the Contoso organization, which is a consumer of the HR app
  • Fabrikam - Contoso と同じく HR アプリのコンシューマーである Fabrikam という組織が使用するテナントFabrikam - the tenant used by the Fabrikam organization, which also consumes the HR app

Relationship between an application object and a service principal object

前の図でのステップ 1. は、アプリケーションとサービス プリンシパル オブジェクトを、アプリケーションのホーム テナント内に作成するプロセスです。In the previous diagram, Step 1 is the process of creating the application and service principal objects in the application's home tenant.

ステップ 2. では、Contoso と Fabrikam の管理者が同意を終えると、それぞれの会社の Azure AD テナント内にサービス プリンシパル オブジェクトが作成され、それに管理者が付与したアクセス許可が割り当てられます。In Step 2, when Contoso and Fabrikam administrators complete consent, a service principal object is created in their company's Azure AD tenant and assigned the permissions that the administrator granted. HR アプリは、個々のユーザー用として、ユーザーによる同意を許可するように構成/設計することができる点にも注目してください。Also note that the HR app could be configured/designed to allow consent by users for individual use.

ステップ 3 では、HR アプリケーション (Contoso と Fabrikam) のコンシューマー テナントにそれぞれ独自のサービス プリンシパル オブジェクトが作成されます。In Step 3, the consumer tenants of the HR application (Contoso and Fabrikam) each have their own service principal object. それぞれ実行時におけるアプリケーションのインスタンスの使用を表し、それぞれの管理者によって同意されたアクセス許可によって管理されます。Each represents their use of an instance of the application at runtime, governed by the permissions consented by the respective administrator.

次のステップNext steps

Azure AD Graph API、Azure ポータルのアプリケーション マニフェスト エディター、または Azure AD PowerShell コマンドレットを通じて、OData Application エンティティによって表されるアプリケーションのアプリケーション オブジェクトにアクセスできます。An application's application object can be accessed via the Azure AD Graph API, the Azure portal's application manifest editor, or Azure AD PowerShell cmdlets, as represented by its OData Application entity.

Azure AD Graph API または Azure AD PowerShell コマンドレットを通じて、OData ServicePrincipal エンティティによって表されるアプリケーションのサービス プリンシパル オブジェクトにアクセスできます。An application's service principal object can be accessed via the Azure AD Graph API or Azure AD PowerShell cmdlets, as represented by its OData ServicePrincipal entity.

Azure AD Graph Explorer は、アプリケーションとサービス プリンシパル オブジェクトの両方を照会するのに便利です。The Azure AD Graph Explorer is useful for querying both the application and service principal objects.