Autenticar uma identidade gerenciada com Azure Active Directory para acessar recursos do barramento de serviço do AzureAuthenticate a managed identity with Azure Active Directory to access Azure Service Bus resources

Identidades gerenciadas para recursos do Azure é um recurso do Azure que permite criar uma identidade segura associada à implantação na qual o código do aplicativo é executado.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. Em seguida, você pode associar essa identidade a funções de controle de acesso que concedem permissões personalizadas para acessar os recursos do Azure específicos que seu aplicativo precisa.You can then associate that identity with access-control roles that grant custom permissions for accessing specific Azure resources that your application needs.

Com identidades gerenciadas, a plataforma do Azure gerencia essa identidade de tempo de execução.With managed identities, the Azure platform manages this runtime identity. Você não precisa armazenar e proteger as chaves de acesso no código ou na configuração do aplicativo, seja para a identidade ou para os recursos que você precisa acessar.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. Um aplicativo cliente do Barramento de Serviço em execução dentro de um aplicativo de Serviço de Aplicativo do Azure ou em uma máquina virtual com entidades gerenciadas habilitadas para suporte de recursos do Azure não precisa lidar com regras e chaves de SAS nem com nenhum outro token de acesso.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. O aplicativo cliente precisa apenas do endereço do ponto de extremidade do namespace das Mensagens do Barramento de Serviço.The client app only needs the endpoint address of the Service Bus Messaging namespace. Quando o aplicativo se conecta, o Barramento de Serviço associa o contexto de entidade gerenciada ao cliente em uma operação que será mostrada em um exemplo mais adiante neste artigo.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. Depois que está associado com uma identidade gerenciada, o cliente do Barramento de Serviço pode realizar todas as operações autorizadas.Once it is associated with a managed identity, your Service Bus client can do all authorized operations. A autorização é concedida ao associar uma entidade gerenciada com as funções do Barramento de Serviço.Authorization is granted by associating a managed entity with Service Bus roles.

Visão geralOverview

Quando uma entidade de segurança (um usuário, grupo ou aplicativo) tenta acessar uma entidade do barramento de serviço, a solicitação deve ser autorizada.When a security principal (a user, group, or application) attempts to access a Service Bus entity, the request must be authorized. Com o Azure AD, o acesso a um recurso é um processo de duas etapas.With Azure AD, access to a resource is a two-step process.

  1. Primeiro, a identidade da entidade de segurança é autenticada e um token OAuth 2,0 é retornado.First, the security principal’s identity is authenticated, and an OAuth 2.0 token is returned.
  2. Em seguida, o token é passado como parte de uma solicitação para o serviço do barramento de serviço para autorizar o acesso ao recurso especificado.Next, the token is passed as part of a request to the Service Bus service to authorize access to the specified resource.

A etapa de autenticação requer que uma solicitação de aplicativo contenha um token de acesso OAuth 2,0 em tempo de execução.The authentication step requires that an application request contains an OAuth 2.0 access token at runtime. Se um aplicativo estiver em execução em uma entidade do Azure, como uma VM do Azure, um conjunto de dimensionamento de máquinas virtuais ou um aplicativo de funções do Azure, ele poderá usar uma identidade gerenciada para acessar os recursos.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. Para saber como autenticar solicitações feitas por uma identidade gerenciada para o serviço do barramento de serviço, consulte autenticar o acesso aos recursos do barramento de serviço do Azure com Azure Active Directory e identidades gerenciadas para recursos do Azure.To learn how to authenticate requests made by a managed identity to Service Bus service, see Authenticate access to Azure Service Bus resources with Azure Active Directory and managed identities for Azure Resources.

A etapa de autorização requer que uma ou mais funções RBAC sejam atribuídas à entidade de segurança.The authorization step requires that one or more RBAC roles be assigned to the security principal. O barramento de serviço do Azure fornece funções RBAC que abrangem conjuntos de permissões para recursos do barramento de serviço.Azure Service Bus provides RBAC roles that encompass sets of permissions for Service Bus resources. As funções atribuídas a uma entidade de segurança determinam as permissões que o principal terá.The roles that are assigned to a security principal determine the permissions that the principal will have. Para saber mais sobre como atribuir funções RBAC ao barramento de serviço do Azure, consulte funções RBAC internas para o barramento de serviço do Azure.To learn more about assigning RBAC roles to Azure Service Bus, see Built-in RBAC roles for Azure Service Bus.

Aplicativos nativos e aplicativos Web que fazem solicitações para o barramento de serviço também podem autorizar com o Azure AD.Native applications and web applications that make requests to Service Bus can also authorize with Azure AD. Este artigo mostra como solicitar um token de acesso e usá-lo para autorizar solicitações para recursos do barramento de serviço.This article shows you how to request an access token and use it to authorize requests for Service Bus resources.

Atribuindo funções RBAC para direitos de acessoAssigning RBAC roles for access rights

Azure Active Directory (Azure AD) autoriza os direitos de acesso aos recursos protegidos por meio do controle de acesso baseado em função (RBAC).Azure Active Directory (Azure AD) authorizes access rights to secured resources through role-based access control (RBAC). O barramento de serviço do Azure define um conjunto de funções RBAC internas que abrangem conjuntos comuns de permissões usadas para acessar entidades do barramento de serviço e você também pode definir funções personalizadas para acessar os dados.Azure Service Bus defines a set of built-in RBAC roles that encompass common sets of permissions used to access Service Bus entities and you can also define custom roles for accessing the data.

Quando uma função RBAC é atribuída a uma entidade de segurança do Azure AD, o Azure concede acesso a esses recursos para essa entidade de segurança.When an RBAC role is assigned to an Azure AD security principal, Azure grants access to those resources for that security principal. O acesso pode ser definido para o nível de assinatura, o grupo de recursos ou o namespace do barramento de serviço.Access can be scoped to the level of subscription, the resource group, or the Service Bus namespace. Uma entidade de segurança do Azure AD pode ser um usuário, um grupo, uma entidade de serviço de aplicativo ou uma identidade gerenciada para recursos do Azure.An Azure AD security principal may be a user, a group, an application service principal, or a managed identity for Azure resources.

Funções RBAC internas para o barramento de serviço do AzureBuilt-in RBAC roles for Azure Service Bus

Para o Barramento de Serviço do Azure, o gerenciamento de namespaces e de todos os recursos relacionados por meio do portal do Azure e da API de gerenciamento de recursos do Azure já está protegido pelo modelo RBAC (controle de acesso baseado em função) .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 role-based access control (RBAC) model. O Azure fornece as funções RBAC internas abaixo para autorizar o acesso a um namespace do barramento de serviço:Azure provides the below built-in RBAC roles for authorizing access to a Service Bus namespace:

Escopo de recursoResource scope

Antes de atribuir uma função de RBAC a uma entidade de segurança, determine o escopo de acesso que a entidade de segurança deve ter.Before you assign an RBAC role to a security principal, determine the scope of access that the security principal should have. As práticas recomendadas ditam que é sempre melhor conceder apenas o escopo mais estreito possível.Best practices dictate that it's always best to grant only the narrowest possible scope.

A lista a seguir descreve os níveis nos quais você pode fazer o escopo de acesso aos recursos do barramento de serviço, começando com o escopo mais estreito:The following list describes the levels at which you can scope access to Service Bus resources, starting with the narrowest scope:

  • Fila, tópicoou assinatura: A atribuição de função se aplica à entidade de barramento de serviço específica.Queue, topic, or subscription: Role assignment applies to the specific Service Bus entity. Atualmente, o portal do Azure não dá suporte à atribuição de usuários/grupos/identidades gerenciadas às funções de RBAC do barramento de serviço no nível da assinatura.Currently, the Azure portal doesn't support assigning users/groups/managed identities to Service Bus RBAC roles at the subscription level.
  • Namespace do barramento de serviço: A atribuição de função abrange toda a topologia do barramento de serviço no namespace e no grupo de consumidores associado a ela.Service Bus namespace: Role assignment spans the entire topology of Service Bus under the namespace and to the consumer group associated with it.
  • Grupo de recursos: A atribuição de função se aplica a todos os recursos do barramento de serviço no grupo de recursos.Resource group: Role assignment applies to all the Service Bus resources under the resource group.
  • Assinatura: A atribuição de função se aplica a todos os recursos do barramento de serviço em todos os grupos de recursos na assinatura.Subscription: Role assignment applies to all the Service Bus resources in all of the resource groups in the subscription.

Observação

Tenha em mente que as atribuições de função do RBAC podem levar até cinco minutos para serem propagadas.Keep in mind that RBAC role assignments may take up to five minutes to propagate.

Para obter mais informações sobre como as funções internas são definidas, consulte entender as definições de função.For more information about how built-in roles are defined, see Understand role definitions. Para obter informações sobre como criar funções RBAC personalizadas, consulte criar funções personalizadas para o controle de acesso baseado em função do Azure.For information about creating custom RBAC roles, see Create custom roles for Azure Role-Based Access Control.

Habilitar identidades gerenciadas em uma VMEnable managed identities on a VM

Antes de usar identidades gerenciadas para recursos do Azure para autorizar recursos de barramento de serviço de sua VM, você deve primeiro habilitar identidades gerenciadas para recursos do Azure na VM.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. Para saber como habilitar identidades gerenciadas para Recursos do Azure, confira um dos seguintes artigos:To learn how to enable managed identities for Azure Resources, see one of these articles:

Conceder permissões a uma identidade gerenciada no Azure ADGrant permissions to a managed identity in Azure AD

Para autorizar uma solicitação ao serviço de barramento de serviço de uma identidade gerenciada em seu aplicativo, primeiro configure as configurações de RBAC (controle de acesso baseado em função) para essa identidade gerenciada.To authorize a request to the Service Bus service from a managed identity in your application, first configure role-based access control (RBAC) settings for that managed identity. O barramento de serviço do Azure define funções RBAC que abrangem permissões para enviar e ler do barramento de serviço.Azure Service Bus defines RBAC roles that encompass permissions for sending and reading from Service Bus. Quando a função RBAC é atribuída a uma identidade gerenciada, a identidade gerenciada recebe acesso às entidades do barramento de serviço no escopo apropriado.When the RBAC role is assigned to a managed identity, the managed identity is granted access to Service Bus entities at the appropriate scope.

Para obter mais informações sobre como atribuir funções RBAC, consulte autenticar e autorizar com Azure Active Directory para acessar os recursos do barramento de serviço.For more information about assigning RBAC roles, see Authenticate and authorize with Azure Active Directory for access to Service Bus resources.

Usar Barramento de Serviço com identidades gerenciadas para recursos do AzureUse Service Bus with managed identities for Azure resources

Para usar o barramento de serviço com identidades gerenciadas, você precisa atribuir a identidade a função e o escopo apropriado.To use Service Bus with managed identities, you need to assign the identity the role and the appropriate scope. O procedimento nesta seção usa um aplicativo simples que é executado em uma identidade gerenciada e acessa os recursos do barramento de serviço.The procedure in this section uses a simple application that runs under a managed identity and accesses Service Bus resources.

Aqui, estamos usando um aplicativo Web de exemplo hospedado no serviço Azure app.Here we're using a sample web application hosted in Azure App Service. Para obter as instruções passo a passo para criar um aplicativo Web, consulte criar um ASP.NET Core aplicativo Web no AzureFor step-by-step instructions for creating a web application, see Create an ASP.NET Core web app in Azure

Depois que o aplicativo for criado, siga estas etapas:Once the application is created, follow these steps:

  1. Vá para configurações e selecione identidade.Go to Settings and select Identity.

  2. Selecione o status a ser ativado.Select the Status to be On.

  3. Clique em Salvar para salvar a configuração.Select Save to save the setting.

    Identidade gerenciada para um aplicativo Web

Depois de habilitar essa configuração, uma nova identidade de serviço será criada em seu Azure Active Directory (AD do Azure) e configurada no host do serviço de aplicativo.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.

Agora, atribua essa identidade de serviço a uma função no escopo necessário nos recursos do barramento de serviço.Now, assign this service identity to a role in the required scope in your Service Bus resources.

Para atribuir funções de RBAC usando o portal do AzureTo Assign RBAC roles using the Azure portal

Para atribuir uma função a um namespace do barramento de serviço, navegue até o namespace na portal do Azure.To assign a role to a Service Bus namespace, navigate to the namespace in the Azure portal. Exiba as configurações de controle de acesso (IAM) para o recurso e siga estas instruções para gerenciar as atribuições de função:Display the Access Control (IAM) settings for the resource, and follow these instructions to manage role assignments:

Observação

As etapas a seguir atribui uma função de identidade de serviço aos namespaces do barramento de serviço.The following steps assigns a service identity role to your Service Bus namespaces. Você pode seguir as mesmas etapas para atribuir uma função em outros escopos com suporte (grupo de recursos e assinatura).You can follow the same steps to assign a role at other supported scopes (resource group and subscription).

Crie um namespace de mensagens do barramento de serviço se você não tiver um.Create a Service Bus Messaging namespace if you don't have one.

  1. Na portal do Azure, navegue até o namespace do barramento de serviço e exiba a visão geral do namespace.In the Azure portal, navigate to your Service Bus namespace and display the Overview for the namespace.

  2. Selecione controle de acesso (iam) no menu à esquerda para exibir as configurações de controle de acesso para o namespace do barramento de serviço.Select Access Control (IAM) on the left menu to display access control settings for the Service Bus namespace.

  3. Selecione a guia Atribuições de função para ver as atribuições de função atuais.Select the Role assignments tab to see the list of role assignments.

  4. Selecione Adicionar para adicionar uma nova função.Select Add to add a new role.

  5. Na página Adicionar atribuição de função , selecione as funções do barramento de serviço do Azure que você deseja atribuir.On the Add role assignment page, select the Azure Service Bus roles that you want to assign. Em seguida, pesquise para localizar a identidade do serviço que você registrou para atribuir a função.Then search to locate the service identity you had registered to assign the role.

    Página Adicionar atribuição de função

  6. Clique em Salvar.Select Save. A identidade à qual você atribuiu a função aparece listada sob essa função.The identity to whom you assigned the role appears listed under that role. Por exemplo, a imagem a seguir mostra que a identidade do serviço tem proprietário de dados do barramento de serviço do Azure.For example, the following image shows that service identity has Azure Service Bus Data owner.

    Identidade atribuída a uma função

Depois de atribuir a função, o aplicativo Web terá acesso às entidades do barramento de serviço sob o escopo definido.Once you've assigned the role, the web application will have access to the Service Bus entities under the defined scope.

Executar o aplicativoRun the app

Agora, modifique a página padrão do aplicativo ASP.NET que você criou.Now, modify the default page of the ASP.NET application you created. Também é possível usar o código do aplicativo Web deste repositório GitHub.You can use the web application code from this GitHub repository.

A página Default.aspx é sua página de aterrissagem.The Default.aspx page is your landing page. O código pode ser encontrado no arquivo Default.aspx.cs.The code can be found in the Default.aspx.cs file. O resultado é um aplicativo Web mínimo com alguns campos de entrada e os botões enviar e receber que se conectam ao Barramento de Serviço para enviar ou receber mensagens.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.

Observe como o objeto MessagingFactory é inicializado.Note how the MessagingFactory object is initialized. Em vez de usar o provedor de token SAS (Token de Acesso Compartilhado), o código cria um provedor de token para a identidade gerenciada com a chamada var msiTokenProvider = TokenProvider.CreateManagedIdentityTokenProvider();.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. Dessa forma, não há nenhum segredo a ser retido e uso.As such, there are no secrets to retain and use. O fluxo do contexto de identidade gerenciada para o Barramento de Serviço e o handshake de autorização são manipulados automaticamente pelo provedor de token.The flow of the managed identity context to Service Bus and the authorization handshake are automatically handled by the token provider. É um modelo mais simples que usar SAS.It is a simpler model than using SAS.

Depois de fazer essas alterações, publique e execute o aplicativo.After you make these changes, publish and run the application. Você pode facilmente obter os dados de publicação corretos baixando e, em seguida, importando um perfil de publicação no Visual Studio:You can obtain the correct publishing data easily by downloading and then importing a publishing profile in Visual Studio:

Obter perfil de publicação

Para enviar ou receber mensagens, insira o nome do namespace e o nome da entidade que você criou.To send or receive messages, enter the name of the namespace and the name of the entity you created. Em seguida, clique em envie ou receber.Then, click either send or receive.

Observação

  • A identidade gerenciada funciona somente dentro do ambiente do Azure, em serviços de aplicativos, VMs do Azure e nos conjuntos de dimensionamento.The managed identity works only inside the Azure environment, on App services, Azure VMs, and scale sets. Para aplicativos .NET, a biblioteca Microsoft.Azure.Services.AppAuthentication, que é usada pelo pacote NuGet do Barramento de Serviço, fornece uma abstração sobre esse protocolo e dá suporte a uma experiência de desenvolvimento local.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. Essa biblioteca também permite testar o código localmente no computador de desenvolvimento, usando a conta de usuário do Visual Studio, a CLI 2.0 do Azure ou a Autenticação Integrada do 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. Para obter mais informações sobre as opções de desenvolvimento local com essa biblioteca, consulte Autenticação de serviço a serviço para o Azure Key Vault usando .NET.For more on local development options with this library, see Service-to-service authentication to Azure Key Vault using .NET.

  • Atualmente, as identidades gerenciadas não funcionam com slots de implantação do Serviço de Aplicativo.Currently, managed identities do not work with App Service deployment slots.

Próximas etapasNext steps

Para saber mais sobre as mensagens do Barramento de Serviço, consulte os seguintes tópicos:To learn more about Service Bus messaging, see the following topics: