Conectar-se ao Azure usando uma conexão de serviço do Azure Resource Manager
Serviços de DevOps do Azure | Azure DevOps Server 2022 - Azure DevOps Server 2019
Você pode usar uma conexão de serviço do Azure Resource Manager para se conectar aos recursos do Azure por meio da autenticação da entidade de serviço ou por meio de uma identidade de serviço gerenciado do Azure. Se você usar uma conexão de serviço do Gerenciador de Recursos, poderá usar um pipeline para implantar em um recurso do Azure, como um aplicativo do Serviço de Aplicativo do Azure, sem autenticar cada vez.
Você tem várias opções para se conectar ao Azure usando conexões de serviço do Azure Resource Manager:
- Entidade de serviço ou identidade gerenciada com federação de identidade de carga de trabalho
- Principal de serviço com segredo
- Identidade gerenciada atribuída pelo agente
Para saber mais sobre outros tipos de conexões e para obter informações gerais sobre como criar e usar conexões, consulte Conexões de serviço para compilações e versões.
Criar uma conexão de serviço do Azure Resource Manager que usa a federação de identidade de carga de trabalho
A federação de identidades de carga de trabalho usa o OpenID Connect (OIDC) para autenticar com recursos protegidos do Microsoft Entra sem usar segredos.
Recomendamos que você use essa abordagem se todos os seguintes itens forem verdadeiros para o seu cenário:
- Você tem a função Proprietário para sua assinatura do Azure.
- Você não está se conectando ao Azure Stack ou a uma Nuvem do Azure Governamental.
- Todas as tarefas de extensões do Marketplace que você usa são atualizadas para dar suporte à federação de identidades de carga de trabalho.
Criar uma nova conexão de serviço de federação de identidade de carga de trabalho
No projeto do Azure DevOps, vá para Configurações>do projeto Conexões de serviço.
Para obter mais informações, consulte Abrir configurações do projeto.
Selecione Nova conexão de serviço e, em seguida, selecione Azure Resource Manager.
Selecione Federação de identidades de carga de trabalho (automática).
Especifique os parâmetros seguintes:
Parâmetro Description Subscrição Selecione uma assinatura existente do Azure. Se não aparecerem subscrições ou instâncias do Azure, consulte Resolução de problemas de ligações de serviço do Azure Resource Manager. Grupo de Recursos Deixe em branco para permitir que os usuários acessem todos os recursos definidos na assinatura. Para restringir o acesso do usuário aos recursos, insira um nome de grupo de recursos. Os usuários podem acessar somente os recursos definidos para esse grupo de recursos. Nome da conexão de serviço Obrigatório. O nome que você usa para se referir a essa conexão de serviço nas propriedades da tarefa. Não é o nome da sua assinatura do Azure. Depois que a nova conexão de serviço for criada, copie o nome da conexão e cole-o em seu código como o valor de
azureSubscription
.Para implantar em um recurso específico do Azure, a tarefa precisa de mais dados sobre esse recurso. Vá para o recurso no portal do Azure e copie os dados para o seu código. Por exemplo, para implantar um aplicativo Web, copie o nome do aplicativo do Serviço de Aplicativo do Azure e cole-o em seu código como o valor de
WebAppName
.
Converter uma conexão de serviço existente do Azure Resource Manager para usar a federação de identidade de carga de trabalho
Você pode converter rapidamente uma conexão de serviço existente do Azure Resource Manager para usar a federação de identidade de carga de trabalho para autenticação em vez de uma entidade de serviço. Você pode usar a ferramenta de conversão de conexão de serviço no Azure DevOps se sua conexão de serviço atender a estes requisitos:
- O Azure DevOps criou originalmente a conexão de serviço. Se você criar manualmente sua conexão de serviço, não poderá converter a conexão de serviço usando a ferramenta de conversão de conexão de serviço porque o Azure DevOps não tem permissões para modificar suas próprias credenciais.
- Apenas um projeto usa a conexão de serviço. Não é possível converter conexões de serviço entre projetos.
Para converter uma conexão de serviço:
No projeto do Azure DevOps, vá para Configurações>do projeto Conexões de serviço.
Para obter mais informações, consulte Abrir configurações do projeto.
Selecione a conexão de serviço que você deseja converter para usar a identidade da carga de trabalho.
Selecione Converter.
Se você tiver uma credencial de entidade de serviço existente com um segredo expirado, verá uma opção diferente para converter.
Selecione Converter novamente para confirmar que deseja criar uma nova conexão de serviço.
A conversão pode demorar alguns minutos. Se você quiser reverter a conexão, você deve revertê-la dentro de sete dias.
Converter várias conexões de serviço do Azure Resource Manager com um script
Use um script para atualizar várias conexões de serviço de uma só vez para agora usar a federação de identidade de carga de trabalho para autenticação.
Este exemplo de script do PowerShell requer dois parâmetros: organização do Azure DevOps (exemplo: https://dev.azure.com/fabrikam-tailspin
) e projeto do Azure DevOps (exemplo: Space game web agent
). Em seguida, o script recupera as conexões de serviço associadas para seu projeto e organização do Azure DevOps. Você será solicitado a confirmar que deseja converter cada conexão de serviço associada que não usa federação de identidade de carga de trabalho. Se você confirmar, o script usará a API REST do Azure DevOps para atualizar cada conexão de serviço para agora usar a federação de identidades de carga de trabalho.
O script requer o PowerShell 7.3 ou mais recente e a CLI do Azure para ser executado. Salve o script em um arquivo .ps1 e execute-o usando o Powershell 7.
#!/usr/bin/env pwsh
<#
.SYNOPSIS
Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation
.LINK
https://aka.ms/azdo-rm-workload-identity-conversion
.EXAMPLE
./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#>
#Requires -Version 7.3
param (
[parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
[string]
[ValidateNotNullOrEmpty()]
$Project,
[parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
[uri]
[ValidateNotNullOrEmpty()]
$OrganizationUrl
)
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard"
#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798" # application id of Azure DevOps
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')
#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
| Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
Write-Warning "No convertible service connections found"
exit 1
}
foreach ($serviceEndpoint in $serviceEndpoints) {
# Prompt user to confirm conversion
$choices = @(
[System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
[System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
[System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
)
$prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
$decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)
if ($decision -eq 0) {
Write-Host "$($choices[$decision].HelpMessage)"
} elseif ($decision -eq 1) {
Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
continue
} elseif ($decision -ge 2) {
Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
exit
}
# Prepare request body
$serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
$serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
$serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
$serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
$putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
# Convert service connection
az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
| ConvertFrom-Json | Set-Variable updatedServiceEndpoint
$updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
if (!$updatedServiceEndpoint) {
Write-Debug "Empty response"
Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
exit 1
}
Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}
Reverter uma conexão existente do Serviço do Azure Resource Manager que usa um segredo da entidade de serviço
Você pode reverter uma conexão de serviço automática convertida com seu segredo por sete dias. Após sete dias, crie manualmente um novo segredo.
Se você criar e converter manualmente sua conexão de serviço, não poderá reverter a conexão de serviço usando a ferramenta de conversão de conexão de serviço porque o Azure DevOps não tem permissões para modificar suas próprias credenciais.
Para reverter uma conexão de serviço:
No projeto Azure DevOps, vá para Conexões do Serviço de Pipelines>.
Selecione uma conexão de serviço existente para reverter.
Selecione Reverter conversão para o esquema original.
Selecione Reverter novamente para confirmar sua escolha.
Criar uma conexão de serviço do Azure Resource Manager que usa um segredo da entidade de serviço
Recomendamos que você use essa abordagem se todos os seguintes itens forem verdadeiros para o seu cenário:
- Você está conectado como proprietário da organização do Azure Pipelines e da assinatura do Azure.
- Você não precisa limitar ainda mais as permissões para recursos do Azure que os usuários acessam por meio da conexão de serviço.
- Você não está se conectando ao Azure Stack ou a uma Nuvem do Azure Governamental.
- Você não está se conectando do Azure DevOps Server 2019 ou de versões anteriores do Team Foundation Server.
Para criar a conexão de serviço:
No projeto do Azure DevOps, vá para Configurações>do projeto Conexões de serviço.
No Team Foundation Server, selecione o ícone Configurações na barra de menu superior para ir para a página Serviços .
Para obter mais informações, consulte Abrir configurações do projeto.
Selecione Nova conexão de serviço e, em seguida, selecione Azure Resource Manager.
Insira ou selecione os seguintes parâmetros:
Parâmetro Description Nome da Ligação Obrigatório. O nome que você usa para se referir a essa conexão de serviço nas propriedades da tarefa. Não é o nome da sua assinatura do Azure. Nível de âmbito Selecione Subscrição ou Grupo de Gestão. Os grupos de gerenciamento são contêineres que ajudam a gerenciar o acesso, a política e a conformidade em várias assinaturas. Subscrição Se você selecionar Assinatura para o escopo, selecione uma assinatura existente do Azure. Se não aparecerem subscrições ou instâncias do Azure, consulte Resolução de problemas de ligações de serviço do Azure Resource Manager. Grupo de Gestão Se você selecionar Grupo de Gerenciamento para o escopo, selecione um grupo de gerenciamento do Azure existente. Para obter mais informações, consulte Criar grupos de gerenciamento. Grupo de Recursos Deixe em branco para permitir que os usuários acessem todos os recursos definidos na assinatura. Para restringir o acesso do usuário aos recursos, insira um nome de grupo de recursos. Os usuários podem acessar somente os recursos definidos para esse grupo de recursos. Depois que a nova conexão de serviço for criada:
- Se você usar o editor clássico, selecione o nome de conexão atribuído na configuração de assinatura do Azure do seu pipeline.
- Se você usar um arquivo YAML, copie o nome da conexão em seu código como o valor para
azureSubscription
.
Para implantar em um recurso específico do Azure, adicione mais informações sobre o recurso à tarefa:
- Se você usar o editor clássico, selecione os dados a serem adicionados à tarefa. Por exemplo, selecione o nome do Serviço de Aplicativo.
- Se você usar um arquivo YAML, vá para o recurso no portal do Azure. Copie os dados necessários e cole no código da tarefa. Por exemplo, para implantar um aplicativo Web, copie o nome do aplicativo do Serviço de Aplicativo e cole-o como o valor para
WebAppName
a tarefa YAML.
Nota
Quando você segue essa abordagem, o Azure DevOps se conecta à ID do Microsoft Entra e cria um registro de aplicativo com um segredo válido por três meses. Quando a conexão de serviço está prestes a expirar, o Microsoft Entra ID exibe este prompt: Um certificado ou segredo está expirando em breve. Crie um novo. Nesse cenário, você deve atualizar a conexão de serviço.
Para atualizar uma conexão de serviço, no portal do Azure DevOps, edite a conexão e selecione Verificar. Depois de salvar a edição, a conexão de serviço é válida por mais três meses.
Recomendamos que você use a federação de identidades de carga de trabalho em vez de criar um segredo. Se você usar a federação de identidades de carga de trabalho, não precisará alternar segredos e o registro de aplicativo manterá a finalidade pretendida. Para começar a usar a federação de identidades de carga de trabalho, vá para a página de detalhes da conexão de serviço e selecione Converter. A conexão de serviço é convertida para usar a federação de identidade de carga de trabalho em vez de um segredo. Para obter mais informações, consulte Converter uma conexão de serviço existente do Azure Resource Manager para usar a federação de identidades de carga de trabalho.
Para obter mais informações, consulte Solucionar problemas de uma conexão de serviço do Azure Resource Manager.
Se você tiver problemas ao usar essa abordagem (como nenhuma assinatura mostrada na lista suspensa) ou se quiser limitar ainda mais as permissões do usuário, poderá usar uma entidade de serviço ou uma máquina virtual com uma identidade de serviço gerenciado.
Criar uma conexão de serviço do Azure Resource Manager que usa uma entidade de serviço existente
Se você quiser usar um conjunto predefinido de permissões de acesso e ainda não tiver uma entidade de serviço definida para essa finalidade, siga um destes tutoriais para criar uma nova entidade de serviço:
No projeto do Azure DevOps, vá para Configurações>do projeto Conexões de serviço.
No Team Foundation Server, selecione o ícone Configurações na barra de menu superior para ir para a página Serviços .
Para obter mais informações, consulte Abrir configurações do projeto.
Selecione Nova conexão de serviço e, em seguida, selecione Azure Resource Manager.
Selecione a opção Entidade de serviço (manual) e, em seguida, insira os detalhes da entidade de serviço.
Em Nome da conexão, insira um nome para exibição a ser usado para fazer referência a essa conexão de serviço.
Em Ambiente, selecione o nome do ambiente (Azure Cloud, Azure Stack ou Azure Government Cloud).
Se não selecionar a Nuvem do Azure, introduza o URL do ambiente. Para o Azure Stack, a URL do ambiente é algo como
https://management.local.azurestack.external
.Em Nível de escopo, selecione o escopo da conexão:
- Se você selecionar Assinatura, selecione uma assinatura existente do Azure. Se não aparecerem subscrições ou instâncias do Azure, consulte Resolução de problemas de ligações de serviço do Azure Resource Manager.
- Se você selecionar Grupo de Gerenciamento, selecione um grupo de gerenciamento do Azure existente. Para obter mais informações, consulte Criar grupos de gerenciamento.
Na caixa de diálogo Assinatura do Azure, insira as seguintes informações sobre sua entidade de serviço:
- ID da subscrição
- Nome da subscrição
- ID da entidade de serviço
- A chave do cliente da entidade de serviço ou, se você selecionou Certificado, insira o conteúdo das seções de certificado e chave privada do arquivo *.pem .
- ID de Inquilino do
Você pode obter essas informações baixando e executando um script do Azure PowerShell. Quando lhe for pedido, introduza o nome da subscrição, a palavra-passe, a função (opcional) e o tipo de nuvem, como a Nuvem do Azure (predefinida), o Azure Stack ou uma Nuvem do Azure Governamental.
Selecione Verificar conexão para validar as configurações inseridas.
Depois que a nova conexão de serviço for criada:
- Se você usar a conexão de serviço na interface do usuário, selecione o nome da conexão que você atribuiu na configuração de assinatura do Azure do seu pipeline.
- Se você usar a conexão de serviço em um arquivo YAML, copie o nome da conexão e cole-o em seu código como o valor para
azureSubscription
.
Se necessário, modifique a entidade de serviço para expor as permissões apropriadas.
Para obter mais informações sobre a autenticação usando uma entidade de serviço, consulte Usar controle de acesso baseado em função para gerenciar o acesso aos recursos de assinatura do Azure ou a postagem do blog Automatizar uma implantação de grupo de recursos do Azure usando uma entidade de serviço no Visual Studio.
Para obter mais informações, consulte Solucionar problemas de conexões de serviço do Azure Resource Manager.
Criar uma conexão de serviço do Azure Resource Manager com uma VM que usa uma identidade de serviço gerenciado
Nota
Para usar uma identidade de serviço gerenciado para autenticar, você deve usar um agente auto-hospedado em uma máquina virtual (VM) do Azure.
Você pode configurar agentes baseados em VM do Azure para usar uma Identidade de Serviço Gerenciado do Azure na ID do Microsoft Entra. Nesse cenário, você usa a identidade atribuída ao sistema (entidade de serviço) para conceder aos agentes baseados em VM do Azure acesso a qualquer recurso do Azure que ofereça suporte à ID do Microsoft Entra, como uma instância do Cofre da Chave do Azure, em vez de persistir as credenciais no Azure DevOps para a conexão.
No projeto do Azure DevOps, vá para Configurações>do projeto Conexões de serviço.
No Team Foundation Server, selecione o ícone Configurações na barra de menu superior para ir para a página Serviços .
Para obter mais informações, consulte Abrir configurações do projeto.
Selecione Nova conexão de serviço e, em seguida, selecione Azure Resource Manager.
Selecione a opção Autenticação de identidade gerenciada.
Em Nome da conexão, insira um nome para exibição a ser usado quando você se referir a essa conexão de serviço.
Em Ambiente, selecione o nome do ambiente (Azure Cloud, Azure Stack ou Azure Government Cloud).
Na caixa de diálogo conexões, insira os seguintes valores da sua assinatura:
- ID da subscrição
- Nome da subscrição
- ID de Inquilino do
Depois que a nova conexão de serviço for criada:
- Se você usar a conexão de serviço na interface do usuário, selecione o nome da conexão que você atribuiu na configuração de assinatura do Azure do seu pipeline.
- Se você usar a conexão de serviço em um arquivo YAML, copie o nome da conexão em seu código como o valor para
azureSubscription
.
Verifique se a VM (agente) tem as permissões apropriadas.
Por exemplo, se seu código precisar chamar o Gerenciador de Recursos do Azure, atribua à VM a função apropriada usando o controle de acesso baseado em função (RBAC) na ID do Microsoft Entra.
Para obter mais informações, consulte Como posso usar identidades gerenciadas para recursos do Azure? e Usar controle de acesso baseado em função para gerenciar o acesso aos recursos de assinatura do Azure.
Para obter mais informações sobre o processo, consulte Solucionar problemas de conexões de serviço do Azure Resource Manager.
Conectar-se a uma nuvem do Azure Government
Para obter informações sobre como se conectar a uma Nuvem Governamental do Azure, consulte Conectar-se a partir de Pipelines do Azure (Azure Government Cloud).
Ligar ao Azure Stack
Para obter informações sobre como se conectar ao Azure Stack, consulte estes artigos:
- Ligar ao Azure Stack
- Conectar o Azure Stack ao Azure usando uma VPN
- Conectar o Azure Stack ao Azure usando o Azure ExpressRoute
Ajuda e suporte
- Explore as dicas de solução de problemas.
- Obtenha conselhos sobre Stack Overflow.
- Publique suas perguntas, procure respostas ou sugira um recurso na Comunidade de Desenvolvedores do Azure DevOps.
- Obtenha suporte para o Azure DevOps.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários