Compartilhar via


Segredos nos Azure Pipelines

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Este artigo fornece as práticas recomendadas para proteger segredos no Azure Pipelines. Um segredo é qualquer coisa a qual você queira controlar rigidamente o acesso, como chaves de API, senhas, certificados ou chaves de criptografia. O Azure Pipelines não gera valores secretos, mas talvez seja necessário adicionar segredos a pipelines para armazenar dados confidenciais, como chaves de API.

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 as recomendações em Torne o Azure DevOps Seguro e Proteja o Azure Pipelines.
– Conhecimento básico do YAML e do Azure Pipelines. Para mais informações, veja Como 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.

Usar outro método

Os segredos apresentam riscos inerentes à segurança, portanto, é melhor não usá-los. Em vez de gerenciar segredos em variáveis ou expô-los na configuração do pipeline, veja se o pipeline pode usar um desses outros métodos para realizar uma tarefa.

Para obter mais informações, consulte Usar entidades de serviço e identidades gerenciadas.

Usar variáveis de segredo

Nunca armazene valores confidenciais como texto sem formatação em um arquivo azure-pipelines.yml . Você pode usar variáveis secretas para informações privadas, como senhas, IDs e outros dados de identificação que você não deseja expor. Variáveis secretas são criptografadas, para que você possa usá-las em pipelines sem expor seus valores.

  • É melhor gerenciar com segurança variáveis secretas no Azure Key Vault. Você também pode definir variáveis secretas na interface do usuário de definição de pipeline ou em um grupo de variáveis.
  • Não use um comando de registro em log para definir uma variável secreta, pois qualquer pessoa que possa acessar seu pipeline também pode ver o segredo.
  • Nunca ecoe segredos como saída e não passe segredos na linha de comando. Em vez disso, é melhor mapear seus segredos em variáveis de ambiente.
  • Ao criar um segredo, siga as diretrizes de nomenclatura de variáveis e verifique se o nome do segredo não divulga informações confidenciais.

Para saber mais sobre como definir segredos em variáveis, consulte Definir variáveis secretas.

Limitar o acesso a variáveis de segredo

Para limitar o acesso a segredos no Azure DevOps, siga uma destas práticas:

  • Armazenar seus segredos no Azure Key Vault. Usando o Azure Key Vault, você pode usar o controle de acesso baseado em função do Azure para limitar o acesso a um segredo ou grupo de segredos.
  • Defina variáveis secretas na interface do usuário do pipeline. Essas variáveis têm como escopo o pipeline em que estão definidas, portanto, são visíveis apenas para os usuários desse pipeline.
  • Defina segredos em grupos de variáveis. Os grupos de variáveis seguem o modelo de segurança da biblioteca , para que você possa controlar quem pode acessar ou criar itens.

Não escreva segredos em logs

Azure Pipelines tenta remover informações confidenciais dos logs sempre que possível, mas não é infalível. Evite ecoar segredos no console, usá-los em parâmetros de linha de comando ou registrá-los em arquivos.

Tenha cuidado ao usar comandos da CLI do Azure que geram informações confidenciais. Use o formato de saída None e, se precisar recuperar um segredo de uma chamada da CLI do Azure, recupere informações de segurança de uma variável secreta.

Não use dados estruturados como segredos

Evite usar formatos de dados estruturados como JSON, XML ou YAML para encapsular valores secretos, incluindo caracteres de controle, como retorno de carro \r e feed de linha \n. Em vez disso, crie segredos individuais para cada valor sensível. Essa abordagem garante melhor precisão de redação e minimiza o risco de expor dados confidenciais inadvertidamente.

Uso de segredo para auditoria

Para auditar o uso de segredos em seus pipelines, siga estas práticas recomendadas:

  • Examine o código-fonte do repositório que hospeda o pipeline. Para garantir o tratamento correto dos segredos, verifique todas as tarefas que o pipeline emprega. Verifique se os segredos não são enviados inadvertidamente para hosts não intencionais ou impressos explicitamente na saída do log.

  • Depois de testar entradas válidas e inválidas, verifique os logs de execução do seu fluxo de trabalho. Certifique-se de que os segredos sejam redigidos corretamente e não expostos. Às vezes, erros em comandos ou ferramentas podem vazar segredos inadvertidamente em logs de erros. Embora o Azure Pipelines tente limpar segredos dos logs, a revisão manual ainda é essencial.

Auditar e girar segredos

Para auditar e alternar segredos, siga estas práticas recomendadas:

  • Examine periodicamente os segredos registrados em seus pipelines. Confirme se eles ainda são necessários e remova qualquer um que não seja mais necessário. Essa prática ajuda a reduzir a desordem e possíveis riscos à segurança.
  • Garanta a configuração adequada e o tratamento seguro dos segredos de conexão de serviço.
  • Mantenha a duração do PAT (token de acesso pessoal) curta e escolha as permissões mínimas necessárias.
  • Roteie regularmente os segredos para minimizar a quantidade de tempo de modo que um segredo comprometido possa ser usado. Alterar segredos periodicamente aprimora a segurança.

Usar modelos YAML

Em vez de incluir scripts embutidos com parâmetros secretos diretamente no YAML do pipeline, use modelos. Essa abordagem aumenta a segurança abstraindo informações confidenciais do pipeline principal.

Para implementar essa abordagem, crie um arquivo YAML separado para seu script e armazene esse script em um repositório seguro e separado. Em seguida, você pode referenciar o modelo e passar uma variável secreta do Azure Key Vault, um grupo de variáveis ou a interface do usuário do pipeline em seu YAML como um parâmetro. Para obter mais informações sobre como usar modelos, consulte a referência de uso do modelo.

Limitar segredos com políticas de branch e permissões de grupo variável

Para garantir que os segredos sejam acessíveis apenas a uma determinada ramificação do repositório, você pode usar uma combinação de políticas de ramificação, permissões de grupos de variáveis e inserção condicional de trabalhos.

Imponha políticas de validação de build que permitem compilações somente de um determinado branch. Em seguida, use permissões de grupo variável para garantir que somente pipelines autorizados possam acessar os segredos armazenados em seu grupo de variáveis. Por fim, use uma condição em seu pipeline para garantir que apenas um push para o branch designado possa fazer referência ao grupo de variáveis.

jobs:
- job: ExampleJob
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: echo "This runs only for the main branch"
    displayName: 'Conditional Step'
  variables:
  - group: your-variable-group-name