Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Serviços do Azure DevOps
Observação
Este recurso será lançado esta semana e na próxima. Se você ainda não vir o recurso em seu projeto Azure DevOps Services, verifique novamente em alguns dias.
Uma conexão de serviço Azure DevOps permite que seus pipelines se autentiquem em Azure DevOps sem PATs (Tokens de Acesso Pessoal) usando identidades de carga de trabalho Microsoft Entra. Entidades de serviço e identidades gerenciadas acessam o Azure DevOps por meio da federação de identidade de carga de trabalho, um método de segredo zero que elimina a necessidade de gerenciar e rotacionar segredos.
Benefícios
- Autenticação sem PAT: elimine a necessidade de criar, armazenar e girar Tokens de Acesso Pessoal.
- Privilégio mínimo: use permissões por pipeline em vez de permissões compartilhadas de contas de serviço de build.
- Segurança aprimorada: use credenciais federadas do Entra com rotação automática de token.
- Acesso entre organizações: Acessar recursos do Azure DevOps em diferentes organizações usando uma única conexão de serviço.
- Audit trail: todas as tentativas de autenticação são registradas em logs de auditoria Azure DevOps.
Cenários com suporte
A conexão de serviço Azure DevOps dá suporte a estes cenários:
- Repository resources: confira o código de repositórios em diferentes organizações de Azure DevOps.
- Artifact feeds: Acesso aos repositórios do Azure Artifacts (NuGet, npm, Maven, Python, Cargo, Conda) entre diferentes organizações sem PATs.
- REST API calls: Autentique-se nas APIs REST do Azure DevOps a partir de scripts inline.
- Extension publishing: publicar extensões no Visual Studio Marketplace.
Pré-requisitos
Para criar uma conexão de serviço Azure DevOps, você precisa:
- Uma organização Azure DevOps
- Uma entidade de serviço do Entra ou uma identidade gerenciada a ser usada para autenticação
- Creator ou Administrator função para conexões de serviço no projeto Azure DevOps em que você cria a conexão de serviço. Por padrão, membros do grupo Endpoint Creators têm a função Criador. Para obter mais informações, consulte Definir a segurança da conexão de serviço.
- Se estiver acessando recursos entre organizações, a entidade de serviço ou a identidade gerenciada deverão ser adicionadas como um usuário a cada organização de destino
Etapa 1: criar uma conexão de serviço dentro da mesma organização
Se a entidade de serviço estiver na mesma organização do Azure DevOps que a conexão de serviço:
Adicione a entidade de serviço à sua organização
Em sua organização Azure DevOps, acesse Organization Settings>Users.
Selecione Adicionar usuários.
Insira os detalhes do principal de serviço:
- Nome: o nome da entidade de serviço, da identidade gerenciada ou a identificação do objeto
- Nível de acesso: selecione o nível de acesso apropriado. Use Basic para acesso padrão
Atribua a entidade de serviço ou a identidade gerenciada ao projeto em que você criará a conexão de serviço, por exemplo, adicionando-a ao grupo Leitores
Selecione Adicionar para confirmar.
Atribuir quaisquer permissões adicionais de nível de recurso à entidade de serviço ou identidade gerenciada
Etapa 2: Criar a conexão de serviço
No projeto Azure DevOps, acesse Configurações do Projeto>Conexões de Serviço.
Selecione Nova conexão de serviço.
Selecione Azure DevOps como o tipo de conexão de serviço.
Preencha o formulário:
- Identidade: selecione a entidade de serviço que você adicionou à sua organização
-
Nome da conexão de serviço: insira um nome descritivo para a conexão (por exemplo,
my-azdo-connection) - Descrição (opcional): adicione detalhes sobre a finalidade da conexão
Selecione Salvar para criar a conexão de serviço.
Criar uma conexão de serviço para acesso entre organizações
Para acessar recursos em uma organização do Azure DevOps diferente vinculada ao mesmo locatário do Entra ID:
Siga as etapas em Criar uma conexão de serviço na mesma organização, mas selecione Organização diferente ao criar a conexão de serviço.
Insira o nome da organização de Azure DevOps de destino.
Você também deve adicionar a entidade de serviço como um usuário na organização de destino.
Use a conexão de serviço em seu pipeline
Verificar repositórios de diferentes organizações
pool:
vmImage: 'ubuntu-latest'
resources:
repositories:
- repository: external-repo
type: git
endpoint: my-azdo-connection
name: 'external-project/external-repo'
ref: 'refs/heads/main'
steps:
- checkout: self
- checkout: external-repo
Referenciar um modelo de uma organização diferente
resources:
repositories:
- repository: templates
type: git
endpoint: my-azdo-connection
name: 'external-project/external-repo'
ref: "refs/heads/main"
steps:
- template: azdosc-template.yml@templates
Acessar feeds de artefatos
Use a conexão do serviço com tarefas de autenticação de artefatos:
- task: NuGetAuthenticate@1
inputs:
nuGetServiceConnections: 'my-azdo-connection'
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
projects: '**/*.csproj'
Chamando Azure DevOps de um script
- task: AzureCLI@3
displayName: Secret-less
inputs:
connectionType: 'azureDevOps'
azureDevOpsServiceConnection: 'my-azdo-connection'
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
az rest --method get `
--url "https://status.dev.azure.com/_apis/status/health?api-version=7.1-preview.1" `
--resource 499b84ac-1321-427f-aa17-267ca6975798 `
--query "sort_by(services[?id=='Pipelines'].geographies | [], &name)" `
-o table
az devops configure -l
az devops project list --query "value[].{Name:name, Id:id}" `
-o table
az pipelines pool list --query "[].{Id:id, Name:name}" `
-o table
- task: AzureCLI@3
displayName: Use Entra access token
inputs:
connectionType: 'azureDevOps'
azureDevOpsServiceConnection: 'my-azdo-connection'
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
# Get access token for Azure DevOps
$token = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" `
--query "accessToken" `
--output tsv
# Use token in REST API call
$headers = @{
Authorization = "Bearer $token"
"Content-Type" = "application/json"
}
$body = @{
name = "Test Build"
} | ConvertTo-Json
Invoke-RestMethod -Uri "$(System.CollectionUri)$(System.TeamProject)/_apis/build/definitions?api-version=7.1" `
-Method POST `
-Headers $headers `
-Body $body
A tarefa AzureCLI@3 usa a CLI Azure DevOps, que é pré-instalada em agentes hospedados em Microsoft. Em agentes autohospedados, você precisa do Azure CLI com a extensão azure-devops. Se a azure-devops extensão não estiver instalada, a tarefa AzureCLI@3 a instalará em tempo de execução.
Melhores práticas de segurança
- Permissões mínimas: atribua à entidade de serviço apenas as permissões necessárias para suas tarefas de pipeline específicas.
- Auditoria de acesso: Revise regularmente os registros de auditoria para monitorar o uso das conexões de serviço.
- Uso de escopo: use conexões de serviço separadas para diferentes projetos ou organizações para limitar as permissões compartilhadas.
Solução de problemas
Dica
Para obter melhor segurança, atribua à entidade de serviço apenas as permissões necessárias, examine os logs de auditoria regularmente e use conexões de serviço separadas para diferentes projetos ou organizações.
Falha na criação da conexão de serviço
Causa: A entidade de serviço não foi adicionada à sua organização ou você não possui as permissões necessárias.
Correção:
- Verifique se você adicionou a entidade de serviço como um usuário à sua organização.
- Verifique se você tem as permissões apropriadas para criar conexões de serviço.
- Verifique se a entidade de serviço tem o nível de acesso necessário na organização.
"O pipeline falha ao autenticar"
Causa: O nome da conexão de serviço não corresponde à referência YAML ou a entidade de serviço não tem permissões para os recursos de destino.
Correção:
- Verifique se o nome da conexão de serviço no YAML do pipeline corresponde ao nome que você criou.
- Verifique se o principal de serviço tem permissões adequadas para os recursos que está acessando.
- Verifique os logs de auditoria do Azure DevOps para identificar falhas de autenticação.
- Consulte perguntas frequentes sobre entidades de serviço e identidades gerenciadas.
- Para os códigos de status AADSTS do Microsoft Entra, examine a lista de mensagens de erro.
O acesso entre organizações não está funcionando
Causa: Você não adicionou a entidade de serviço como usuário em ambas as organizações ou errou a ortografia do nome da organização de destino.
Correção:
- Adicione a entidade de serviço como usuário em ambas as organizações.
- Verifique se o nome da organização de destino está escrito corretamente na configuração de conexão de serviço.
- Verifique se o principal de serviço tem as permissões necessárias na organização de destino.
Mensagens de erro comuns
| Mensagem | Significado & mitigação |
|---|---|
| ERRO: TF401444: Entre pelo menos uma vez como 72f988bf-86f1-41af-91ab-2d7cd011db47\72f988bf-86f1-41af-91ab-2d7cd011db47\115c3ab3-943b-4e0c-96ed-1a1763fbaa44 em um navegador da Web para habilitar o acesso ao serviço. | Verifique se você adicionou a entidade de serviço como um usuário à sua organização. |
A Identidade Gerenciada/Entidade de Serviço <sp/msi name> não tem acesso à Organização Azure DevOps <org>. Certifique-se de que a identidade foi adicionada à organização. Consulte https://aka.ms/azdosc#prerequisites |
Adicione a entidade de serviço como um usuário à organização de destino e atribua-a ao projeto necessário. |
| Você não tem permissão para a identidade selecionada. A conexão de serviço é salva como rascunho. Para concluir a configuração, entre em contato com o proprietário da identidade para criar uma credencial federada no portal do Azure usando o Emissor e o Identificador de Assunto abaixo. | O usuário conectado não tem permissões suficientes para criar credenciais federadas. Siga as instruções exibidas para criar credenciais federadas diretamente na identidade. |
| VS800075: O projeto com a ID 'vstfs:///Classification/TeamProject/00000000-0000-00000000-000000000000' não existe ou você não tem permissão para acessá-lo. | A identidade da conexão de serviço não é adicionada ao projeto. Vá para a página > detalhes da conexão de serviço Exibir acesso na organização> atualMembro de> Selecionar um grupo para adicionar a identidade ao grupo, por exemplo.Readers Como alternativa, vá para Configurações da Organização>Usuários> A identidade usada para a conexão de serviço >Gerenciar acesso> selecione os projetos que a identidade precisa acessar. |
Mensagens de erro do Microsoft Entra ID
A tabela a seguir lista os códigos de erro comuns do Microsoft Entra ID e os possíveis problemas relacionados a conexões de serviço de identidade de carga de trabalho.
| Mensagem | Possível problema |
|---|---|
| AADSTS700016: o aplicativo com o identificador "****" não foi encontrado | A identidade usada para a conexão de serviço não existe mais, pode ter sido removida da conexão de serviço ou está configurada incorretamente. Se você configurar a conexão de serviço manualmente com uma identidade pré-criada, verifique se o appID/clientId está configurado corretamente. |
| AADSTS7000215: Um segredo do cliente inválido foi fornecido. | Você está usando uma conexão de serviço que tem um segredo expirado. Converta a conexão de serviço em federação de identidade de carga de trabalho e substitua o segredo expirado por credenciais federadas. |
| AADSTS700024: a declaração do cliente não está dentro do intervalo de tempo válido | Se o erro ocorrer após aproximadamente uma hora, utilize uma conexão de serviço com Federalização de Identidade de Carga de Trabalho e uma Identidade Administrada. Os tokens de Identidade Gerenciada têm uma vida útil de cerca de 24 horas.. Se o erro ocorrer antes de 1 hora, mas após 10 minutos, mova comandos que (implicitamente) solicitam um token de acesso para, por exemplo, acessar Azure armazenamento para o início do script. O token de acesso será armazenado em cache para comandos subsequentes. |
AADSTS70021: Nenhum registro correspondente de identidade federada encontrado para a declaração apresentada. Emissor de declaração: https://app.vstoken.visualstudio.com. |
Nenhuma credencial federada foi criada ou a URL do emissor não está correta. A URL correta do emissor tem este formato: https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Você pode corrigir a URL do emissor editando e salvando uma conexão de serviço. Se o Azure DevOps não criou sua identidade, você deverá atualizar manualmente o emissor. Você pode encontrar o emissor correto na caixa de diálogo de edição da conexão de serviço ou na resposta se usar a API REST. |
AADSTS70021: Nenhum registro correspondente de identidade federada encontrado para a declaração apresentada. Emissor de declaração: https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Assunto da declaração: sc://<org>/<project>/<service-connection>. |
A URL do emissor ou o assunto da federação não correspondem. A organização ou projeto do Azure DevOps foi renomeado ou uma conexão de serviço criada manualmente foi renomeada sem atualizar o sujeito da federação na identidade. |
| AADSTS700211: nenhum registro de identidade federada correspondente foi encontrado para o emissor da declaração apresentada | Nenhuma credencial federada foi criada ou a URL do emissor não é correta. |
| AADSTS700213: não foi encontrado nenhum registo de identidade federada correspondente para o sujeito da asserção apresentada | Não foi criada nenhuma credencial federada ou o assunto não está correto. |
| AADSTS700223 | A federação de identidade de workload está restrita ou desabilitada no tenant Microsoft Entra. Nesse caso, é possível usar uma identidade gerenciada para a federação. Para obter mais informações, consulte Identidade de carga de trabalho com identidade gerenciada. |
| AADSTS70025: O aplicativo cliente não tem credenciais de identidade federada configuradas | Verifique se as credenciais federadas estão configuradas no registro do aplicativo ou na Identidade gerenciada. |
| Microsoft Entra rejeitou o token emitido por Azure DevOps com o código de erro AADSTS700238 | A federação de identidade de cargas de trabalho foi restrita no tenant do Microsoft Entra. O emissor da sua organização (https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) não tem permissão para usar a federação de identidade de carga de trabalho com o tipo de identidade de carga de trabalho (registro de aplicativo e/ou identidade gerenciada) que você está usando. Peça ao administrador do locatário do Microsoft Entra ou à equipe de administração para permitir a federação de identidade de carga de trabalho para sua organização do Azure DevOps. |
| AADSTS70052: a identidade deve ser uma identidade gerenciada, um único aplicativo de locatário ou uma conta de serviço | Registros de aplicativos multilocatários que têm signInAudience: AzureADMultipleOrgs atualmente não são suportados pelo emissor do Microsoft Entra. Use signInAudience: AzureADMyOrg e separe o acesso a múltiplos locatários para utilizar conexões de serviço diferentes para cada locatário. Se você depende de operações ARM que acessam vários locatários em uma única solicitação (por exemplo, emparelhamento entre locatários de Redes Virtuais), você pode entrar em contato com o suporte para que sua organização Azure DevOps use o emissor do Azure DevOps. |
| AADSTS900382: Cliente Confidencial não é suportado na operação entre nuvens | Algumas nuvens soberanas bloqueiam a federação de identidades para cargas de trabalho. |
O erro AADSTS que você vê não está listado acima? Verifique Microsoft Entra códigos de erro de autenticação e autorização.