Início Rápido: Configurar Durable Functions com identidade gerenciada

Este quickstart mostra como configurar um aplicativo Durable Functions para usar conexões baseadas em identidade, seja para o backend do Durable Task Scheduler ou para o provedor Armazenamento do Azure. A plataforma Azure gerencia uma identidade gerenciada a partir do Microsoft Entra ID – você não precisa provisionar ou rotacionar nenhum segredo.

Esse caminho assume que seu app já está configurado para usar o backend do Durable Task Scheduler. Se seu aplicativo ainda usa o provedor Armazenamento do Azure, escolha o caminho do Armazenamento do Azure neste artigo.

Neste artigo:

  • Configuração de desenvolvimento local – use o Azurite ou suas credenciais de desenvolvedor para testes locais
  • Conexões baseadas em identidade para o aplicativo implantado no Azure — Habilite uma identidade gerenciada e configure seu aplicativo de função

Note

A identidade gerenciada tem suporte nas versões Durable Functions extension2.7.0 e maiores.

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

Pré-requisitos

Para concluir este guia de início rápido, você precisa:

  • Um projeto existente de Durable Functions criado no portal do Azure ou um projeto de Durable Functions local implantado no Azure.
  • Familiaridade ao executar um aplicativo Durable Functions no Azure.

Se você não tiver um projeto de Durable Functions existente implantado no Azure, recomendamos que você comece com um dos seguintes guias de início rápido:

Configuração de desenvolvimento local

Você tem duas opções para desenvolvimento local. Use o emulador local Durable Task Scheduler para testes rápidos sem credenciais do Azure. Se precisar testar conexões baseadas em identidade contra um recurso de agendamento ao vivo, use suas credenciais de desenvolvedor.

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

Ao desenvolver localmente, use o emulador Durable Task Scheduler para testar seu aplicativo sem credenciais do Azure. Configure as configurações do seu app para apontar para o emulador e use o hub de tarefas padrão.

{
  "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: conexões baseadas em identidade para desenvolvimento local

Estritamente falando, uma identidade gerenciada só está disponível para aplicativos quando executados no Azure. No entanto, você ainda pode configurar um aplicativo em execução local para usar conexões baseadas em identidade, usando suas credenciais de desenvolvedor para se autenticar no seu recurso do agendador. Então, quando é implantado no Azure, o aplicativo usa a configuração de identidade gerenciada em vez disso.

Quando você usa credenciais de desenvolvedor, a conexão tenta obter um token dos seguintes locais, nesta ordem:

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

Se nenhuma dessas opções for bem-sucedida, você receberá um erro indicando que o aplicativo não pode recuperar um token de autenticação. Verifique se você está logado em uma das ferramentas listadas com uma conta que tenha acesso ao seu recurso de agendamento.

Configurar o runtime para usar a identidade do desenvolvedor local

  1. Nas configurações locais, defina o endpoint do escalonador e use Authentication=DefaultAzure para que o app use suas credenciais de desenvolvedor.

    {
      "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. Conceda à sua identidade de desenvolvedor a função Durable Task Data Contributor no recurso do agendador ou no escopo do hub de tarefas específico.

Conexões baseadas em identidade para o aplicativo implantado no Azure

Habilitar um recurso de identidade gerenciada

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

Atribuir funções de acesso à identidade gerenciada

Navegue até o recurso do agendador no portal do Azure e atribua a função Durable Task Data Contributor à sua identidade gerenciada. Para acesso com privilégio mínimo, atribua a função no escopo do hub de tarefas em vez de todo o escalonador. Se você usar uma identidade atribuída pelo usuário, selecione Identidade Gerenciada e depois + Selecione membros.

Adicionar a configuração de identidade gerenciada ao seu aplicativo

Para usar a identidade gerenciada do seu aplicativo, faça algumas alterações nas configurações do aplicativo:

  1. No portal do Azure, no menu de recursos do aplicativo de funções em Settings, selecione Environment variables.

  2. Adicione ou atualize a DTS_CONNECTION_STRING configuração para que o app se conecte ao seu agendador usando a identidade gerenciada do app.

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

    Se você usar uma identidade gerenciada atribuída pelo usuário, inclua o ID do cliente na cadeia de conexã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 configuração TASKHUB_NAME com o mesmo nome do hub de tarefas.

  4. Se seu host de funções precisar do Armazenamento do Azure para operações em nível de host, configure AzureWebJobsStorage separadamente. O backend do escalonador usa a cadeia de conexão DTS em vez de AzureWebJobsStorage para o estado durável.

Verificar sua configuração

Para confirmar se a configuração de identidade gerenciada funciona:

  1. No portal do Azure, navegue até seu aplicativo de funções e ative a orquestração do Durable Functions.
  2. Verifique se a orquestração foi concluída com sucesso consultando o endpoint de status ou verificando a aba Monitor.
  3. Se você vir erros de autenticação, verifique se:
    • A identidade gerenciada tem a função Durable Task Data Contributor no escopo do recurso do agendador ou do hub de tarefas.
    • As configurações de DTS_CONNECTION_STRING e TASKHUB_NAME estão corretas.
    • O app está usando a identidade esperada ao rodar no Azure.

Configuração de desenvolvimento local

Você tem duas opções para desenvolvimento local. Use o Azurite para testes locais rápidos sem credenciais de Azure. Se você precisar testar conexões baseadas em identidade em uma conta de Armazenamento do Azure real, use suas credenciais de desenvolvedor.

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

Ao desenvolver localmente, é recomendável que você use o Azurite, que é o emulador local do Armazenamento do Azure. Configure seu aplicativo para o emulador especificando "AzureWebJobsStorage": "UseDevelopmentStorage=true" em local.settings.json.

Opção 2: conexões baseadas em identidade para desenvolvimento local

Estritamente falando, uma identidade gerenciada só está disponível para aplicativos ao executar em Azure. No entanto, você ainda pode configurar um aplicativo que esteja sendo executado localmente para usar uma conexão baseada em identidade, utilizando suas credenciais de desenvolvedor para autenticar-se nos recursos do Azure. Em seguida, quando implantado em Azure, o aplicativo utilizará sua configuração de identidade gerenciada.

Ao usar credenciais de desenvolvedor, a conexão tenta obter um token dos seguintes locais, nesta ordem:

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

Se nenhuma dessas opções for bem-sucedida, você receberá um erro indicando que o aplicativo não pode recuperar um token de autenticação. Verifique se você está conectado a uma das ferramentas listadas com uma conta que tem acesso à sua conta Armazenamento do Azure.

Configurar o runtime para usar a identidade do desenvolvedor local

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

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

  3. Selecione a guia Controle de Acesso (IAM) e, em seguida, selecione Adicionar atribuição de função.

  4. Atribua cada uma das funções a seguir a si mesmo. Para cada função, selecione "+ Selecionar membros" e pesquise o email que você usa para entrar no Visual Studio, Visual Studio Code ou no CLI do Azure.

    • Colaborador de Dados da Fila de Armazenamento
    • Colaborador de Dados do Storage Blob
    • Colaborador de dados da Tabela de Armazenamento

    Note

    Essas são as mesmas três funções necessárias para sua identidade gerenciada ao implantar em Azure. Consulte Atribuir funções de acesso à identidade gerenciada.

    Captura de tela de atribuir funções de Colaborador de Dados de Armazenamento a um usuário na página de Controle de Acesso do portal Azure.

Conexões baseadas em identidade para o aplicativo implantado no Azure

Habilitar um recurso de identidade gerenciada

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

Atribuir funções de acesso à identidade gerenciada

Navegue até o recurso de Armazenamento do Azure do seu aplicativo no portal do Azure e atribua três funções de RBAC (controle de acesso baseado em função) ao recurso de identidade gerenciada:

  • Colaborador de Dados da Fila de Armazenamento
  • Colaborador de Dados do Storage Blob
  • Colaborador de dados da Tabela de Armazenamento

Para localizar o recurso de identidade, selecione Atribuir acesso à identidade gerenciada e, em seguida, + Selecionar membros

Captura de tela da atribuição de funções de acesso de armazenamento a uma identidade gerenciada no portal do Azure.

Adicionar a configuração de identidade gerenciada ao seu aplicativo

Para usar a identidade gerenciada do seu aplicativo, faça algumas alterações nas configurações do aplicativo:

  1. No portal do Azure, no menu de recursos do aplicativo de funções em Settings, selecione Environment variables.

  2. Na lista de configurações, selecione AzureWebJobsStorage e escolha o ícone Excluir. Screenshot da variável de ambiente AzureWebJobsStorage nas configurações do aplicativo de funções do portal Azure.

  3. Adicione uma configuração para vincular sua conta de armazenamento Azure ao aplicativo.

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

    • Azure cloud: se o aplicativo for executado em global Azure, adicione a configuração AzureWebJobsStorage__accountName que identifica um nome de conta de armazenamento Azure. Valor de exemplo: mystorageaccount123

    • Nuvem não-Azure: Se o aplicativo for executado em uma nuvem fora do Azure, você deve adicionar as três configurações a seguir para fornecer URIs de serviço específicas (ou pontos de extremidade) 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/

    Você pode obter os valores dessas variáveis de URI nas informações da conta de armazenamento, na guia Pontos de extremidade.

    Captura de tela da guia Pontos de extremidade da conta de armazenamento mostrando os URIs dos serviços de blob, fila e tabela.

    Note

    Se você estiver usando Azure Governamental ou qualquer outra nuvem separada da Azure global, deverá usar a opção que fornece URIs de serviço específicas em vez de apenas o nome da conta de armazenamento. Para obter mais informações sobre como usar Armazenamento do Azure com Azure Governamental, consulte o Develop usando a API de Armazenamento em Azure Governamental.

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

    • Se você usar uma identidade atribuída pelo sistema, não faça nenhuma outra alteração.

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

      • AzureWebJobsStorage__credential, insira managedidentity

      • AzureWebJobsStorage__clientId, obtenha esse valor de GUID no recurso de identidade gerenciada

    Captura de tela do recurso de identidade gerenciada atribuído pelo usuário mostrando o valor da ID do cliente.

    Note

    Durable Functions não dá suporte managedIdentityResourceId quando usamos a identidade atribuída pelo usuário. Use clientId em seu lugar.

Verificar sua configuração

Para confirmar se a configuração de identidade gerenciada funciona:

  1. No portal do Azure, navegue até seu aplicativo de funções e inicie a orquestração de funções duráveis (por exemplo, usando uma função de gatilho HTTP).
  2. Verifique se a orquestração foi concluída com sucesso consultando o ponto de extremidade de status ou verificando a guia Monitorar.
  3. Se você vir erros de autenticação, verifique se:
    • Todas as três funções de Colaborador de Dados de Armazenamento são atribuídas à identidade correta.
    • A configuração da cadeia de caracteres de conexão AzureWebJobsStorage foi removida.
    • As AzureWebJobsStorage__accountName configurações (ou URI de serviço) estão corretas.

Próximas Etapas