Partilhar via


Proteger segredos no Azure Pipelines

Serviços de DevOps do Azure | Azure DevOps Server 2022 | Azure DevOps Server 2020

Este artigo fornece práticas recomendadas sobre a proteção de segredos no Azure Pipelines. Um segredo é qualquer coisa que você queira controlar rigorosamente o acesso, como chaves de API, senhas, certificados ou chaves criptográficas.

O Azure Pipelines não gera valores secretos. No entanto, talvez seja necessário adicionar um segredo a um pipeline para armazenar dados confidenciais, como uma chave de API. Para saber mais sobre como definir variáveis secretas, veja Definir variáveis secretas.

Não use segredos se outro método estiver disponível

O melhor método para proteger um segredo é não ter um segredo em primeiro lugar. Verifique se o pipeline pode usar um método diferente do uso de um segredo para executar uma tarefa.

  • Use conexões de serviço:
    • Quando você estiver segmentando o Azure ou outros serviços, use conexões de serviço em vez de gerenciar segredos em variáveis.
    • As conexões de serviço permitem que você se conecte com segurança a serviços externos sem expor informações confidenciais diretamente na configuração do pipeline.
    • Para obter mais informações, consulte Gerenciar conexões de serviço e Conectar-se ao Microsoft Azure com uma conexão de serviço do Azure Resource Manager.
  • Use identidades gerenciadas:

    • Considere usar identidades gerenciadas em vez de lidar diretamente com segredos.
    • As identidades gerenciadas permitem que seus aplicativos e serviços autentiquem a segurança com os serviços do Azure sem exigir credenciais explícitas.
    • Você pode usar identidades gerenciadas para acessar outros serviços do Azure.
  • Tarefa da CLI do Azure:

    • Se você estiver usando a tarefa CLI do Azure, em seu pipeline, considere usar a configuração para acessar os detalhes da addSpnToEnvironment entidade de serviço no script sem passar segredos explicitamente.

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

Usar variáveis secretas

Nunca armazene valores confidenciais como texto sem formatação em um arquivo .yml do Azure Pipelines.

As variáveis secretas podem ser usadas para informações privadas, como senhas, IDs e outros dados de identificação que você não gostaria de expor em um pipeline. Recomendamos que você defina variáveis secretas com o Azure Key Vault. Você também pode definir variáveis secretas na interface do usuário ou em um grupo de variáveis. Não recomendamos o uso de um comando de log para definir uma variável secreta. Quando você define um segredo com um comando de registro, qualquer pessoa que possa acessar seu pipeline também pode ver o segredo.

As variáveis secretas são criptografadas e podem ser usadas em pipelines sem expor seus valores. Embora seus valores não sejam expostos, nunca ecoe segredos como saída e não passe segredos na linha de comando. Em vez disso, sugerimos que você mapeie seus segredos em variáveis de ambiente.

Ao criar um segredo, siga as diretrizes de nomenclatura variável e certifique-se de que seu nome secreto não divulgue informações confidenciais.

Limitar o acesso a variáveis secretas

Para limitar o acesso a segredos no Azure DevOps, siga estas práticas recomendadas:

  • Armazene seus segredos no Cofre da Chave do Azure. Com o Azure Key Vault, você pode usar o modelo de 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 para um pipeline. As variáveis secretas definidas na interface do usuário de configurações de pipeline para um pipeline têm como escopo o pipeline onde estão definidas. Assim, você pode ter segredos que só são visíveis para os usuários com acesso a esse pipeline.
  • Defina segredos em um grupo de variáveis. Os grupos de variáveis seguem o modelo de segurança da biblioteca. Você pode controlar quem pode definir novos itens em uma biblioteca e quem pode usar um item existente.

Não escreva segredos em logs

O Azure Pipelines tenta limpar segredos de logs sempre que possível, mas não é infalível. Evite ecoar segredos para o 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 None output format, e se você precisar recuperar um segredo de uma chamada da CLI do Azure, Use none output format and retrieve security information to a secret variable.

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 \rde carro e alimentação de linha.\n Em vez disso, crie segredos individuais para cada valor sensível. Essa abordagem garante uma melhor precisão de redação e minimiza o risco de expor dados confidenciais inadvertidamente.

Auditar como os segredos são tratados

Para auditar como os segredos são usados no Azure Pipelines, siga estas práticas recomendadas:

  • Revise o código-fonte: examine o código-fonte do repositório que hospeda o pipeline. Para garantir que os segredos sejam tratados corretamente, verifique todas as tarefas usadas no pipeline. Por exemplo, verifique se os segredos não são enviados inadvertidamente para hosts não intencionais ou explicitamente impressos na saída de log.
  • Inspecionar logs de execução: depois de testar entradas válidas e inválidas, exiba os logs de execução para seu pipeline. Certifique-se de que os segredos são devidamente editados e não expostos. Às vezes, erros em comandos ou ferramentas podem inadvertidamente vazar segredos em logs de erros. Embora o Azure Pipelines tente limpar segredos de logs, a revisão manual ainda é essencial.

Auditar e girar segredos

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

  • Revise segredos registrados: avalie periodicamente os segredos registrados em seus pipelines. Confirme se eles ainda são necessários e remova os que não são mais necessários, o que ajuda a reduzir a desordem e os riscos potenciais à segurança.
  • Girar segredos: alterne regularmente os segredos para minimizar a janela de tempo durante a qual um segredo comprometido pode ser explorado. Ao alterar segredos periodicamente, você aumenta a segurança.
  • Escolha o método de autenticação correto
    • Tipos de segredos utilizados:
      • Tokens de acesso pessoal (PATs): esses tokens são usados para autenticação. Siga as práticas recomendadas de segurança ao escolher o método de autenticação correto. Você pode gerenciar PATs usando a API REST.
      • Variáveis secretas: use variáveis secretas para armazenar com segurança informações confidenciais, como chaves de API, senhas ou outras credenciais dentro do seu pipeline.
      • Segredos do Azure Key Vault: use o Azure Key Vault para armazenar e gerenciar segredos com segurança.
      • Conexões de serviço: essas conexões de serviço permitem que seu pipeline se conecte a serviços externos (por exemplo, Azure, GitHub, Docker Hub). Garanta a configuração adequada e o tratamento seguro dos segredos de conexão de serviço.

Usar modelos YAML

Em vez de incluir scripts embutidos com parâmetros secretos diretamente no seu pipeline YAML, 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, em seguida, armazene esse script em um repositório separado e seguro. Você pode então referenciar o modelo e passar uma variável secreta em seu YAML como um parâmetro. A variável segura deve vir do Azure Key Vault, de um grupo de variáveis ou da interface do usuário do pipeline. Para obter mais informações sobre como usar modelos, consulte a Referência de uso de modelo.

Limitar segredos com políticas de ramificação e permissões de grupo variável

Para certificar-se de que os main segredos estão vinculados à ramificação e não acessíveis a ramificações aleatórias, você pode usar uma combinação de permissões de grupo variável, inserção de trabalho condicional e políticas de ramificação.

Com as políticas de ramificação, você pode impor políticas de validação de compilação que só permitem compilações da ramificação principal. Em seguida, você pode usar permissões de grupo variável para garantir que apenas pipelines autorizados tenham acesso aos segredos armazenados em seu grupo de variáveis. Por último, você pode usar uma condição em seu pipeline para garantir que o grupo de variáveis só possa ser referenciado por um push para a main ramificação.

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

Próximos passos