Compartilhar via


Tutorial: Usar conexões baseadas em identidade em vez de segredos com gatilhos e associações

Este tutorial mostra como configurar o Azure Functions para se conectar às filas do Barramento de Serviço do Azure usando identidades gerenciadas, em vez de segredos armazenados nas configurações do aplicativo de funções. O tutorial é uma continuação do tutorial Criar um aplicativo de funções sem segredos de armazenamento padrão na própria definição. Para saber mais sobre conexões baseadas em identidade, confira Configurar uma conexão baseada em identidade.

Embora os procedimentos mostrados funcionem em geral para todas as linguagens, este tutorial atualmente dá suporte a funções de biblioteca de classes C# no Windows, especificamente.

Neste tutorial, você aprenderá a:

  • Criar um namespace do Barramento de Serviço e da fila.
  • Configure seu aplicativo de funções com uma identidade gerenciada.
  • Crie uma atribuição de função concedendo a essa permissão de identidade para ler da fila do Barramento de Serviço.
  • Crie e implante um aplicativo de funções com um gatilho do Barramento de Serviço.
  • Verifique sua conexão baseada em identidade com o Barramento de Serviço.

Pré-requisito

Conclua o tutorial anterior: Criar um aplicativo de funções com conexões baseadas em identidade.

Criar um namespace do Barramento de Serviço e da fila

  1. No portal do Azure, escolha Criar um recurso (+) .

  2. Na página Criar um recurso, pesquise e selecione Barramento de Serviço do Azure e selecione Criar.

  3. Na página Básico, use a tabela a seguir para definir as configurações de namespace do Barramento de Serviço. Use os valores padrão para as opções restantes.

    Opção Valor sugerido Descrição
    Assinatura Sua assinatura A assinatura na qual os recursos são criados.
    Grupo de recursos myResourceGroup O grupo de recursos que você criou com seu aplicativo de funções.
    Nome do namespace Nome globalmente exclusivo O namespace de sua instância da qual disparar sua função. Como o namespace é acessível publicamente, você precisa usar um nome globalmente exclusivo no Azure. O nome também precisa ter entre 6 e 50 caracteres, conter apenas caracteres alfanuméricos e traços e não pode começar com um número.
    Local myFunctionRegion A região em que você criou seu aplicativo de funções.
    Tipo de preços Basic A camada Barramento de Serviço básica.
  4. Selecione Examinar + criar. Depois da validação, selecione Criar.

  5. Após a implantação ser concluída, selecione Ir para o recurso.

  6. Crie um namespace de Barramento de Serviço e selecione + Fila para adicionar uma fila.

  7. Insira myinputqueue como o nome da nova fila e selecione Criar.

Agora que você tem uma fila, pode adicionar uma atribuição de função à identidade gerenciada do aplicativo de funções.

Configurar seu gatilho de Barramento de Serviço com uma identidade gerenciada

Para usar gatilhos do Barramento de Serviço com conexões baseadas em identidade, você precisa adicionar a atribuição de função Receptor de dados do Barramento de Serviço do Azure à identidade gerenciada em seu aplicativo de funções. Essa função é necessária ao usar identidades gerenciadas para disparar o namespace do Barramento de Serviço. Você também pode adicionar sua própria conta a essa função, o que possibilita a conexão com o namespace do Barramento de Serviço durante o teste local.

Observação

Os requisitos de função para usar conexões baseadas em identidade variam dependendo do serviço e de como você está se conectando a ele. As necessidades variam entre gatilhos, associações de entrada e associações de saída. Para obter mais informações sobre requisitos de função específicos, consulte a documentação de gatilho e associação para o serviço.

  1. No namespace do Barramento de Serviço que você criou, selecione Controle de acesso (IAM). Esta página é onde você pode exibir e configurar quem tem acesso ao recurso.

  2. Selecione + Adicionar e selecione Adicionar atribuição de função.

  3. Pesquise o Receptor de Dados do Barramento de Serviço do Azure, selecione-o e selecione Avançar.

  4. Na guia Membros, em Atribuir acesso a, escolha Identidade Gerenciada

  5. Selecione Selecionar membros para abrir o painel Selecionar identidades gerenciadas.

  6. Confirme se a Assinatura é aquela na qual você criou os recursos anteriormente.

  7. No seletor Identidade gerenciada, escolha Aplicativo de Funções da categoria Identidade gerenciada atribuída pelo sistema. O rótulo Aplicativo de funções pode ter um número entre parênteses ao lado dele, indicando o número de aplicativos na assinatura com identidades atribuídas pelo sistema.

  8. Seu aplicativo deve aparecer em uma lista abaixo dos campos de entrada. Se você não a vir, poderá usar a caixa Selecionar para filtrar os resultados com o nome do aplicativo.

  9. Selecione seu aplicativo. Ele deve ser movido para baixo na seção Membros selecionados. Escolha Selecionar.

  10. De volta à tela Adicionar atribuição de função, selecione Examinar + atribuir. Examine a configuração e selecione Examinar + atribuir.

Você concedeu ao aplicativo de funções acesso ao namespace do Barramento de Serviço usando identidades gerenciadas.

Conectar-se ao Barramento de Serviço em seu aplicativo de funções

  1. No portal, pesquise o aplicativo de funções que você criou no tutorial anterior ou navegue até ele na página Aplicativo de Funções.

  2. Em seu aplicativo de funções, expanda Configurações e selecione Variáveis de ambiente.

  3. Na guia Configurações do aplicativo, selecione + Adicionar para criar uma configuração. Use as informações na tabela a seguir para inserir o Nome e o Valor para a nova configuração:

    Nome Valor Descrição
    ServiceBusConnection__fullyQualifiedNamespace <SERVICE_BUS_NAMESPACE>.servicebus.windows.net Essa configuração conecta seu aplicativo de funções com o Barramento de Serviço usando uma conexão baseada em identidade, em vez de segredos.
  4. Selecione Aplicar e selecione Aplicar e Confirmar para salvar suas alterações e reiniciar a função de aplicativo.

Observação

Quando você usa a Configuração de Aplicativos do Azure ou Key Vault para fornecer configurações para conexões de Identidade Gerenciada, os nomes de configuração devem usar um separador de chave válido, como : ou /, no lugar do __ para garantir que os nomes sejam resolvidos corretamente.

Por exemplo, ServiceBusConnection:fullyQualifiedNamespace.

Agora que você preparou o aplicativo de funções para se conectar ao namespace do Barramento de Serviço usando uma identidade gerenciada, você pode adicionar uma nova função que usa um gatilho do Barramento de Serviço ao seu projeto local.

Adicionar uma função disparada pelo Barramento de Serviço

  1. Execute o comando func init da seguinte maneira para criar um projeto de funções em uma pasta chamada LocalFunctionProj com o runtime especificado:

    func init LocalFunctionProj --dotnet
    
  2. Navegue até a pasta do projeto:

    cd LocalFunctionProj
    
  3. Na pasta raiz do projeto, execute o seguinte comando:

    dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.2.0
    

    Esse comando substitui a versão padrão do pacote de extensão do Barramento de Serviço por uma versão que dá suporte a identidades gerenciadas.

  4. Execute o seguinte comando para adicionar uma função disparada pelo Barramento de Serviço ao projeto:

    func new --name ServiceBusTrigger --template ServiceBusQueueTrigger 
    

    Esse comando adiciona o código para um novo gatilho do Barramento de Serviço e uma referência ao pacote de extensão. Você precisa adicionar uma configuração de conexão de namespace do Barramento de Serviço para esse gatilho.

  5. Abra o novo arquivo de projeto ServiceBusTrigger.cs e substitua a classe ServiceBusTrigger pelo seguinte código:

    public static class ServiceBusTrigger
    {
        [FunctionName("ServiceBusTrigger")]
        public static void Run([ServiceBusTrigger("myinputqueue", 
            Connection = "ServiceBusConnection")]string myQueueItem, ILogger log)
        {
            log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
        }
    }
    

    Este exemplo de código atualiza o nome da fila para myinputqueue, que é o mesmo nome que você criou anteriormente. Ele também define o nome da conexão Barramento de Serviço para ServiceBusConnection. Esse nome é o namespace do Barramento de Serviço usado pela conexão baseada em identidade ServiceBusConnection__fullyQualifiedNamespace que você configurou no portal.

