Compartilhar via


Acessar repositórios com segurança a partir de pipelines

Azure DevOps Services | 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 Requisitos
Azure DevOps – Implemente recomendações para tornar o Azure DevOps seguro e tornar o Azure Pipelines seguro.
– Conhecimento básico do YAML e do Azure Pipelines. Para obter mais informações, consulte Criar seu primeiro pipeline.
Permissões – Para modificar permissões de pipelines: Membro do grupo Administradores do Projeto.
– Para modificar as permissões da organização: membro do grupo Administradores de 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 aprimorar a segurança, use identidades de nível de projeto para a execução de pipelines. Uma identidade no nível do projeto pode acessar recursos somente em seu projeto, minimizando o impacto de qualquer acesso não autorizado por atores mal-intencionados. Para obter mais informações, consulte Identidades de Compilação com Escopo e Escopo de Autorização de Trabalho.

Para configurar um pipeline para usar uma identidade no nível do projeto, habilite Limitar escopo de autorização de trabalho ao projeto atual para pipelines não relacionados a lançamento ou Limitar escopo de autorização de trabalho ao projeto atual para pipelines relacionados a lançamento nas Configurações de Projeto em Pipelines>Configurações.

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 no acesso aos repositórios Git a partir de pipelines.

  1. Inspecione os pipelines para identificar quaisquer repositórios necessários localizados em outros projetos. Se você habilitar Limitar o escopo de autorização de trabalho ao projeto atual para pipelines não relacionados a lançamentos, somente os repositórios do projeto atual podem ser acessados para verificar o código.

  2. Conceda aos projetos de pipeline acesso a quaisquer outros projetos necessários. Para obter mais informações, consulte Configurar permissões para um projeto acessar outro projeto na mesma coleção de projetos.

  3. Conceda identidades de build de pipeline acesso de leitura a cada repositório que eles fazem check-out. Conceda também identidades de pipeline acesso de leitura a todos os repositórios usados como submódulos por repositórios necessários. Para obter mais informações, consulte Configurar permissões para acessar outro repositório na mesma coleção de projetos.

  4. Habilite as seguintes configurações de organização ou projeto para o projeto de pipeline:

    • Limite o escopo de autorização de tarefa ao projeto atual para pipelines não relacionados a lançamento.
    • Limite o escopo de autorização de trabalho ao projeto atual para pipelines de lançamento se o projeto tiver pipelines de lançamento.
    • Proteja o acesso a repositórios em pipelines YAML se o projeto tiver pipelines YAML do Azure Repos.

    Habilite essas configurações definindo os botões para Ligado em Configurações da Organização ou Configurações de ProjetoConfigurações de Pipelines ConfiguraçõesGerais.

    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 um submódulo

Se um repositório usar outro repositório em seu projeto como um submódulo, check-out poderá falhar ao acessar o submódulo, mesmo se você conceder acesso de leitura ao pipeline para ambos os repositórios. Para resolver esse problema, confira explicitamente os repositórios de submódulos antes de verificar os repositórios que os usam. Para obter mais informações, veja Confira submódulos.

Repositórios do GitHub

As considerações de segurança a seguir se aplicam ao acesso de pipeline aos repositórios do GitHub. Para obter mais informações, confira Acesso ao 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 fortalecer a segurança da conexão de serviço:

  • Permitir acesso somente a repositórios que os pipelines precisam para executar.
  • Não selecione Conceder permissão de acesso a todos os pipelines para a conexão de serviço. Autorize a conexão de serviço explicitamente para cada pipeline que a utiliza.

Autenticação em repositórios do GitHub

Para disparar builds e buscar código durante builds, o Azure Pipelines deve ter acesso aos repositórios do GitHub. Esse acesso pode usar o TOKEN de acesso pessoal do GitHub (PAT), o OAuth ou a autenticação de aplicativo do GitHub Azure Pipelines. Para obter mais informações, confira Acesso ao repositórios do GitHub.

O aplicativo GitHub Azure Pipelines é o tipo de autenticação recomendado para pipelines de CI (integração contínua). Builds e atualizações de status do GitHub usam a identidade do Azure Pipelines em vez de usar 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 sua identidade pessoal do GitHub e deve ser autorizada para acesso ao pipeline. O uso de um PAT é desencorajado devido a questões de segurança. Se você precisar usar a autenticação pat, escolha um PAT refinado e limite o escopo para determinados usuários, repositórios e permissões. Para obter mais informações, consulte Gerenciar seus tokens de acesso pessoal.

Observação

Se você instalar o aplicativo GitHub para todos os repositórios em uma organização do GitHub, o token usado pelo aplicativo poderá acessar todos os repositórios públicos e privados na organização. Para obter uma melhor segurança, separe repositórios privados em uma organização separada ou selecione explicitamente quais repositórios o aplicativo pode acessar.

Repositórios do GitHub bifurcados

Os repositórios bifurcados aumentam os riscos de execução de código mal-intencionado ou liberação de informações confidenciais em pipelines. Bifurcações provenientes de fora de sua organização representam riscos específicos.

Para minimizar os riscos de repositórios bifurcados, limitar a construção de pull requests de repositórios bifurcados do GitHub e desabilitar a construção de pull requests de repositórios bifurcados vêm habilitadas por padrão em Configurações de Projeto ou Configurações de Organização em > > Configurações > >.

Para permitir a criação de repositórios do GitHub bifurcados, mas reduzir os riscos, selecione Criar solicitações de pull com segurança de repositórios bifurcados. Essa configuração proíbe disponibilizar segredos ou usar as mesmas permissões que em construções normais, e requer um comentário de PR de um membro da equipe para iniciar o pipeline.

