Proteger CI/CD com segredos e variáveis
Este guia abordará como gerenciar informações confidenciais em nível organizacional, compreender a função das variáveis em seus fluxos de trabalho e implementar OpenID Connect (OIDC) para autenticação robusta na nuvem. Este guia foi elaborado para aprimorar a segurança e a eficiência dos processos automatizados.
Neste guia, você vai:
Aprender como gerenciar segredos no nível organizacional de forma segura, fornecendo uma estrutura de segurança unificada e de alto nível para todos os repositórios.
Entender a função de variáveis, como elas diferem de segredos e como implantá-las para obter fluxos de trabalho mais eficientes.
Descobrir como implementar o OpenID Connect para obter uma autenticação robusta e automatizada com os seus provedores de nuvem, reduzindo os riscos de terceiros e despesas administrativas.
Segredos e variáveis organizacionais
Segredos
Quando se trata de aplicar medidas de proteção aos fluxos de trabalho automatizados, os segredos não são negociáveis. Esses assets criptografados contêm informações confidenciais, como credenciais e tokens de API. Vamos analisar como adicionar e gerenciar segredos no nível organizacional.
Quando se trata de aplicar medidas de proteção aos fluxos de trabalho automatizados, os segredos não são negociáveis. Esses assets criptografados contêm informações confidenciais, como credenciais e tokens de API. Vamos analisar como adicionar e gerenciar segredos no nível organizacional.
1. Navegue até as configurações.
Acesse as configurações da organização. Sob a seção de segredos e variáveis, selecione a guia Actions para acessar o painel que exibe todos os segredos no nível de organização.
2. Adicione um segredo.
Clique em New Organization Secret. Ao nomear o segredo, seja específico. Por exemplo, se for um token de API para o Azure, um nome como Azure_API_Token
seria adequado.
3. Insira o valor.
Insira o valor do segredo. Essa é a informação crítica e criptografada para qual o nome do segredo será mapeado. Certifique-se de mantê-la confidencial.
4. Defina o escopo.
É possível tornar esse segredo acessível a todos os repositórios, limitá-lo a repositórios privados ou internos ou escolher repositórios específicos. Como você está configurando-o no nível organizacional, pense estrategicamente sobre o escopo dele.
5. Confirme.
Clique em Add Secret para finalizar a criação.
Variáveis
As variáveis servem a um propósito um pouco diferente dos segredos, mas são igualmente essenciais na automatização de fluxos de trabalho. As variáveis geralmente são usadas para informações menos confidenciais, mas ainda essenciais para os processos. Pense nelas como nomes de usuário públicos ou configurações que vários repositórios na organização podem precisar acessar. Você ainda vai definir o escopo delas da mesma maneira e decidir se elas são acessíveis a todos os repositórios ou a apenas alguns específicos.
Configurações no nível do repositório e do ambiente
A configuração organizacional estabelece a base, mas os controles refinados entram em ação nos níveis de repositório e ambiente. É aqui que você pode inserir requisitos específicos para diferentes projetos ou até mesmo fases em um projeto.
Definição de configurações no nível de repositório
1. Navegue até o repositório.
Vá para o repositório em que você precisa definir ou modificar segredos e variáveis. Dentro do repositório, vá para a guia Settings e encontre a seção de segredos e variáveis.
2. Adicione ou edite.
Assim como no nível organizacional, é possível adicionar novos segredos e variáveis aqui. As mecânicas são as mesmas: nomeie o segredo ou a variável, forneça o valor e defina o escopo correspondente. Vamos clicar na guia Actions, adicionar um segredo chamado MY_GITHUB_SECRET
e atribuir o valor a algo que você queira ocultar (voltaremos a esse assunto em breve).
Demonstração de segredos x variáveis
Agora que adicionamos um segredo no nível de repositório, vamos executar uma demonstração rápida para ver a diferença entre como o GitHub Actions lida com segredos e variáveis de ambiente.
1. Crie um arquivo de fluxo de trabalho.
Se precisar relembrar como criar um arquivo de fluxo de trabalho, consulte o nosso caminho de aprendizado Fundamentos de automação.
Cole a configuração YAML abaixo no novo arquivo de fluxo de trabalho para o fluxo de trabalho de demonstração. Os comentários explicam a função de cada seção.
name: Echo Secrets and Variables
on:
push:
branches:
- main # Trigger this action when changes are pushed to the main branch
jobs:
build:
runs-on: ubuntu-latest
env:
MY_VARIABLE: "This is not a secret" # This is a public environment variable
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Echo environment variable
run: echo "My environment variable is $MY_VARIABLE" # This is your variable that will not be masked
- name: Echo GitHub secret
run: echo "My GitHub secret is ${{ secrets.MY_GITHUB_SECRET }}" # This is the secret you added in a previous step
2. Execute o fluxo de trabalho.
Depois de efetuar push deste arquivo YAML para o repositório, siga estas etapas para visualizar os logs:
Navegue até a guia Actions no repositório GitHub
Selecione a execução de fluxo de trabalho relevante
Clique no trabalho de compilação
Role para baixo para visualizar os logs da variável de ambiente Echo e das etapas de segredo do GitHub Echo
Aqui você verá a diferença na forma como o GitHub Actions processa segredos e variáveis de ambiente
Ufa! Ainda bem que mantemos esse segredo guardado.
Nível de ambiente:
1. Encontre a guia Environment.
Ainda nas configurações do repositório, localize a guia Environments. Selecione o ambiente em que gostaria de armazenar segredos.
2. Adicione segredos.
Clique em New Environment Secret e siga as mesmas etapas de antes para adicionar um segredo. Lembre-se de que segredos específicos do ambiente substituem quaisquer segredos organizacionais ou de repositório com o mesmo nome durante um fluxo de trabalho naquele ambiente específico.
Ao adotar uma abordagem em camadas para as configurações, começando no nível organizacional e aprofundando até as especificidades do repositório e ambiente, você estabelece uma estrutura de segurança altamente personalizável e robusta para os fluxos de trabalho automatizados. Esse controle refinado permite seguir o princípio de menor privilégio, garantindo que você exponha segredos e variáveis apenas onde eles realmente são necessários. Seja na restrição de strings de conexão de banco de dados a um ambiente de produção ou na especificação de um segredo apenas para um único repositório, essa abordagem garante segurança máxima sem sacrificar a funcionalidade.
Segurança otimizada com o OpenID Connect
O OpenID Connect (OIDC) proporciona diversas vantagens para a segurança e eficiência empresarial. Ele elimina com eficácia os riscos associados ao gerenciamento de segredos de terceiros à medida que os tokens de autenticação são gerados e armazenados no ambiente de nuvem escolhido. Esses token expiram automaticamente após um breve período, o que minimiza o risco e a carga administrativa da rotação manual de segredos. O OIDC também oferece suporte a várias nuvens para provedores de nuvem em conformidade com o OIDC, como o Microsoft Azure, a Amazon Web Services (AWS) ou o Google Cloud Platform (GCP). Esse suporte permite um processo de autenticação seguro e consistente independentemente de os fluxos de trabalho estarem em operação. Basicamente, o OIDC eleva a sua postura de segurança e, ao mesmo tempo, simplifica o mecanismo de autenticação em ambientes de nuvem diversos.
Nossas credenciais do GitHub Apps precisavam de permissões no nível da organização para que pudéssemos gerenciar nossos repositórios e códigos em escala. Apesar das amplas permissões, mantivemos um alto nível de segurança usando o HashiCorp Vault e o OpenID Connect. Configuramos nosso sistema para que essas credenciais acessem somente o fluxo de trabalho que executa o terraform apply e somente no branch padrão do nosso repositório de automação. O escopo restrito de acesso garante que, mesmo internamente, esses tokens de alto privilégio sejam protegidos em cenários específicos e rigorosamente controlados.
A seguir: Configurações avançadas de fluxo de trabalho no GitHub Actions
Agora que você pode proteger os pipelines de CI/CD com segredos e variáveis, é hora de ir além. O próximo guia fornecerá as ferramentas necessárias para você otimizar os seus fluxos de trabalho com maestria. Desde o aprendizado sobre gerenciamento de simultaneidade de fluxo de trabalho e o uso de instruções condicionais até o aumento de fluxos de trabalho com scripts internos, este guia foi desenvolvido para acelerar o seu pipeline de desenvolvimento.