Configurar a identidade gerenciada para o Agendador de Tarefas Duráveis

O Agendador de Tarefas Duráveis usa a identidade gerenciada para autenticação. Você pode usar uma identidade gerenciada atribuída pelo usuário ou atribuída pelo sistema . As identidades atribuídas pelo usuário são recomendadas porque não estão vinculadas ao ciclo de vida do aplicativo e podem ser reutilizados depois que o aplicativo é desprovisionado.

Este artigo aborda duas maneiras de configurar a identidade gerenciada:

  • Configuração rápida – um único comando da CLI que automatiza a atribuição de função, o anexo de identidade e a configuração da variável de ambiente.
  • Configuração manual – instruções passo a passo para controle total sobre cada etapa de configuração.

Pré-requisitos

Funções RBAC do Agendador de Tarefas Duráveis

Você pode conceder as seguintes funções relacionadas ao Agendador de Tarefas Duráveis a uma identidade:

Função Descrição
Colaborador de Dados de Tarefa Durável Função para todas as operações de acesso a dados. Essa função é um superconjunto de todas as outras funções.
Trabalho de Tarefa Durável Função usada por aplicativos de trabalho para interagir com o Agendador de Tarefas Duráveis. Atribua essa função se seu aplicativo for usado apenas para processar orquestrações, atividades e entidades.
Leitor de dados de tarefa durável Função para ler todos os dados do Agendador de Tarefas Duráveis. Atribua esta função se você precisar apenas listar orquestrações e ler cargas de entidades.

Observação

A maioria dos aplicativos requer a função Colaborador de Dados de Tarefas Duráveis.

Configuração rápida com az durabletask scheduler attach

O az durabletask scheduler attach comando automatiza a atribuição de função, o anexo de identidade e a configuração de variável de ambiente em um único comando.

O exemplo a seguir associa um agendador a um Aplicativo de Função usando uma identidade gerenciada atribuída pelo usuário com a função Colaborador de Dados de Tarefas Duráveis:

az durabletask scheduler attach \
  --resource-group RESOURCE_GROUP_NAME \
  --name SCHEDULER_NAME \
  --task-hub-name TASKHUB_NAME \
  --role-type contributor \
  --target /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.Web/sites/FUNCTION_APP_NAME \
  --identity /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY_NAME

Para um aplicativo de contêiner:

az durabletask scheduler attach \
  --resource-group RESOURCE_GROUP_NAME \
  --name SCHEDULER_NAME \
  --task-hub-name TASKHUB_NAME \
  --role-type contributor \
  --target /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.App/containerApps/CONTAINER_APP_NAME \
  --identity /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY_NAME

Observação

Se você omitir o --identity parâmetro, o comando usará a identidade gerenciada atribuída pelo sistema.

Para mais informações, consulte az durabletask scheduler attach.

Configuração manual

Se você precisar de controle granular sobre cada etapa, siga as instruções manuais abaixo para atribuir RBAC, anexar a identidade e configurar variáveis de ambiente individualmente.

Atribuir RBAC (controle de acesso baseado em função) a um recurso de identidade gerenciada

  1. Criar uma identidade gerenciada atribuída ao usuário

    az identity create -g RESOURCE_GROUP_NAME -n IDENTITY_NAME
    
  2. Definir o atribuídor para o recurso de identidade criado

    assignee=$(az identity show --name IDENTITY_NAME --resource-group RESOURCE_GROUP_NAME --query 'clientId' --output tsv) 
    
  3. Defina o escopo. Use o escopo do hub de tarefas para acesso com privilégios mínimos. Use o escopo do agendador somente se a identidade precisar de acesso a todos os hubs de tarefas em um agendador.

    Escopo do hub de tarefas (recomendado)

    scope="/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.DurableTask/schedulers/SCHEDULER_NAME/taskHubs/TASKHUB_NAME"
    

    Escopo do agendador (todos os hubs de tarefas)

    scope="/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.DurableTask/schedulers/SCHEDULER_NAME"
    
  4. Conceda acesso. Execute o comando a seguir para criar a atribuição de função e conceder acesso.

    az role assignment create \
      --assignee "$assignee" \
      --role "Durable Task Data Contributor" \
      --scope "$scope"
    

    Saída esperada

    O exemplo de saída a seguir mostra uma identidade de desenvolvedor atribuída à função de Colaborador de Dados de Tarefas Duráveis no nível do agendador.

    {
      "condition": null,
      "conditionVersion": null,
      "createdBy": "YOUR_DEVELOPER_CREDENTIAL_ID",
      "createdOn": "2024-12-20T01:36:45.022356+00:00",
      "delegatedManagedIdentityResourceId": null,
      "description": null,
      "id": "/subscriptions/YOUR_SUBSCRIPTION_ID/resourceGroups/YOUR_RESOURCE_GROUP/providers/Microsoft.DurableTask/schedulers/YOUR_DTS_NAME/providers/Microsoft.Authorization/roleAssignments/ROLE_ASSIGNMENT_ID",
      "name": "ROLE_ASSIGNMENT_ID",
      "principalId": "YOUR_DEVELOPER_CREDENTIAL_ID",
      "principalName": "YOUR_EMAIL",
      "principalType": "User",
      "resourceGroup": "YOUR_RESOURCE_GROUP",
      "roleDefinitionId": "/subscriptions/YOUR_SUBSCRIPTION/providers/Microsoft.Authorization/roleDefinitions/ROLE_DEFINITION_ID",
      "roleDefinitionName": "Durable Task Data Contributor",
      "scope": "/subscriptions/YOUR_SUBSCRIPTION/resourceGroups/YOUR_RESOURCE_GROUP/providers/Microsoft.DurableTask/schedulers/YOUR_DTS_NAME",
      "type": "Microsoft.Authorization/roleAssignments",
      "updatedBy": "YOUR_DEVELOPER_CREDENTIAL_ID",
      "updatedOn": "2024-12-20T01:36:45.022356+00:00"
    }
    

Observação

A instrução a seguir mostra uma atribuição de função com escopo para um hub de tarefas específico. Se você precisar de acesso a todos os hubs de tarefas em um agendador, execute a atribuição no nível do agendador.

  1. Criar uma identidade gerenciada atribuída pelo usuário.

  2. Navegue até o recurso Agendador de Tarefas Duráveis no portal.

  3. Selecione um nome de hub de tarefas.

  4. No menu à esquerda, selecione Controle de acesso (IAM) .

  5. Selecione Adicionar para adicionar uma atribuição de função.

    Captura de tela da adição da atribuição de função no painel Controle de Acesso no portal.

  6. Pesquise e selecione Colaborador de Dados da Tarefa Durável. Selecione Próximo.

    Captura de tela da seleção da atribuição de função Colaborador de Dados da Tarefa Durável no portal.

  7. Na guia Membros , para atribuir acesso, selecione Identidade gerenciada.

  8. Para Membros, selecione + Selecionar membros.

  9. No painel Selecionar identidades gerenciadas, expanda o menu suspenso identidade gerenciada e selecione identidade gerenciada atribuída ao usuário.

    Captura de tela da seleção do tipo de identidade gerenciada atribuído pelo usuário que você usará no portal.

  10. Escolha a identidade gerenciada pelo usuário criada anteriormente e selecione Selecionar.

  11. Selecione Examinar + atribuir para concluir a atribuição da função.

Atribuir identidade gerenciada ao seu aplicativo

Agora que a identidade tem o RBAC necessário para acessar o Agendador de Tarefas Duráveis, você precisa atribuí-la ao seu aplicativo.

  1. Obter o ID do recurso da identidade gerenciada.

    resource_id=$(az resource show --resource-group RESOURCE_GROUP_NAME --name IDENTITY_NAME --resource-type Microsoft.ManagedIdentity/userAssignedIdentities --query id --output tsv)
    
  2. Atribua a identidade ao aplicativo.

    az functionapp identity assign --resource-group RESOURCE_GROUP_NAME --name FUNCTION_APP_NAME --identities "$resource_id"
    
  1. No seu aplicativo no portal, selecione Configurações>Identidade.

  2. Selecione a guia Usuário atribuído.

  3. Selecione + Adicionar e escolha a identidade criada na última seção. Selecione Adicionar.

    Captura de tela da adição da identidade gerenciada atribuída pelo usuário ao aplicativo de funções no portal.

Adicionar variáveis de ambiente ao seu aplicativo

Adicione as duas variáveis de ambiente a seguir ao seu aplicativo:

Variável de ambiente Valor Example
DURABLE_TASK_SCHEDULER_CONNECTION_STRING Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID> Endpoint=https://myscheduler.westus2.durabletask.io;Authentication=ManagedIdentity;ClientID=00000000-0000-0000-0000-000000000000
TASKHUB_NAME O nome do hub de tarefas my-task-hub

Observação

Se você usar a identidade atribuída pelo sistema, omita o parâmetro ClientID da string de conexão: "Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity".

  1. Obtenha as informações necessárias para a cadeia de conexão.

    Obter o ponto de extremidade do agendador:

    az durabletask scheduler show --resource-group RESOURCE_GROUP_NAME --name SCHEDULER_NAME --query 'properties.endpoint' --output tsv
    

    Obtenha a ID do cliente da identidade gerenciada:

    az identity show --name IDENTITY_NAME --resource-group RESOURCE_GROUP_NAME --query 'clientId' --output tsv
    
  2. Defina ambas as variáveis de ambiente em seu aplicativo.

    az functionapp config appsettings set \
      --resource-group RESOURCE_GROUP_NAME \
      --name FUNCTION_APP_NAME \
      --settings \
        DURABLE_TASK_SCHEDULER_CONNECTION_STRING="Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID>" \
        TASKHUB_NAME="<TASKHUB_NAME>"
    
  1. Obtenha as informações necessárias para a cadeia de conexão.

    Para obter o ponto de extremidade do seu agendador, acesse a guia Visão geral do recurso do agendador e procure por Ponto de extremidade na seção Conceitos Básicos.

    Para obter a ID do cliente da identidade gerenciada, navegue até a guia Visão geral do recurso de identidade gerenciada e localize a ID do cliente na seção Essenciais.

    Captura de tela da página de visão geral da identidade gerenciada mostrando a localização da ID do cliente no Azure Portal.

  2. Acesse seu aplicativo no portal.

  3. No menu à esquerda, selecioneVariáveis de Ambiente de >.

  4. Adicione uma variável de ambiente nomeada DURABLE_TASK_SCHEDULER_CONNECTION_STRING com o valor Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID>.

  5. Adicione uma variável de ambiente nomeada TASKHUB_NAME com o nome do hub de tarefas.

  6. Selecione Aplicar e confirme para salvar as variáveis.