Azure Service Bus リソースにアクセスするために Azure Active Directory を使用してマネージド ID を認証するAuthenticate a managed identity with Azure Active Directory to access Azure Service Bus resources

Azure リソースのマネージド ID は、デプロイに関連付けられ、その下でアプリケーション コードが実行されるセキュリティ保護された ID を作成できる Azure 間機能です。Managed identities for Azure resources is a cross-Azure feature that enables you to create a secure identity associated with the deployment under which your application code runs. この ID は、アプリケーションに必要な特定の Azure リソースにアクセスするためのカスタム アクセス許可を付与するアクセス制御ロールに関連付けることができます。You can then associate that identity with access-control roles that grant custom permissions for accessing specific Azure resources that your application needs.

マネージド ID では、Azure プラットフォームがこのランタイム ID を管理します。With managed identities, the Azure platform manages this runtime identity. ID 自体やアクセスする必要のあるリソース用に、アクセス キーをアプリケーション コードや構成に保存して保護する必要はありません。You do not need to store and protect access keys in your application code or configuration, either for the identity itself, or for the resources you need to access. Azure リソース サポートに対してマネージド エンティティが有効にされている Azure App Service アプリケーション内または仮想マシンで実行されている Service Bus クライアント アプリは、SAS ルールと SAS キーや、その他のアクセス トークンを処理する必要はありません。A Service Bus client app running inside an Azure App Service application or in a virtual machine with enabled managed entities for Azure resources support does not need to handle SAS rules and keys, or any other access tokens. クライアント アプリに必要なのは、Service Bus メッセージング名前空間のエンドポイント アドレスだけです。The client app only needs the endpoint address of the Service Bus Messaging namespace. アプリが接続すると、Service Bus はこの記事で後述する例に示す操作で、マネージド エンティティのコンテキストをクライアントにバインドします。When the app connects, Service Bus binds the managed entity's context to the client in an operation that is shown in an example later in this article. マネージド ID に関連付けられると、Service Bus クライアントは承認済みのすべての操作を実行できます。Once it is associated with a managed identity, your Service Bus client can do all authorized operations. マネージド エンティティを Service Bus のロールに関連付けることによって承認が付与されます。Authorization is granted by associating a managed entity with Service Bus roles.

概要Overview

セキュリティ プリンシパル (ユーザー、グループ、またはアプリケーション) で Service Bus エンティティへのアクセスが試行された場合、要求が承認される必要があります。When a security principal (a user, group, or application) attempts to access a Service Bus entity, the request must be authorized. Azure AD では、リソースへのアクセスは 2 段階のプロセスです。With Azure AD, access to a resource is a two-step process.

  1. まず、セキュリティ プリンシパルの ID が認証され、OAuth 2.0 トークンが返されます。First, the security principal’s identity is authenticated, and an OAuth 2.0 token is returned. トークンを要求するリソース名は https://servicebus.azure.net です。The resource name to request a token is https://servicebus.azure.net.
  2. 次に、指定されたリソースへのアクセスを承認するために、トークンが要求の一部として Service Bus サービスに渡されます。Next, the token is passed as part of a request to the Service Bus service to authorize access to the specified resource.

認証の手順により、実行時にアプリケーション要求に OAuth 2.0 アクセス トークンが含まれる必要があります。The authentication step requires that an application request contains an OAuth 2.0 access token at runtime. アプリケーションが Azure VM、仮想マシン スケール セット、または Azure 関数アプリなどの Azure エンティティ内から実行されている場合、マネージド ID を使用してリソースにアクセスできます。If an application is running within an Azure entity such as an Azure VM, a virtual machine scale set, or an Azure Function app, it can use a managed identity to access the resources.

承認の手順では、セキュリティ プリンシパルに 1 つまたは複数の Azure ロールを割り当てる必要があります。The authorization step requires that one or more Azure roles be assigned to the security principal. Azure Service Bus には、Service Bus リソースの一連のアクセス許可を含む Azure ロールが用意されています。Azure Service Bus provides Azure roles that encompass sets of permissions for Service Bus resources. セキュリティ プリンシパルに割り当てられたロールによって、そのプリンシパルが持つアクセス許可が決定されます。The roles that are assigned to a security principal determine the permissions that the principal will have. Azure Service Bus に Azure ロールを割り当てる方法の詳細については、「Azure Service Bus 用の Azure 組み込みロール」を参照してください。To learn more about assigning Azure roles to Azure Service Bus, see Azure built-in roles for Azure Service Bus.

Service Bus に対して要求を行うネイティブ アプリケーションと Web アプリケーションは、Azure AD を使用して承認することもできます。Native applications and web applications that make requests to Service Bus can also authorize with Azure AD. この記事では、アクセス トークンを要求し、それを使用して Service Bus リソースへの要求を承認する方法を示します。This article shows you how to request an access token and use it to authorize requests for Service Bus resources.

アクセス権に対して Azure ロールを割り当てるAssigning Azure roles for access rights

Azure Active Directory (Azure AD) では、Azure ロールベースのアクセス制御 (Azure RBAC) を通じて、セキュリティで保護されたリソースへのアクセス権が承認されます。Azure Active Directory (Azure AD) authorizes access rights to secured resources through Azure role-based access control (Azure RBAC). Azure Service Bus では Azure 組み込みロールのセットが定義されており、それには Service Bus エンティティへのアクセスに使用されるアクセス許可の一般的なセットが含まれています。また、データにアクセスするためのカスタム ロールを定義することもできます。Azure Service Bus defines a set of Azure built-in roles that encompass common sets of permissions used to access Service Bus entities and you can also define custom roles for accessing the data.

Azure ロールが Azure AD セキュリティ プリンシパルに割り当てられると、Azure によりそのセキュリティ プリンシパルのリソースへのアクセス権が付与されます。When an Azure role is assigned to an Azure AD security principal, Azure grants access to those resources for that security principal. アクセスは、サブスクリプションのレベル、リソース グループ、または Service Bus 名前空間にスコープを設定できます。Access can be scoped to the level of subscription, the resource group, or the Service Bus namespace. Azure AD セキュリティ プリンシパルは、ユーザー、グループ、アプリケーション サービス プリンシパル、または Azure リソースのマネージド ID の場合があります。An Azure AD security principal may be a user, a group, an application service principal, or a managed identity for Azure resources.

Azure Service Bus 用の Azure 組み込みロールAzure built-in roles for Azure Service Bus

Azure Service Bus の場合、名前空間およびそれに関連するすべてのリソースの Azure portal および Azure リソース管理 API による管理は、Azure RBAC モデルを使って既に保護されています。For Azure Service Bus, the management of namespaces and all related resources through the Azure portal and the Azure resource management API is already protected using the Azure RBAC model. Azure では、Service Bus 名前空間へのアクセスを承認するための次の Azure 組み込みロールが提供されています。Azure provides the below Azure built-in roles for authorizing access to a Service Bus namespace:

リソースのスコープResource scope

セキュリティ プリンシパルに Azure ロールを割り当てる前に、セキュリティ プリンシパルに必要なアクセスのスコープを決定します。Before you assign an Azure role to a security principal, determine the scope of access that the security principal should have. ベスト プラクティスとしては、常にできるだけ狭いスコープのみを付与するのが最善の方法です。Best practices dictate that it's always best to grant only the narrowest possible scope.

