Segredos e segurança

CibersegurançaBeginner
Pratique Agora

Introdução

No laboratório anterior, nosso assistente robô fez login automaticamente em um depósito. Mas de onde ele obteve a senha?

Na automação real, os workflows geralmente precisam de dados sensíveis, como chaves de API, senhas ou tokens. Você nunca deve inserir esses valores diretamente nos arquivos do repositório.

O GitHub oferece os Secrets como um mecanismo de armazenamento protegido para valores sensíveis usados pelos workflows. Essa é uma prática essencial de segurança em CI/CD, pois os pipelines frequentemente precisam de acesso privilegiado.

Essa é uma das fronteiras mais importantes da segurança da automação. Os pipelines precisam de credenciais, mas essas credenciais devem ser injetadas em tempo de execução a partir de um armazenamento protegido, em vez de serem confirmadas no controle de versão.

Neste laboratório, você vai:

  • Criar uma senha secreta no cofre.
  • Ensinar o robô a recuperá-la.
  • Comprovar que, mesmo se o robô tentar exibir a senha, o GitHub vai ocultá-la.

Pré-requisitos

Continuaremos usando o repositório github-actions-basics.

Criar um segredo

Imagine que nossa aplicação precise se conectar a um banco de dados. Precisamos armazenar a senha do banco de dados com segurança.

Vamos criar um segredo chamado DB_PASSWORD.

  1. Abra o repositório github-actions-basics no GitHub.
  2. Clique na aba Settings.
  3. Na barra lateral esquerda, localize o item de menu Secrets and variables e clique nele para expandi-lo.
  4. Selecione Actions.
  5. Clique no botão verde New repository secret.

New repository secret

Você verá um formulário simples:

  • Name: Digite DB_PASSWORD. (É prática padrão usar apenas letras maiúsculas nos nomes dos segredos.)
  • Secret: Digite SuperSafePassword123!.

Clique em Add secret.

Agora você deverá ver DB_PASSWORD na lista. Observe que não é mais possível ver o valor. Depois que um segredo é salvo, ele fica protegido permanentemente. Você pode atualizá-lo ou excluí-lo, mas nem você nem qualquer outra pessoa poderá visualizá-lo novamente.

Usar o segredo

Agora que a senha está no cofre, vamos escrever um workflow para usá-la.

O padrão importante aqui é a indireção: o workflow referencia um segredo pelo nome, e o GitHub resolve o valor com segurança durante a execução.

No arquivo do workflow, você pode acessar qualquer segredo usando a sintaxe ${{ secrets.YOUR_SECRET_NAME }}.

Navegue até o diretório do projeto.

cd ~/project
git clone https://github.com/your-username/github-actions-basics.git
cd github-actions-basics

Observação: substitua your-username pelo seu nome de usuário real do GitHub.

Crie um novo arquivo de workflow chamado security-test.yml dentro da pasta .github/workflows.

touch .github/workflows/security-test.yml

Abra o arquivo com o nano.

nano .github/workflows/security-test.yml

Adicione o conteúdo a seguir:

name: Security Test

on: [push]

jobs:
  test-secret:
    runs-on: ubuntu-latest
    steps:
      - name: Try to print secret
        env:
          MY_PASSWORD: ${{ secrets.DB_PASSWORD }}
        run: echo "The password is $MY_PASSWORD"

Aqui, estamos fazendo algo interessante. Estamos transferindo o segredo do cofre do GitHub para uma variável de ambiente chamada MY_PASSWORD. Em seguida, tentamos exibi-lo usando echo.

Espere! Exibir uma senha no log não é uma péssima ideia? Sim, é! Mas estamos fazendo isso para demonstrar um recurso de segurança poderoso do GitHub Actions.

Salve o arquivo e saia do nano.

Verificar o mascaramento

Vamos executar este workflow e observar o que acontece quando tentamos revelar um segredo.

Confirme e envie suas alterações.

git add .
git commit -m "Test secret masking"
git push

Acesse Actions no seu repositório do GitHub.

  1. Clique na execução do workflow "Security Test".
  2. Clique no job test-secret.
  3. Expanda a etapa "Try to print secret".

Observe a saída. Você deverá ver algo parecido com isto:

The password is ***

Secret masked

O GitHub Actions reconheceu automaticamente que o valor de $MY_PASSWORD veio de um segredo. Antes de exibir qualquer conteúdo no log, ele procura esse valor sensível e o substitui por ***.

O mascaramento reduz os danos causados pela divulgação acidental em logs, mas ainda é uma prática melhor não exibir segredos. Os recursos de segurança são uma rede de proteção, não uma justificativa para o tratamento descuidado de informações.

Esse recurso de mascaramento protege você. Mesmo que você tente exibir um segredo acidentalmente ou uma ferramenta que esteja usando seja detalhada demais, o GitHub detecta a informação e remove os dados sensíveis dos logs.

Uma observação sobre GITHUB_TOKEN: lembra-se de ${{ secrets.GITHUB_TOKEN }}, que usamos no laboratório anterior? Ele funciona exatamente da mesma maneira. É um segredo que o GitHub cria automaticamente para cada execução, e seu valor também é mascarado nos logs.

Resumo

Neste laboratório, você aprendeu os fundamentos da segurança na automação.

  • Cofre: Você usou o GitHub Secrets para armazenar dados sensíveis, como senhas.
  • Acesso: Você usou ${{ secrets.NAME }} para dar ao seu robô acesso, por meio de um cartão-chave, a esses dados.
  • Mascaramento: Você verificou que o GitHub oculta automaticamente os segredos dos logs (***) para evitar vazamentos acidentais.

Agora você tem um pipeline automatizado e seguro. No laboratório final, abordaremos o objetivo máximo de DevOps: Continuous Deployment. Você aprenderá a fazer seu robô implantar seu código em um servidor ativo!