Observação

Se você tentar executar suas funções agora usando func start, receberá um erro. Isso é porque você não tem uma conexão baseada em identidade definida localmente. Se você quiser executar sua função localmente, defina a configuração do aplicativo ServiceBusConnection__fullyQualifiedNamespace em local.settings.json como fez na [seção anterior](#connect-to-the-service-bus-in-your-function-app). Além disso, você precisa atribuir a função à identidade do desenvolvedor. Para obter mais informações, consulte desenvolvimento local com conexões baseadas em identidade.

Observação

Ao usar a Configuração de Aplicativos do Azure ou o Key Vault para fornecer configurações para conexões de Identidade Gerenciada, os nomes de configuração devem usar um separador de chave válido, como : ou / no lugar de __ para garantir que os nomes sejam resolvidos corretamente.

Por exemplo, ServiceBusConnection:fullyQualifiedNamespace.

Publicar o projeto atualizado

  1. Execute o seguinte comando para gerar localmente os arquivos necessários para o pacote de implantação:

    dotnet publish --configuration Release
    
  2. Navegue até a subpasta \bin\Release\netcoreapp3.1\publish e crie um arquivo .zip com base no conteúdo dela.

  3. Publique o arquivo de .zip executando o seguinte comando, substituindo os parâmetros FUNCTION_APP_NAME, RESOURCE_GROUP_NAME e PATH_TO_ZIP conforme apropriado:

    az functionapp deploy -n FUNCTION_APP_NAME -g RESOURCE_GROUP_NAME --src-path PATH_TO_ZIP
    

Agora que você atualizou o aplicativo de funções com o novo gatilho, você pode verificar se ele funciona usando a identidade.

Validar suas alterações

  1. No portal, pesquise por Application Insights e selecione Application Insights em Serviços.

  2. Em Application Insights, procure ou pesquise por sua instância nomeada.

  3. Em sua instância, selecione Métricas em Tempo Real em Investigar.

  4. Mantenha a guia anterior aberta e abra o portal do Azure em uma nova guia. Na nova guia, navegue até o namespace do Barramento de Serviço, selecione Filas no menu à esquerda.

  5. Selecione sua fila chamada myinputqueue.

  6. Selecione Service Bus Explorer no menu à esquerda.

  7. Envie uma mensagem de teste.

  8. Selecione a guia Métricas em Tempo Real e veja a execução da fila do Barramento de Serviço.

Parabéns! Você configurou com êxito o gatilho de fila do Barramento de Serviço com uma identidade gerenciada.

Limpar os recursos

Nas etapas anteriores, você criou os recursos do Azure em um grupo de recursos. Se você não espera precisar desses recursos no futuro, poderá excluí-los ao excluir o grupo de recursos.

No menu do portal do Azure ou na Página inicial, selecione Grupos de recursos. Em seguida, na página Grupos de recursos, selecione myResourceGroup.

Na página myResourceGroup, certifique-se de que os recursos listados são aqueles que deseja excluir.

Selecione Excluir grupo de recursos, digite myResourceGroup na caixa de texto para confirmar e selecione Excluir.

Próximas etapas

Neste tutorial, você criou um aplicativo de funções com conexões baseadas em identidade.

Avance para o próximo artigo para saber como gerenciar a identidade.