Quickstart: Configurar Durable Functions com identidade gerida

Este quickstart mostra como configurar uma aplicação Durable Functions para usar ligações baseadas em identidade tanto para o backend do Durable Task Scheduler quer para o fornecedor do Armazenamento do Azure. A plataforma Azure gere uma identidade gerida a partir do Microsoft Entra ID – não precisa de provisionar ou rodar segredos.

Este caminho assume que a sua aplicação já está configurada para usar o backend do Durable Task Scheduler. Se a sua aplicação ainda utiliza o fornecedor Armazenamento do Azure, escolha o caminho Armazenamento do Azure neste artigo.

Neste artigo:

Note

A identidade gerida é suportada na extensão Durable Functions nas versões 2.7.0 e superiores.

Se não tiver uma conta do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

Para concluir este arranque rápido, necessita de:

  • Um projeto Durable Functions existente criado no portal Azure ou um projeto local Durable Functions implementado no Azure.
  • Familiaridade em executar uma aplicação de Durable Functions no Azure.

Se não tem um projeto Durable Functions implementado no Azure, recomendamos que comece com um dos seguintes quickstarts:

Estrutura de desenvolvimento local

Tem duas opções para o desenvolvimento local. Use o emulador local Durable Task Scheduler para testes rápidos sem credenciais do Azure. Se precisares de testar ligações baseadas em identidade contra um recurso de agendador ao vivo, usa as tuas credenciais de programador em vez disso.

Opção 1: Usar o emulador local Durable Task Scheduler

Ao desenvolver localmente, use o emulador Durable Task Scheduler para poder testar a sua aplicação sem credenciais do Azure. Configura as definições da tua app para apontar para o emulador e usa o hub de tarefas predefinido.

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "DTS_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None",
    "TASKHUB_NAME": "default"
  }
}

Opção 2: Ligações baseadas na identidade para o desenvolvimento local

Estritamente falando, uma identidade gerida só está disponível para aplicações quando executadas no Azure. No entanto, ainda pode configurar uma aplicação a correr localmente para usar ligações baseadas em identidade, usando as suas credenciais de programador para autenticar com o seu recurso de agendamento. Depois, quando implementada no Azure, a aplicação utiliza a configuração da identidade gerida.

Quando usa credenciais de programador, a ligação tenta obter um token dos seguintes locais, por esta ordem:

  1. Um cache local compartilhado entre aplicativos da Microsoft
  2. O contexto atual do utilizador no Visual Studio
  3. O contexto atual do utilizador no Visual Studio Code
  4. O contexto atual do utilizador na CLI do Azure

Se nenhuma destas opções for bem-sucedida, recebe um erro a indicar que a aplicação não consegue recuperar um token de autenticação. Verifica se estás ligado a uma das ferramentas listadas com uma conta que tenha acesso ao teu recurso de agendamento.

Configurar o tempo de execução para usar a identidade do desenvolvedor local

  1. Nas definições locais, define o endpoint do escalonador e usa Authentication=DefaultAzure para que a aplicação use as tuas credenciais de programador.

    {
      "IsEncrypted": false,
      "Values": {
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "DTS_CONNECTION_STRING": "Endpoint=https://<your-scheduler-name>.<region>.durabletask.io;TaskHub=<your-task-hub>;Authentication=DefaultAzure",
        "TASKHUB_NAME": "<your-task-hub>"
      }
    }
    
  2. Atribua a função Durable Task Data Contributor à sua identidade de programador no recurso do agendador ou no âmbito específico do hub de tarefas.

Ligações baseadas em identidade para aplicação implementada no Azure

Ativar um recurso de identidade gerido

Ative uma identidade gerida para a sua aplicação de funções. Seu aplicativo de função deve ter uma identidade gerenciada atribuída ao sistema ou uma identidade gerenciada atribuída pelo usuário. Para habilitar uma identidade gerenciada para seu aplicativo de função e saber mais sobre as diferenças entre os dois tipos de identidades, consulte a visão geral da identidade gerenciada.

Atribuir funções de acesso à identidade gerenciada

Navegue até ao seu recurso de agendamento no portal Azure e atribua a Durable Task Data Contributor função à sua identidade gerida. Para acesso de privilégio mínimo, atribua a função ao nível do hub de tarefas em vez de a atribuir ao agendador inteiro. Se usar uma identidade atribuída pelo utilizador, selecione Identidade Gerida e depois + Selecionar membros.

Adicione a configuração de identidade gerida à sua aplicação

Antes de poder usar a identidade gerenciada do aplicativo, faça algumas alterações nas configurações do aplicativo:

  1. No portal Azure, no menu de recursos da tua aplicação de funções, em Definições, seleciona Variáveis de Ambiente.

  2. Adicione ou atualize a DTS_CONNECTION_STRING definição para que a aplicação se ligue ao seu agendador usando a identidade gerida da aplicação.

    Endpoint=https://<your-scheduler-name>.<region>.durabletask.io;TaskHub=<your-task-hub>;Authentication=ManagedIdentity
    

    Se usar uma identidade gerida atribuída pelo utilizador, inclua o ID do cliente na cadeia de ligação:

    Endpoint=https://<your-scheduler-name>.<region>.durabletask.io;TaskHub=<your-task-hub>;Authentication=ManagedIdentity;ClientID=<your-user-assigned-identity-client-id>
    
  3. Adicione ou atualize a TASKHUB_NAME definição para o mesmo nome do hub de tarefas.

  4. Se o seu host de funções precisar de Armazenamento do Azure para operações ao nível do anfitrião, configure AzureWebJobsStorage separadamente. A infraestrutura de back-end do agendador utiliza a cadeia de ligação DTS, em vez de AzureWebJobsStorage, para o estado durável.

Verifica a tua configuração

Para confirmar que a sua configuração de identidade gerida funciona:

  1. No portal do Azure, navegue até à sua aplicação de funções e ative a orquestração do Durable Functions.
  2. Verifique se a orquestração termina com sucesso consultando o endpoint de estado ou verificando o separador Monitor .
  3. Se detetar erros de autenticação, verifique que:
    • A identidade gerida tem a função Durable Task Data Contributor ao nível do recurso do agendador ou do centro de tarefas.
    • As DTS_CONNECTION_STRING definições e TASKHUB_NAME estão corretas.
    • A aplicação está a usar a identidade esperada quando está a correr no Azure.

Estrutura de desenvolvimento local

Tem duas opções para o desenvolvimento local. Use o Azurite para testes locais rápidos sem credenciais do Azure. Se precisar de testar ligações baseadas em identidade contra uma conta real do Armazenamento do Azure, use antes as suas credenciais de programador.

Opção 1: Usar o emulador Armazenamento do Azure

Ao desenvolver localmente, recomenda-se usar o Azurite, que é o emulador local do Armazenamento do Azure. Configure seu aplicativo para o emulador especificando "AzureWebJobsStorage": "UseDevelopmentStorage=true" no local.settings.json.

Opção 2: Ligações baseadas na identidade para o desenvolvimento local

Estritamente falando, uma identidade gerida só está disponível para aplicações quando executadas no Azure. No entanto, ainda pode configurar uma aplicação a correr localmente para usar uma ligação baseada em identidade, usando as suas credenciais de programador para autenticar com recursos do Azure. Depois, quando implementada na Azure, a aplicação utilizará a sua configuração de identidade gerida.

Ao usar credenciais de programador, a ligação tenta obter um token das seguintes localizações, por esta ordem:

  1. Um cache local compartilhado entre aplicativos da Microsoft
  2. O contexto atual do utilizador no Visual Studio
  3. O contexto atual do utilizador no Visual Studio Code
  4. O contexto atual do utilizador na CLI do Azure

Se nenhuma destas opções for bem-sucedida, recebe um erro a indicar que a aplicação não consegue recuperar um token de autenticação. Verifica se estás ligado a uma das ferramentas listadas com uma conta que tenha acesso à tua conta Armazenamento do Azure.

Configurar o tempo de execução para usar a identidade do desenvolvedor local

  1. Especifique o nome da sua conta Armazenamento do Azure no local.settings.json, por exemplo:

    {
       "IsEncrypted": false,
       "Values": {
          "AzureWebJobsStorage__accountName": "<<your Azure Storage account name>>",
          "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
       }
    }
    
  2. Navegue até ao recurso da sua conta Armazenamento do Azure no portal Azure.

  3. Selecione o separador Controlo de Acesso (IAM) e depois selecione Adicionar atribuição de funções.

  4. Atribui cada um dos seguintes papéis a ti próprio. Para cada função, selecione "+ Selecione membros" e procure o email que usa para iniciar sessão no Visual Studio, Visual Studio Code ou no CLI do Azure.

    • Contribuidor de Dados da Fila de Armazenamento
    • Contribuidor de Dados de Storage Blob
    • Contribuidor de dados de tabelas de armazenamento

    Note

    Estas são as mesmas três funções necessárias para a sua identidade gerida ao implementar no Azure. Veja Atribuir papéis de acesso à identidade gerida.

    Captura de ecrã da atribuição de papéis de Contribuidor de Dados de Armazenamento a um utilizador na página Controlo de Acesso portal Azure.

Ligações baseadas em identidade para aplicação implementada no Azure

Ativar um recurso de identidade gerido

Para começar, habilite uma identidade gerenciada para seu aplicativo. Seu aplicativo de função deve ter uma identidade gerenciada atribuída ao sistema ou uma identidade gerenciada atribuída pelo usuário. Para habilitar uma identidade gerenciada para seu aplicativo de função e saber mais sobre as diferenças entre os dois tipos de identidades, consulte a visão geral da identidade gerenciada.

Atribuir funções de acesso à identidade gerenciada

Navegue para o recurso Armazenamento do Azure da sua aplicação no portal Azure e atribua três funções de controlo de acesso baseado em papéis ao seu recurso de identidade gerida.

  • Contribuidor de Dados da Fila de Armazenamento
  • Contribuidor de Dados de Storage Blob
  • Contribuidor de dados de tabelas de armazenamento

Para encontrar o seu recurso de identidade, selecione Atribuir acesso à Identidade Gerida e, em seguida, + Selecionar membros.

Captura de ecrã da atribuição de funções de acesso ao armazenamento a uma identidade gerida no portal Azure.

Adicione a configuração de identidade gerida à sua aplicação

Antes de poder usar a identidade gerenciada do aplicativo, faça algumas alterações nas configurações do aplicativo:

  1. No portal Azure, no menu de recursos da tua aplicação de funções, em Definições, seleciona Variáveis de Ambiente.

  2. Na lista de configurações, localize AzureWebJobsStorage e selecione o ícone Excluir . Captura de ecrã da variável de ambiente AzureWebJobsStorage nas definições da aplicação de funções do portal Azure.

  3. Adicione uma definição para ligar a sua conta de armazenamento Azure à aplicação.

    Use um dos seguintes métodos , dependendo da nuvem em que seu aplicativo é executado:

    • Azure cloud: Se a sua aplicação correr em global Azure, adicione a definição AzureWebJobsStorage__accountName que identifica um nome de conta de armazenamento Azure. Valor de exemplo: mystorageaccount123

    • Nuvem não-Azure: Se a sua aplicação correr numa nuvem fora do Azure, deve adicionar as seguintes três configurações para especificar URIs de serviço específicos (ou endpoints) da conta de armazenamento em vez de um nome de conta.

      • Nome da configuração: AzureWebJobsStorage__blobServiceUri

        Valor de exemplo: https://mystorageaccount123.blob.core.windows.net/

      • Nome da configuração: AzureWebJobsStorage__queueServiceUri

        Valor de exemplo: https://mystorageaccount123.queue.core.windows.net/

      • Nome da configuração: AzureWebJobsStorage__tableServiceUri

        Valor de exemplo: https://mystorageaccount123.table.core.windows.net/

    Pode obter os valores dessas variáveis URI na informação da conta de armazenamento, na guia Pontos de extremidade.

    Captura de ecrã do separador endpoints da conta de armazenamento mostrando os URIs de blob, fila e serviço de tabelas.

    Note

    Se estiveres a usar Azure Government ou qualquer outra cloud separada da Azure global, deves usar a opção que fornece URIs de serviço específicos em vez de apenas o nome da conta de armazenamento. Para mais informações sobre como usar Armazenamento do Azure com Azure Government, consulte o Develop usando a API de Armazenamento em Azure Government.

  4. Conclua sua configuração de identidade gerenciada (lembre-se de clicar em "Aplicar" depois de fazer as alterações de configuração):

    • Se você usar uma identidade atribuída ao sistema, não faça outras alterações.

    • Se você usar uma identidade atribuída pelo usuário, adicione as seguintes configurações na configuração do aplicativo:

      • AzureWebJobsStorage__credential, insira managedidentity

      • AzureWebJobsStorage__clientId, obtenha esse valor GUID do seu recurso de identidade gerenciado

    Captura de ecrã do recurso de identidade gerida atribuído pelo utilizador mostrando o valor do ID do cliente.

    Note

    Durable Functions não suporta managedIdentityResourceId quando se usa uma identidade atribuída pelo utilizador. Utilize clientId em substituição.

Verifica a tua configuração

Para confirmar que a sua configuração de identidade gerida funciona:

  1. No portal do Azure, navegue até à sua aplicação de funções e ative a orquestração das Durable Functions (por exemplo, usando uma função trigger HTTP).
  2. Verifique se a orquestração foi concluída com sucesso consultando o endpoint de estado ou a aba Monitor.
  3. Se detetar erros de autenticação, verifique que:
    • As três funções de Contribuidor de Dados de Armazenamento estão atribuídas à identidade correta.
    • A definição AzureWebJobsStorage cadeia de ligação foi removida.
    • As AzureWebJobsStorage__accountName definições (ou URI do serviço) estão corretas.

Passos seguintes