次の一覧で、Service Bus リソースへのアクセスのスコープとして指定できるレベルを、最も狭いスコープから順に示します。The following list describes the levels at which you can scope access to Service Bus resources, starting with the narrowest scope:

  • キュートピック、または サブスクリプション:ロールの割り当ては、特定の Service Bus エンティティに適用されます。Queue, topic, or subscription: Role assignment applies to the specific Service Bus entity. 現在、Azure portal では、サブスクリプション レベルでの Service Bus Azure ロールへのユーザー、グループ、マネージド ID の割り当てはサポートされていません。Currently, the Azure portal doesn't support assigning users/groups/managed identities to Service Bus Azure roles at the subscription level. 以下に示したのは、Azure CLI コマンドの使用例です。az-role-assignment-create によって、Service Bus の Azure ロールに ID を割り当てています。Here's an example of using the Azure CLI command: az-role-assignment-create to assign an identity to a Service Bus Azure role:

    az role assignment create \
        --role $service_bus_role \
        --assignee $assignee_id \
        --scope /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ServiceBus/namespaces/$service_bus_namespace/topics/$service_bus_topic/subscriptions/$service_bus_subscription
    
  • [Service Bus 名前空間] :ロールの割り当ては、名前空間以下とそれに関連付けられているコンシューマー グループに対する Service Bus のトポロジ全体にわたります。Service Bus namespace: Role assignment spans the entire topology of Service Bus under the namespace and to the consumer group associated with it.

  • [リソース グループ] :ロールの割り当ては、リソース グループのすべての Service Bus リソースに適用されます。Resource group: Role assignment applies to all the Service Bus resources under the resource group.

  • サブスクリプション:ロールの割り当ては、サブスクリプションのすべてのリソース グループ内のすべての Service Bus リソースに適用されます。Subscription: Role assignment applies to all the Service Bus resources in all of the resource groups in the subscription.

注意

Azure ロールの割り当ての反映には最大で 5 分かかる場合があることに留意してください。Keep in mind that Azure role assignments may take up to five minutes to propagate.

組み込みのロールの定義方法の詳細については、ロール定義に関するページを参照してください。For more information about how built-in roles are defined, see Understand role definitions. Azure カスタム ロールの作成については、「Azure カスタム ロール」を参照してください。For information about creating Azure custom roles, see Azure custom roles.

VM 上のマネージド ID を有効にするEnable managed identities on a VM

Azure リソースのマネージド ID を使用して、ご利用の VM から Service Bus リソースを承認するには、最初に VM 上で Azure リソースのマネージド ID を有効にする必要があります。Before you can use managed identities for Azure Resources to authorize Service Bus resources from your VM, you must first enable managed identities for Azure Resources on the VM. Azure リソースのマネージド ID を有効にする方法については、次の記事のいずれかを参照してください。To learn how to enable managed identities for Azure Resources, see one of these articles:

Azure AD のマネージド ID にアクセス許可を付与するGrant permissions to a managed identity in Azure AD

ご利用のアプリケーション内のマネージド ID から Service Bus サービスへの要求を承認するには、最初にそのマネージド ID に対して Azure ロールベースのアクセス制御 (Azure RBAC) の設定を構成します。To authorize a request to the Service Bus service from a managed identity in your application, first configure Azure role-based access control (Azure RBAC) settings for that managed identity. Azure Service Bus によって、Service Bus からの送信と読み取りを行うためのアクセス許可を含む Azure ロールが定義されます。Azure Service Bus defines Azure roles that encompass permissions for sending and reading from Service Bus. Azure ロールがマネージド ID に割り当てられると、適切なスコープで Service Bus エンティティへのアクセス権がそのマネージド ID に付与されます。When the Azure role is assigned to a managed identity, the managed identity is granted access to Service Bus entities at the appropriate scope.

Azure ロールの割り当ての詳細については、Azure Active Directory を使用した Service Bus リソースへのアクセスの認証と承認に関する記事を参照してください。For more information about assigning Azure roles, see Authenticate and authorize with Azure Active Directory for access to Service Bus resources.

Azure リソースのマネージド ID による Service Bus の使用Use Service Bus with managed identities for Azure resources

マネージド ID で Service Bus を使用するには、ロールと適切なスコープを ID に割り当てる必要があります。To use Service Bus with managed identities, you need to assign the identity the role and the appropriate scope. このセクションの手順では、マネージド ID で実行され Service Bus リソースにアクセスするシンプルなアプリケーションを使用します。The procedure in this section uses a simple application that runs under a managed identity and accesses Service Bus resources.

