Partilhar via


Tutorial: Use conexões baseadas em identidade em vez de segredos com gatilhos e ligações

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

Embora os procedimentos mostrados funcionem geralmente para todos os idiomas, este tutorial atualmente oferece suporte a funções de biblioteca de classes C# no Windows especificamente.

Neste tutorial, irá aprender a:

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

Pré-requisito

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

Criar um namespace e uma fila do Service Bus

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

  2. Na página Criar um recurso, procure e selecione Barramento de Serviço e, em seguida, selecione Criar.

  3. Na página Noções básicas, use a tabela a seguir para definir as configurações do namespace do Service Bus. Use os valores padrão para as opções restantes.

    Opção Valor sugerido Description
    Subscrição a sua subscrição A subscrição ao abrigo da qual os seus recursos são criados.
    Grupo de recursos myResourceGroup O grupo de recursos que você criou com seu aplicativo de função.
    Nome do namespace Nome globalmente exclusivo O namespace de sua instância a partir do qual acionar sua função. Como o namespace é acessível publicamente, você deve usar um nome que seja globalmente exclusivo no Azure. O nome também deve ter entre 6 e 50 caracteres, conter apenas caracteres alfanuméricos e traços e não pode começar com um número.
    Location myFunctionRegion A região onde você criou seu aplicativo de função.
    Escalão de preço Básica A camada básica do Service Bus.
  4. Selecione Rever + criar. Após a conclusão da validação, selecione Criar.

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

  6. No novo namespace do Service Bus, selecione + Fila para adicionar uma fila.

  7. Digite 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 seu aplicativo de função.

Configure o gatilho do Service Bus com uma identidade gerenciada

Para usar gatilhos do Barramento de Serviço com conexões baseadas em identidade, você precisa adicionar a atribuição da função Recetor de Dados do Barramento de Serviço do Azure à identidade gerenciada em seu aplicativo de função. Essa função é necessária ao usar identidades gerenciadas para acionar seu namespace do Service Bus. Você também pode adicionar sua própria conta a essa função, o que torna possível se conectar ao namespace do Service Bus durante o teste local.

Nota

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, ligações de entrada e ligações de saída. Para obter mais informações sobre requisitos de função específicos, consulte a documentação de acionamento e vinculação para o serviço.

  1. No namespace do Service Bus que você criou, selecione Controle de acesso (IAM). Esta página é onde você pode visualizar e configurar quem tem acesso ao recurso.

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

  3. Procure o Recetor de Dados do Barramento de Serviço do Azure, selecione-o e, em seguida, 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 Subscrição é aquela na qual criou os recursos anteriormente.

  7. No seletor de identidade gerenciada, escolha Aplicativo de função na categoria Identidade gerenciada atribuída pelo sistema. O rótulo Aplicativo de função pode ter um número entre parênteses ao lado, 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 não o vir, pode utilizar a caixa Selecionar para filtrar os resultados com o nome da sua aplicação.

  9. Selecione a sua candidatura. Ele deve ser movido para baixo na seção Membros selecionados . Selecione Selecionar.

  10. De volta à tela Adicionar atribuição de função, selecione Revisar + atribuir. Reveja a configuração e, em seguida, selecione Rever + atribuir.

Você concedeu ao seu aplicativo de função acesso ao namespace do Service Bus usando identidades gerenciadas.

Conectar-se ao Service Bus em seu aplicativo de função

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

  2. Na sua aplicação de funções, expanda Definições e, em seguida, 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 Description
    ServiceBusConnection__fullyQualifiedNamespace <SERVICE_BUS_NAMESPACE.servicebus.windows.net> Essa configuração conecta seu aplicativo de função ao Service Bus usando uma conexão baseada em identidade em vez de segredos.
  4. Selecione Aplicar e, em seguida, selecione Aplicar e Confirmar para guardar as alterações e reiniciar a função da aplicação.

Nota

Quando você usa a Configuração do Aplicativo do Azure ou o Cofre da Chave 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ção para se conectar ao namespace do Service Bus usando uma identidade gerenciada, você pode adicionar uma nova função que usa um gatilho do Service Bus ao seu projeto local.

Adicionar uma função acionada pelo Service Bus

  1. Execute o func init comando, da seguinte forma, para criar um projeto de funções em uma pasta chamada LocalFunctionProj com o tempo de execução 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
    

    Este comando substitui a versão padrão do pacote de extensão do Service Bus por uma versão que oferece suporte a identidades gerenciadas.

  4. Execute o seguinte comando para adicionar uma função acionada do Service Bus ao projeto:

    func new --name ServiceBusTrigger --template ServiceBusQueueTrigger 
    

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

  5. Abra o novo arquivo de projeto ServiceBusTrigger.cs e substitua a ServiceBusTrigger classe 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 da fila criada anteriormente. Ele também define o nome da conexão do Service Bus como ServiceBusConnection. Esse nome é o namespace do Service Bus usado pela conexão ServiceBusConnection__fullyQualifiedNamespace baseada em identidade que você configurou no portal.

Nota

Se você tentar executar suas funções agora usando func starto , receberá um erro. Isso ocorre 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 ServiceBusConnection__fullyQualifiedNamespace do aplicativo como local.settings.json fez em [a seção anterior](#connect para o service-bus-in-your-function-app). Além disso, você precisa atribuir a função à sua identidade de desenvolvedor. Para obter mais informações, consulte Desenvolvimento local com conexões baseadas em identidade.

Nota

Ao usar a Configuração do Aplicativo do Azure ou o Cofre da Chave 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.

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 \bin\Release\netcoreapp3.1\publish subpasta e crie um arquivo .zip a partir de seu conteúdo.

  3. Publique o arquivo .zip executando o seguinte comando, substituindo os FUNCTION_APP_NAMEparâmetros , RESOURCE_GROUP_NAMEe 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ção com o novo gatilho, pode verificar se ele funciona usando a identidade.

Valide as alterações

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

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

  3. Na 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 Service Bus, 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 Live Metrics aberta e veja a execução da fila do Service Bus.

Parabéns! Você configurou com êxito o gatilho de fila do Service Bus com uma identidade gerenciada.

Clean up resources (Limpar recursos)

Nos passos anteriores, criou os recursos do Azure num grupo de recursos. Se provavelmente não necessitar desses recursos no futuro, pode eliminá-los ao eliminar 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 você deseja excluir.

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

Próximos passos

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

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