Como alternativa, você pode selecionar Personalizar regras para criar solicitações de pull de repositórios bifurcados para personalizar ainda mais essas configurações.

Captura de tela das configurações do projeto para limitar compilações de repositório fork.

Outras maneiras de aumentar a segurança de forks incluem:

  • Se você usar a validação de solicitação de pull para disparar builds, desmarque a opção Construir solicitações de pull de forks deste repositório na seção Gatilho da definição de pipeline, ou certifique-se de que Tornar segredos disponíveis para builds de forks e Certifique-se de que as builds de forks tenham as mesmas permissões que builds regulares estejam desmarcados. Você também pode selecionar Exigir o comentário de um membro da equipe antes de criar uma solicitação de pull.

  • Use agentes hospedados pela Microsoft para compilar a partir de forks. Os recursos são excluídos imediatamente dos agentes após os builds. Caso utilize agentes auto-hospedados, limpe e atualize os agentes regularmente ou use agentes separados para diferentes ramificações ou branches.

Repositórios do Azure Repos

Proteger o acesso a repositórios em pipelines YAML

A configuração de proteção de acesso a repositórios no projeto ou na 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 está habilitada, os pipelines YAML do Azure Repos sempre solicitam permissão para acessar repositórios na primeira vez em que são executados. Você verá uma solicitação de permissão como a seguinte captura de tela:

Captura de tela da execução do pipeline do SpaceGameWeb pela primeira vez depois de ativar a opção Proteger o acesso a repositórios em pipelines YAML.

Selecione Permitir para conceder permissão aos seus repositórios ou recursos de pipeline. O pipeline agora está funcionando corretamente.

Captura de tela da permissão de acesso a repositórios em um pipeline YAML.

Utilize o comando git para acessar outros repositórios.

Um script de linha de comando como git clone https://github/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/ pode falhar quando Proteger o acesso a repositórios em pipelines YAML está habilitado. Para resolver o problema, confira explicitamente o OtherRepo repositório usando o checkout comando, como checkout: git://FabrikamFiber/OtherRepo.

Exemplo do Azure Repos

O exemplo a seguir ilustra o processo de aprimoramento da segurança para acesso ao Azure Repos em um pipeline.

A https://dev.azure.com/fabrikam-tailspin organização contém os projetos SpaceGameWeb e FabrikamFiber .

  • O projeto SpaceGameWeb contém os repositórios SpaceGameWeb e SpaceGameWebReact .

    Captura de tela da estrutura do repositório SpaceGameWeb.

  • O projeto FabrikamFiber contém os repositórios FabrikamFiber, FabrikamChat e FabrikamFiberLib . O repositório FabrikamFiber usa o repositório FabrikamFiberLib como um submodule.

    Captura de tela da estrutura do repositório FabrikamFiber.

O pipeline spacegameweb no projeto SpaceGameWeb verifica o repositório SpaceGameWebReact no projeto SpaceGameWeb e os repositórios FabrikamFiber e FabrikamChat no projeto FabrikamFiber .

Se o projeto não estiver configurado para usar uma identidade de build baseada em projeto ou para proteger o acesso a repositórios em pipelines YAML, o pipeline do SpaceGameWeb poderá acessar todos os repositórios em todos os projetos da organização e será executado com êxito.

Usar a identidade no nível do projeto

Para melhorar a segurança, use uma identidade de nível de projeto para rodar o pipeline. Ative a opção de limitar o escopo de autorização de trabalho para pipelines que não são de lançamento nas Configurações do Projeto ou nas 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 processo de pipeline falha porque não pode verificar 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 acesso ao projeto FabrikamFiber através do projeto de pipeline e conceda à identidade do pipeline acesso de leitura aos repositórios FabrikamFiber, FabrikamChat e FabrikamFiberLib.

Confira explicitamente o submódulo

O repositório FabrikamFiber usa o repositório FabrikamFiberLib como um submodule. Mesmo que você dê acesso ao pipeline a ambos os repositórios, o check-out do repositório FabrikamFiber ainda falhará ao realizar o submódulo FabrikamFiberLib.

Para corrigir esse problema, confira explicitamente o repositório FabrikamFiberLib antes de conferir o repositório FabrikamFiber . Adicione uma checkout: git://FabrikamFiber/FabrikamFiberLib etapa antes da checkout: FabrikamFiber etapa. O pipeline de exemplo foi concluído com sucesso agora.

Proteger o acesso ao pipeline YAML

Se o pipeline do 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 em que ele 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 dos recursos de compartilhamento de pipelines YAML e clássicos, desabilite a criação de pipelines clássicos ativando os alternadores Desabilitar a criação de pipelines de build clássicos e Desabilitar a criação de pipelines de lançamento clássicos em Configurações de Projeto ou Configurações da Organização. A criação de pipeline de build e lançamento clássico é desabilitada por padrão para novas organizações.

  • Use modelos de pipeline para definir a estrutura do pipeline e ajudar a evitar infiltração de código mal-intencionado. Os modelos também podem realizar tarefas automaticamente, como a verificação de credenciais ou a imposição de verificações em recursos protegidos.

  • Exigir aprovação manual sempre que um pipeline solicitar acesso ao repositório. Para obter mais informações, confira Aprovações e verificações.

  • Use uma verificação de branch protegida para impedir que os pipelines sejam executados automaticamente em branches não autorizados.

  • Defina um repositório a 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 listados na seção do resources pipeline. Para obter mais informações, consulte a proteção do repositório.