ここでは、Azure App Service でホストされているサンプル Web アプリケーションを使用します。Here we're using a sample web application hosted in Azure App Service. Web アプリケーションを作成するための詳細な手順については、Azure に ASP.NET Core Web アプリを作成するに関する記事を参照してくださいFor step-by-step instructions for creating a web application, see Create an ASP.NET Core web app in Azure

アプリケーションが作成されたら、次の手順を行います。Once the application is created, follow these steps:

  1. [設定] に移動し、 [ID] を選択します。Go to Settings and select Identity.

  2. [状態] を選択して [オン] にします。Select the Status to be On.

  3. [保存] を選択して設定を保存します。Select Save to save the setting.

    Web アプリのマネージド ID

この設定を有効にすると、ご利用の Azure Active Directory (Azure AD) に新しいサービス ID が作成され、App Service ホストに構成されます。Once you've enabled this setting, a new service identity is created in your Azure Active Directory (Azure AD) and configured into the App Service host.

注意

マネージド ID を使用する場合、接続文字列は Endpoint=sb://<NAMESPACE NAME>.servicebus.windows.net/;Authentication=Managed Identity の形式にする必要があります。When you use a managed identity, the connection string should be in the format: Endpoint=sb://<NAMESPACE NAME>.servicebus.windows.net/;Authentication=Managed Identity.

ここで、このサービス ID をご利用の Service Bus リソースの必要なスコープ内のロールに割り当てます。Now, assign this service identity to a role in the required scope in your Service Bus resources.

Azure portal を使用して Azure ロールを割り当てるにはTo Assign Azure roles using the Azure portal

Service Bus 名前空間にロールを割り当てるには、Azure portal で名前空間に移動します。To assign a role to a Service Bus namespace, navigate to the namespace in the Azure portal. リソースの [アクセス制御 (IAM)] 設定を表示し、次の手順に従ってロールの割り当てを管理します。Display the Access Control (IAM) settings for the resource, and follow these instructions to manage role assignments:

注意

次の手順では、Service Bus 名前空間にサービス ID のロールを割り当てます。The following steps assigns a service identity role to your Service Bus namespaces. 同じ手順に従って、他のサポートされているスコープ (リソース グループとサブスクリプション) でロールを割り当てることができます。You can follow the same steps to assign a role at other supported scopes (resource group and subscription).

存在しない場合は、Service Bus Messaging 名前空間を作成します。Create a Service Bus Messaging namespace if you don't have one.

  1. Azure portal で、ご利用の Service Bus 名前空間に移動し、その名前空間の [概要] を表示します。In the Azure portal, navigate to your Service Bus namespace and display the Overview for the namespace.

  2. 左側のメニューの [アクセス制御 (IAM)] を選択して、Service Bus 名前空間のアクセス制御設定を表示します。Select Access Control (IAM) on the left menu to display access control settings for the Service Bus namespace.

  3. [ロールの割り当て] タブを選択して、ロールの割り当ての一覧を表示します。Select the Role assignments tab to see the list of role assignments.

  4. [追加] を選択し、 [ロール割り当ての追加] を選択します。Select Add, and then select Add role assignment.

  5. [ロールの割り当ての追加] ページで、これらの手順に従います。On the Add role assignment page, follow these steps:

    1. [ロール] で、割り当てる Service Bus ロールを選択します。For Role, select the Service Bus role that you want to assign. この例では、Azure Service Bus データ所有者 です。In this example, it's Azure Service Bus Data Owner.

    2. [アクセスの割り当て先] フィールドで、 [システム割り当てマネージド ID][App Service] を選択します。For the Assign access to field, select App Service under System assigned managed identity.

    3. Web アプリのマネージド ID が作成された サブスクリプション を選択します。Select the subscription in which the managed identity for the web app was created.

    4. 作成した Web アプリの マネージド ID を選択します。Select the managed identity for the web app you created. ID の既定の名前は、Web アプリの名前と同じです。The default name for the identity is same as the name of the web app.

    5. 次に、 [保存] を選択します。Then, select Save.

      [ロールの割り当ての追加] ページ

    ロールを割り当てると、Web アプリケーションには、定義されたスコープの下で Service Bus リソースへのアクセス権が付与されます。Once you've assigned the role, the web application will have access to the Service Bus entities under the defined scope.

    注意

    マネージド ID をサポートするサービスの一覧については、「Azure リソースのマネージド ID をサポートするサービス」を参照してください。For a list of services that support managed identities, see Services that support managed identities for Azure resources.

アプリを実行するRun the app

次に、作成した ASP.NET アプリケーションの既定のページを変更します。Now, modify the default page of the ASP.NET application you created. こちらの GitHub リポジトリの Web アプリケーション コードを使用します。You can use the web application code from this GitHub repository.

Default.aspx ページはランディング ページです。The Default.aspx page is your landing page. コードは Default.aspx.cs ファイルにあります。The code can be found in the Default.aspx.cs file. いくつかの入力フィールドと、Service Bus に接続してメッセージを送受信するための send ボタンおよび receive ボタンを備えた最小限の Web アプリケーションが作成されます。The result is a minimal web application with a few entry fields, and with send and receive buttons that connect to Service Bus to either send or receive messages.

MessagingFactory オブジェクトを初期化する方法に注意してください。Note how the MessagingFactory object is initialized. 共有アクセス トークン (SAS) トークン プロバイダーを使用するのではなく、コードで var msiTokenProvider = TokenProvider.CreateManagedIdentityTokenProvider(); を呼び出してマネージド ID のトークン プロバイダーを作成します。Instead of using the Shared Access Token (SAS) token provider, the code creates a token provider for the managed identity with the var msiTokenProvider = TokenProvider.CreateManagedIdentityTokenProvider(); call. そのため、保持および使用するシークレットはありません。As such, there are no secrets to retain and use. マネージド ID コンテキストから Service Bus へのフローと承認ハンドシェイクは、トークン プロバイダーによって自動的に処理されます。The flow of the managed identity context to Service Bus and the authorization handshake are automatically handled by the token provider. これは SAS を使用するよりも単純なモデルです。It is a simpler model than using SAS.

これらの変更を行ったら、アプリケーションを発行して実行します。After you make these changes, publish and run the application. 適切な発行データを簡単に取得するには、Visual Studio で発行プロファイルをダウンロードしてインポートします。You can obtain the correct publishing data easily by downloading and then importing a publishing profile in Visual Studio:

発行プロファイルを取得する

メッセージを送受信するには、名前空間の名前と作成したエンティティの名前を入力します。To send or receive messages, enter the name of the namespace and the name of the entity you created. 次に、 [send] または [receive] をクリックします。Then, click either send or receive.

注意

  • マネージド ID は、Azure 環境内の App Services、Azure VM、およびスケール セットでのみ機能します。The managed identity works only inside the Azure environment, on App services, Azure VMs, and scale sets. .NET アプリケーションの場合は、Service Bus NuGet パッケージで使用される Microsoft.Azure.Services.AppAuthentication ライブラリがこのプロトコルの抽象化を提供し、ローカル開発エクスペリエンスをサポートします。For .NET applications, the Microsoft.Azure.Services.AppAuthentication library, which is used by the Service Bus NuGet package, provides an abstraction over this protocol and supports a local development experience. このライブラリを使うと、Visual Studio、Azure CLI 2.0、または Active Directory 統合認証のユーザー アカウントを使って、開発用マシン上でローカルにコードをテストすることもできます。This library also allows you to test your code locally on your development machine, using your user account from Visual Studio, Azure CLI 2.0 or Active Directory Integrated Authentication. このライブラリでのローカル開発オプションの詳細については、「Service-to-service authentication to Azure Key Vault using .NET」 (.NET を使用した Azure Key Vault に対するサービス間認証) を参照してください。For more on local development options with this library, see Service-to-service authentication to Azure Key Vault using .NET.

次のステップNext steps

Service Bus メッセージングの詳細については、次のトピックをご覧ください。To learn more about Service Bus messaging, see the following topics: