Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022
Para proteger o código que executa suas operações, as organizações devem controlar cuidadosamente o acesso aos repositórios de código-fonte. Este artigo descreve como os pipelines de compilação e liberação do Azure Pipelines podem acessar repositórios com segurança para minimizar o risco de acesso não autorizado.
Este artigo faz parte de uma série que ajuda você a implementar medidas de segurança para o Azure Pipelines. Para obter mais informações, consulte Secure Azure Pipelines.
Pré-requisitos
| Categoria | Requerimentos |
|---|---|
| Azure DevOps | - Implemente recomendações em Tornar seu Azure DevOps seguro e Secure Azure Pipelines. - Conhecimentos básicos de YAML e Azure Pipelines. Para obter mais informações, consulte Criar seu primeiro pipeline. |
| Permissões | - Para modificar permissões de pipelines: Membro do grupo Administradores de Projeto. - Para modificar as permissões da organização: Membro do grupo Administradores da Coleção de Projetos. |
Identidades baseadas em projeto para pipelines
Um pipeline usa uma identidade para acessar recursos como repositórios, conexões de serviço e grupos de variáveis durante a execução. Os pipelines podem utilizar dois tipos de identidades: nível de coleção ou nível de projeto.
A identidade no nível da coleção é fácil de configurar e usar, mas as identidades no nível do projeto priorizam a segurança. Para aumentar a segurança, use identidades de nível de projeto para executar pipelines. Uma identidade no nível do projeto pode acessar recursos somente dentro de seu projeto, minimizando o impacto de qualquer acesso não autorizado por atores mal-intencionados. Para obter mais informações, consulte Identidades com Escopo de Compilação e Escopo de Autorização de Trabalho.
Para configurar um pipeline para usar uma identidade no nível do projeto, habilite Limitar o escopo de autorização de trabalho ao projeto atual para pipelines de não liberação ou Limitar o escopo de autorização de trabalho ao projeto atual para pipelines de liberação nas Configurações de projeto do projeto de pipeline em Configurações de pipelines>.
Etapas para melhorar a segurança de acesso ao repositório
Um Administrador de Projeto ou Administrador de Coleção de Projetos pode executar as seguintes etapas para melhorar a segurança de acesso aos repositórios Git a partir de pipelines.
Inspecione os fluxos de trabalho para identificar quaisquer repositórios necessários que se encontrem em outros projetos. Ao ativar limitar o escopo de autorização de trabalho ao projeto atual para pipelines que não sejam de lançamento, os pipelines poderão extrair código apenas dos repositórios do projeto atual.
Conceda acesso dos projetos pipeline a quaisquer outros projetos de que necessitem. Para obter mais informações, consulte Configurar permissões para um projeto acessar outro projeto na mesma coleção de projetos.
Conceda às identidades de compilação de pipeline Acesso de Leitura a cada repositório que fazem check-out. Conceda também às identidades de pipeline Acesso de Leitura a quaisquer repositórios usados como submódulos pelos repositórios obrigatórios. Para obter mais informações, consulte Configurar permissões para acessar outro repositório na mesma coleção de projetos.
Habilite as seguintes configurações de organização ou projeto para o projeto de pipeline:
- Limitar o escopo de autorização de trabalho ao projeto atual para pipelines não destinados a lançamento.
- Limite o escopo de autorização de trabalho ao projeto atual para pipelines de lançamento se o seu projeto tiver pipelines de lançamento.
- Proteja o acesso a repositórios em pipelines YAML se seu projeto tiver pipelines YAML do Azure Repos.
Habilite estas configurações ajustando suas alternâncias para Ativado em Configurações da Organização ou Configurações do Projeto>Pipelines>Configurações>Gerais.
Se as configurações estiverem habilitadas nas Configurações da Organização, elas não poderão ser substituídas nas Configurações do Projeto. Se as configurações não estiverem habilitadas nas Configurações da Organização, elas poderão ser habilitadas no nível do projeto.
Usar um repositório como submódulo
Se um repositório utiliza outro repositório no seu projeto como um submódulo, o procedimento de checkout poderá falhar ao tentar obter o submódulo, mesmo que você conceda ao pipeline acesso de leitura a ambos os repositórios. Para resolver esse problema, verifique explicitamente os repositórios de submódulos antes de verificar os repositórios que os usam. Para mais informações, consulte Submódulos.
Repositórios do GitHub
As considerações de segurança a seguir se aplicam ao acesso de pipelines aos repositórios do GitHub. Para obter mais informações, consulte Acesso a repositórios do GitHub.
Conexões de serviço do GitHub
Para usar repositórios do GitHub, o Azure Pipelines requer uma conexão de serviço do GitHub. Para reforçar a segurança da ligação ao serviço:
- Permita acesso somente aos repositórios necessários para a execução dos pipelines.
- Não selecione Conceder permissão de acesso a todos os pipelines para a conexão de serviço. Autorize explicitamente a conexão de serviço para cada pipeline que a usa.
Autenticação em repositórios do GitHub
Para acionar compilações e buscar código durante compilações, o Azure Pipelines deve ter acesso aos repositórios do GitHub. Esse acesso pode usar o token de acesso pessoal (PAT) do GitHub, OAuth ou a autenticação do aplicativo GitHub Azure Pipelines. Para obter mais informações, consulte Acesso a repositórios do GitHub.
O aplicativo GitHub Azure Pipelines é o tipo de autenticação recomendado para pipelines de integração contínua (CI). As compilações e as atualizações de estado do GitHub passam a usar a identidade do Azure Pipelines em vez de utilizarem a sua identidade pessoal do GitHub. Ao instalar o aplicativo, você pode limitar quais repositórios o aplicativo pode acessar para aumentar a segurança.
A autenticação OAuth e PAT usa a sua identidade pessoal do GitHub e deve ser autorizada para aceder ao pipeline. A utilização de uma PAT é desencorajada devido a questões de segurança. Se tiver de utilizar a autenticação PAT, escolha uma PAT refinada e limite o âmbito a determinados utilizadores, repositórios e permissões. Para obter mais informações, consulte Gerenciando seus tokens de acesso pessoais.
Observação
Se você instalar o aplicativo GitHub para todos os repositórios em uma organização GitHub, o token que o aplicativo usa poderá acessar todos os repositórios públicos e privados na organização. Para maior segurança, separe repositórios privados em uma organização separada ou selecione explicitamente quais repositórios o aplicativo pode acessar.
Repositórios bifurcados do GitHub
Repositórios bifurcados aumentam os riscos de execução de código mal-intencionado ou liberação de informações confidenciais em pipelines. As bifurcações originárias de fora da sua organização representam riscos específicos.
Para minimizar os riscos de repositórios bifurcados,
Para permitir a criação a partir de repositórios bifurcados do GitHub, mas reduzir os riscos, selecione Criar solicitações pull com segurança a partir de repositórios bifurcados. Essa configuração não permite disponibilizar segredos ou usar as mesmas permissões das builds normais e requer um comentário de PR de um membro da equipa para acionar o pipeline.
Como alternativa, você pode selecionar Personalizar regras para criar solicitações pull de repositórios bifurcados para personalizar ainda mais essas configurações.
Outras maneiras de aumentar a segurança da bifurcação incluem:
Se você usar a validação de solicitação pull para acionar compilações, desmarque Build pull requests from forks of this repository na seção Trigger da definição de pipeline ou certifique-se de que Tornar segredos disponíveis para compilações de forks e Make fork builds tenham as mesmas permissões que as compilações regulares estão desmarcadas. Você também pode selecionar Exigir o comentário de um membro da equipe antes de criar uma solicitação pull.
Use agentes hospedados pela Microsoft para criar a partir de bifurcações. Os recursos são imediatamente excluídos dos agentes após as compilações. Se você usar agentes auto-hospedados, limpe e atualize os agentes regularmente ou use agentes separados para bifurcações ou ramificações diferentes.
Repositórios do Azure Repos
Proteja o acesso a repositórios em pipelines YAML
A configuração Proteger o acesso a repositórios em pipelines YAML do projeto ou da organização fornece permissões refinadas para pipelines YAML. Essa configuração faz com que um pipeline YAML solicite explicitamente permissão para acessar qualquer repositório, independentemente do projeto. Para obter mais informações, consulte Proteger o acesso a repositórios em pipelines YAML.
Observação
A configuração Proteger o acesso a repositórios em pipelines YAML não se aplica aos repositórios do GitHub.
Quando essa configuração é habilitada, os pipelines YAML do Azure Repos sempre solicitam permissão para acessar repositórios na primeira vez que são executados. Você vê uma solicitação de permissão como a seguinte captura de tela:
Selecione Permitir para conceder permissão aos repositórios ou recursos do pipeline. O gasoduto é agora bem sucedido.
Use a linha de comandos do Git para aceder a outros repositórios.
Um script de linha de comando como git clone https://github/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/ pode falhar quando a opção Proteger acesso a repositórios em pipelines YAML está ativada. Para resolver o problema, verifique explicitamente o OtherRepo repositório usando o checkout comando, como checkout: git://FabrikamFiber/OtherRepo.
Exemplo de Azure Repos
O exemplo a seguir ilustra o processo de melhorar a segurança do acesso ao Azure Repos num pipeline.
A https://dev.azure.com/fabrikam-tailspin organização contém os projetos SpaceGameWeb e FabrikamFibra .
O projeto SpaceGameWeb contém os repositórios SpaceGameWeb e SpaceGameWebReact .
O projeto FabrikamFiber contém os repositórios FabrikamFiber, FabrikamChat e FabrikamFiberLib . O repositório FabrikamFiber usa o repositório FabrikamFiberLib como um submódulo.
O pipeline SpaceGameWeb no projeto SpaceGameWeb verifica o repositório SpaceGameWebReact no projeto SpaceGameWeb e os repositórios FabrikamFiber e FabrikamChat no projeto FabrikamFibra .
Se o projeto não estiver configurado para usar uma identidade de compilação baseada em projeto ou para proteger o acesso a repositórios em pipelines YAML, o pipeline SpaceGameWeb poderá acessar todos os repositórios em todos os projetos da organização e será executado com êxito.
Usar identidade no nível do projeto
Para aumentar a segurança, utilize uma identidade ao nível do projeto para implementar o pipeline. Habilite a alternância Limitar o escopo de autorização de trabalho ao projeto atual para pipelines não liberados em Configurações do Projeto ou Configurações da Organização.
Se essa configuração estiver habilitada, o pipeline só poderá acessar recursos no projeto SpaceGameWeb , que contém apenas os repositórios SpaceGameWeb e SpaceGameWebReact . O pipeline falha porque não pode extrair os repositórios no projeto FabrikamFiber.
Você vê os erros remote: TF401019: The Git repository with name or identifier FabrikamChat does not exist or you do not have permissions for the operation you are attempting e remote: TF401019: The Git repository with name or identifier FabrikamFiber does not exist or you do not have permissions for the operation you are attempting.
Para corrigir os problemas, conceda ao projeto de pipeline acesso ao projeto FabrikamFiber e conceda acesso de Read à identidade do pipeline aos repositórios FabrikamFiber, FabrikamChat e FabrikamFiberLib.
Confira explicitamente o submódulo
O repositório FabrikamFiber usa o repositório FabrikamFiberLib como um submódulo. Mesmo que concedas ao pipeline acesso a ambos os repositórios, o checkout do repositório FabrikamFiber continua a falhar ao verificar o submódulo FabrikamFiberLib.
Para corrigir esse problema, extraia explicitamente o repositório FabrikamFiberLib antes de extrair o repositório FabrikamFiber. Adicione uma checkout: git://FabrikamFiber/FabrikamFiberLib etapa antes da checkout: FabrikamFiber etapa. O pipeline de exemplo agora funciona.
Proteja o acesso ao pipeline YAML
Se o pipeline SpaceGameWeb de exemplo for um pipeline YAML e Proteger o acesso a repositórios em pipelines YAML estiver habilitado, o pipeline exigirá permissão para acessar os repositórios SpaceGameWebReact, FabrikamFiber e FabrikamChat na primeira vez que for executado.
O código a seguir mostra o pipeline YAML completo.
trigger:
- main
pool:
vmImage: ubuntu-latest
resources:
repositories:
- repository: SpaceGameWebReact
name: SpaceGameWeb/SpaceGameWebReact
type: git
- repository: FabrikamFiber
name: FabrikamFiber/FabrikamFiber
type: git
- repository: FabrikamChat
name: FabrikamFiber/FabrikamChat
type: git
steps:
- script: echo "Building SpaceGameWeb"
- checkout: SpaceGameWebReact
- checkout: FabrikamChat
condition: always()
- checkout: git://FabrikamFiber/FabrikamFiberLib
- checkout: FabrikamFiber
submodules: true
condition: always()
- script: |
cd FabrikamFiber
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" submodule update --recursive --remote
- script: cat $(Build.Repository.LocalPath)/FabrikamFiber/FabrikamFiberLib/README.md
Mais medidas de segurança do repositório
Para reduzir os riscos de segurança do compartilhamento de recursos de pipelines YAML e Classic, desative a criação de pipelines clássicos ativando as alternâncias Desabilitar a criação de pipelines de compilação clássicos e Desabilitar a criação de pipelines de versão clássicos em Configurações do Projeto ou Configurações da Organização. A criação clássica de pipeline de compilação e liberação é desabilitada por padrão para novas organizações.
Use modelos de pipeline para definir a estrutura do pipeline e ajudar a prevenir a infiltração de códigos maliciosos. Os modelos também podem executar automaticamente tarefas como a verificação de credenciais ou a imposição de verificações em recursos protegidos.
Exigir aprovação manual sempre que um pipeline acessar o repositório. Para obter mais informações, consulte Aprovações e verificações.
Use uma verificação de ramificação protegida para impedir que os pipelines sejam executados automaticamente em ramificações não autorizadas.
Defina um repositório para ser usado somente em pipelines YAML especificados. Para obter mais informações, consulte Adicionar permissões de pipeline a um recurso de repositório.
Limite o escopo do token de acesso do Azure Pipelines fornecendo o token somente para repositórios
resourceslistados na seção do pipeline. Para obter mais informações, consulte Proteção do repositório.