Partilhar via


Utilizar scripts para automatizar o Gestor de Recursos do Azure com ligações de serviço de identidade para carga de trabalho

Serviços de DevOps do Azure

Saiba como usar scripts para criar conexões de serviço do Azure Resource Manager com identidade de carga de trabalho no Azure Pipelines. Os scripts garantem consistência, eficiência e repetibilidade ao configurar conexões de serviço, reduzindo o risco de erro humano. Eles economizam tempo, especialmente ao criar várias conexões ou implantar em ambientes diferentes. Esses scripts também podem ser integrados a um processo de automação para dimensionar e gerenciar melhor grandes implantações.

O uso de scripts como parte de um processo de automação ajuda a impor políticas de segurança e requisitos de conformidade, garantindo que as conexões de serviço usem as permissões e configurações corretas. Ele também serve como documentação para o processo de configuração.

Pré-requisitos

Produto Requisitos
Azure DevOps - Uma organização de DevOps do Azure e um projeto. Crie uma organização ou um projeto , caso ainda não o tenha feito.
Azure Uma assinatura do Azure.
Permissões:
     - Para criar uma atribuição de função no Azure: você deve ter permissões de Administrador de Acesso de Usuário ou Administrador de Controle de Acesso Baseado em Função , ou superior. Essas funções permitem gerenciar o acesso e atribuir funções necessárias para criar identidades. Para obter mais informações, consulte Funções incorporadas do Azure.
Entra Permissões:
     - Para criar um registro de aplicativo no Microsoft Entra: A delegação de registro de aplicativo deve estar habilitada ou você deve ter a função de Desenvolvedor de Aplicativos . Para obter mais informações, veja Funções incorporadas do Microsoft Entra.
Em vez de criar um registro de aplicativo no Entra, você também pode criar uma identidade gerenciada no Azure.

Processo

Restrições

  • Na automação, "creationMode": "Manual" deve ser usado ao criar conexões de serviço que precisam de uma identidade do Microsoft Entra. Privilégios significativos do Microsoft Entra seriam necessários para que o Azure DevOps criasse todos os objetos em nome do chamador; portanto, o Azure DevOps não suporta o uso de "creationMode": "Automatic" para principais que não sejam usuários. Em vez disso, a automação de ponta a ponta deve criar cada objeto (identidade, conexão de serviço, credencial, atribuição de função) individualmente.
  • A federação de identidades de carga de trabalho define uma relação bidirecional entre a identidade e a conexão de serviço. Como resultado, os objetos precisam ser criados em uma determinada ordem e a credencial federada só pode ser criada depois que a conexão de serviço é criada.

Ordem de execução de comando

Esta tabela fornece uma visão geral das principais propriedades trocadas entre os comandos de criação de cada objeto. As dependências no resultado determinam a ordem de execução.

Passo Entrada Resultado
Criar identidade no Microsoft Entra ou Azure tenantId appId, principalId
Criar conexão de serviço no Azure DevOps appId workloadIdentityFederationIssuer, workloadIdentityFederationSubject
Criar credencial federada no Microsoft Entra ou Azure appId, workloadIdentityFederationIssuer, workloadIdentityFederationSubject
Criar atribuição de função no Azure principalId

1. Entrar com a CLI do Azure

Os comandos a seguir usam a CLI do Azure. Inicie sessão no locatário pretendido:

az login --tenant TENANT_ID

Saiba mais em Autenticar no Azure usando a CLI do Azure.

2. Criar identidade

Crie uma identidade usando a identidade gerenciada ou um registro de aplicativo.

Crie uma identidade gerida com az identity create.

az identity create --name MyIdentity --resource-group MyResourceGroup --query '{clientId:clientId,principalId:principalId}'

Exemplo de saída:

{
  "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}

Uma identidade gerenciada cria uma entidade de serviço no Microsoft Entra. O ID do objeto da entidade de serviço também é chamado de principalId. Use o principal de serviço posteriormente para atribuir funções RBAC. O appId é usado para criar a conexão de serviço no Azure DevOps.

Saiba mais em az identity create.

3. Criar uma conexão de serviço

Este exemplo usa a extensão Azure DevOps da CLI do Azure e um arquivo de configuração para criar a conexão de serviço. Isso configura a identidade criada em uma nova conexão de serviço do Azure. O parâmetro de autorização servicePrincipalId é preenchido com o appId da identidade.

Você precisará de um appId para usar como entrada.

O primeiro trecho de código é um arquivo de configuração, ServiceConnectionGeneric.json.

{
  "data": {
    "subscriptionId": "SUBSCRIPTION_ID",
    "subscriptionName": "My Azure Subscription",
    "environment": "AzureCloud",
    "scopeLevel": "Subscription",
    "creationMode": "Manual"
  },
  "name": "MyNewServiceEndpoint",
  "type": "AzureRM",
  "url": "https://management.azure.com/",
  "authorization": {
    "parameters": {
      "tenantid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
      "serviceprincipalid": "00001111-aaaa-2222-bbbb-3333cccc4444"
    },
    "scheme": "WorkloadIdentityFederation"
  },
  "isShared": false,
  "isReady": true,
  "serviceEndpointProjectReferences": [
    {
      "projectReference": {
        "id": "c7e5f0b3-71fa-4429-9fb3-3321963a7c06",
        "name": "TestProject"
      },
      "name": "MyNewServiceEndpoint"
    }
  ]
}
az devops service-endpoint create -service-endpoint-configuration ./ServiceConnectionGeneric.json --query authorization.parameters

az devops service-endpoint create automatiza a criação de uma conexão de serviço no Azure DevOps usando ServiceConnectionGeneric.json. A saída inclui parâmetros de autorização que você usará em etapas futuras.

Exemplo de saída:

{
  "serviceprincipalid": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "tenantid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "workloadIdentityFederationIssuer": "https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0",
  "workloadIdentityFederationIssuerType": "EntraID",
  "workloadIdentityFederationSubject": "<federation-subject>"
}

Para obter mais informações sobre este comando, consulte a secção Ponto de extremidade do serviço CLI do Azure DevOps.

4. Criar uma credencial de identidade federada

Crie uma credencial federada usando a saída de workloadIdentityFederationIssuer e workloadIdentityFederationSubject da etapa Criar uma conexão de serviço.

az identity federated-credential create --name fic-for-sc 
                                        --identity-name MyIdentity  
                                        --resource-group MyResourceGroup 
                                        --issuer "https://login.microsoftonline.com/TENANT_ID/v2.0" 
                                        --subject "<federation-subject>" 
                                        --subscription MSI_SUBSCRIPTION_ID

az identity federated-credential create vincula uma credencial de identidade federada a uma identidade gerida, permitindo que a identidade gerida se autentique com o Microsoft Entra ID usando a alegação de sujeito fornecida.

Sugestão

Adicione um caractere de continuação de linha (Bash: backslash, PowerShell: backquote) no final de quaisquer linhas que não concluam o comando.

A identidade gerida não precisa ser criada na mesma assinatura para a qual é concedida acesso na etapa Criar atribuição de função.

Para obter mais informações sobre esse comando, consulte az identity federated-credential create.

5. Criar atribuição de função

Adicione uma atribuição de função à sua identidade gerida ou ao registo da aplicação com az role assignment create. Para funções disponíveis, consulte Funções internas do Azure. O cessionário da função é o principal de serviço associado ao registo da aplicação ou à identidade gerida. Uma entidade de serviço é identificada pelo seu ID, também chamado de principalId. O principalId está na saída do comando Create identity .

az role assignment create --role Contributor --scope /subscriptions/SUBSCRIPTION_ID --assignee-object-id PRINCIPAL_ID --assignee-principal-type ServicePrincipal

az role assignment create --role Contributor atribui a função de Colaborador a uma entidade de serviço no nível da assinatura. Isso permite que a entidade de serviço gerencie recursos dentro da assinatura especificada.

Para obter mais informações sobre esse comando, consulte az role assignment create.