Tutorial: Utilizar ligações baseadas em identidade em vez de segredos com acionadores e enlaces

Este tutorial mostra-lhe como configurar Funções do Azure para ligar a filas de Azure Service Bus com identidades geridas em vez de segredos armazenados nas definições da aplicação de funções. O tutorial é uma continuação do tutorial Criar uma aplicação de funções sem segredos de armazenamento predefinidos no respetivo tutorial de definição. Para saber mais sobre ligações baseadas em identidade, veja Configurar uma ligação baseada em identidade.

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

Neste tutorial, irá aprender a:

  • Crie um espaço de nomes e uma fila do Service Bus.
  • Configurar a aplicação de funções com a identidade gerida
  • Criar uma atribuição de função que conceda a essa identidade permissão para ler a partir da fila do Service Bus
  • Criar e implementar uma aplicação de funções com um acionador do Service Bus.
  • Verificar a ligação baseada em identidade ao Service Bus

Pré-requisito

Conclua o tutorial anterior: Criar uma aplicação de funções com ligações baseadas em identidade.

Criar um service bus e uma fila

  1. Na portal do Azure, selecione Criar um recurso (+).

  2. Na página Criar um recurso , selecione Integration>Service Bus.

  3. Na página Informações básicas , utilize a seguinte tabela para configurar as definições do espaço de nomes do Service Bus. Utilize os valores predefinidos para as restantes opções.

    Opção Valor sugerido Descrição
    Subscrição A sua subscrição A subscrição na qual os seus recursos são criados.
    Grupo de recursos myResourceGroup O grupo de recursos que criou com a sua aplicação de funções.
    Nome do espaço de nomes Nome globalmente exclusivo O espaço de nomes da sua instância a partir do qual acionar a função. Uma vez que o espaço de nomes é acessível publicamente, tem de utilizar um nome globalmente exclusivo em todo o Azure. O nome também tem de ter entre 6 e 50 carateres de comprimento, conter apenas carateres alfanuméricos e travessões e não pode começar com um número.
    Localização myFunctionRegion A região onde criou a sua aplicação de funções.
    Escalão de preço Básica O escalão básico do Service Bus.
  4. Selecione Rever + criar. Após a conclusão da validação, selecione Criar.

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

  6. No novo espaço de nomes do Service Bus, selecione + Fila para adicionar uma fila.

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

Agora que tem uma fila, irá adicionar uma atribuição de função à identidade gerida da sua aplicação de funções.

Configurar o acionador do Service Bus com uma identidade gerida

Para utilizar acionadores do Service Bus com ligações baseadas em identidade, terá de adicionar a atribuição de função recetor de dados Azure Service Bus à identidade gerida na sua aplicação de funções. Esta função é necessária ao utilizar identidades geridas para acionar o espaço de nomes do service bus. Também pode adicionar a sua própria conta a esta função, o que permite ligar ao espaço de nomes do service bus durante os testes locais.

Nota

Os requisitos de função para utilizar ligações baseadas em identidade variam consoante o serviço e a forma como se está a ligar ao mesmo. As necessidades variam entre acionadores, enlaces de entrada e enlaces de saída. Para obter mais detalhes sobre os requisitos de função específicos, veja a documentação de acionador e enlace do serviço.

  1. No espaço de nomes do service bus que acabou de criar, selecione Controlo de Acesso (IAM). É aqui que pode ver e configurar quem tem acesso ao recurso.

  2. Clique em Adicionar e selecione adicionar atribuição de função.

  3. Procure Azure Service Bus Recetor de Dados, selecione-o e clique em Seguinte.

  4. No separador Membros , em Atribuir acesso a, selecione Identidade Gerida

  5. Clique em Selecionar membros para abrir o painel Selecionar identidades geridas .

  6. Confirme que a Subscrição é aquela em que criou os recursos anteriormente.

  7. No seletor de identidade gerida, selecioneFunction App na categoria Identidade gerida atribuída pelo sistema . A etiqueta "Function App" pode ter um número entre parênteses junto à mesma, indicando o número de aplicações na subscrição com identidades atribuídas pelo sistema.

  8. A sua aplicação deverá aparecer numa 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. Clique na sua aplicação. Deve mover-se para baixo para a secção Membros selecionados . Clique em Selecionar.

  10. Novamente no ecrã Adicionar atribuição de função , clique em Rever + atribuir. Reveja a configuração e, em seguida, clique em Rever + atribuir.

Concedeu à sua aplicação de funções acesso ao espaço de nomes do service bus com identidades geridas.

Ligar ao Service Bus na sua aplicação de funções

  1. No portal, procure a aplicação de funções que criou no tutorial anterior ou navegue para a mesma na página Aplicação de Funções .

  2. Na sua aplicação de funções, selecione Configuração em Definições.

  3. Em Definições da aplicação, selecione + Nova definição de aplicação para criar a nova definição na tabela seguinte.

    Name Valor Descrição
    ServiceBusConnection__fullyQualifiedNamespace <>SERVICE_BUS_NAMESPACE.servicebus.windows.net Esta definição liga a sua aplicação de funções ao Service Bus através de uma ligação baseada em identidade em vez de segredos.
  4. Depois de criar as duas definições, selecione Guardar>Confirmar.

Nota

Ao utilizar Azure App Configuration ou Key Vault para fornecer definições para ligações de Identidade Gerida, os nomes das definições devem utilizar um separador de chave válido, como : ou / em vez do para garantir que os __ nomes são resolvidos corretamente.

Por exemplo, ServiceBusConnection:fullyQualifiedNamespace.

Agora que preparou a aplicação de funções para ligar ao espaço de nomes do service bus com uma identidade gerida, pode adicionar uma nova função que utiliza um acionador 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 numa pasta denominada LocalFunctionProj com o runtime especificado:

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

    cd LocalFunctionProj
    
  3. Na pasta do projeto de raiz, execute os seguintes comandos:

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

    Esta ação substitui a versão predefinida do pacote de extensão do Service Bus por uma versão que suporta identidades geridas.

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

    func new --name ServiceBusTrigger --template ServiceBusQueueTrigger 
    

    Esta ação adiciona o código para um novo acionador do Service Bus e uma referência ao pacote de extensão. Tem de adicionar uma definição de ligação de espaço de nomes do service bus para este acionador.

  5. Abra o novo ficheiro 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 que criou anteriormente. Também define o nome da ligação do Service Bus como ServiceBusConnection. Este é o espaço de nomes do Service Bus utilizado pela ligação ServiceBusConnection__fullyQualifiedNamespace baseada na identidade que configurou no portal.

Nota

Se tentar executar as suas funções agora com func start , receberá um erro. Isto acontece porque não tem uma ligação baseada em identidade definida localmente. Se quiser executar a função localmente, defina a definição ServiceBusConnection__fullyQualifiedNamespacelocal.settings.json da aplicação como fez na secção anterior. Além disso, terá de atribuir a função à sua identidade de programador. Para obter mais detalhes, veja a documentação de desenvolvimento local com ligações baseadas em identidade.

Nota

Ao utilizar Azure App Configuration ou Key Vault para fornecer definições para ligações de Identidade Gerida, os nomes das definições devem utilizar um separador de chave válido, como : ou / em vez do para garantir que os __ nomes são resolvidos corretamente.

Por exemplo, ServiceBusConnection:fullyQualifiedNamespace.

Publicar o projeto atualizado

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

    dotnet publish --configuration Release
    
  2. Navegue para a \bin\Release\netcoreapp3.1\publish subpasta e crie um ficheiro .zip a partir do respetivo conteúdo.

  3. Publique o ficheiro .zip ao executar o seguinte comando, substituindo os FUNCTION_APP_NAMEparâmetros , RESOURCE_GROUP_NAMEe PATH_TO_ZIP conforme adequado:

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

Agora que atualizou a aplicação de funções com o novo acionador, pode verificar se funciona com a identidade.

Validar as alterações

  1. No portal, procure Application Insights e selecione Application Insights emServiços.

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

  3. Na sua instância, selecione Métricas Em Direto em Investigar.

  4. Mantenha o separador anterior aberto e abra o portal do Azure num novo separador. No novo separador, navegue para o espaço de nomes do Service Bus e selecione Filas no painel esquerdo.

  5. Selecione a sua fila com o nome myinputqueue.

  6. Selecione Service Bus Explorer no painel esquerdo.

  7. Enviar uma mensagem de teste.

  8. Selecione o separador Métricas em Direto aberto e veja a execução da fila do Service Bus.

Parabéns! Configurou com êxito o acionador de fila do Service Bus com uma identidade gerida!

Limpar os 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 portal do Azure ou home page, 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 os que pretende eliminar.

Selecione Eliminar grupo de recursos, escreva myResourceGroup na caixa de texto a confirmar e, em seguida, selecione Eliminar.

Passos seguintes

Neste tutorial, criou uma aplicação de funções com ligações baseadas em identidade.

Utilize as seguintes ligações para saber mais Funções do Azure com ligações baseadas em identidade: