Como mascarar dados sensíveis na pipeline utilizando Cypress

1. Por que precisamos mascarar dados sensíveis? Segurança: As informações confidenciais (senhas, tokens, etc.) não podem ficar expostas em arquivos versionados ou em logs de execução. Compliance: Dependendo da sua organização, existem regras de compliance que exigem esse cuidado. Boas práticas: Facilita a manutenção do projeto e evita vazamento de dados. 2. Criando Secrets no GitHub Acesse o repositório no GitHub. Vá em Settings > Secrets and variables > Actions. Clique em New repository secret. Crie uma secret para cada valor sensível (por exemplo: USER_NAME/PASSWORD, API_KEY, TOKEN). Essas variáveis não ficam expostas no repositório e podem ser utilizadas apenas dentro dos arquivos de workflow do GitHub Actions. 3. Adicionando secrets no arquivo de workflow No seu arquivo de workflow (.github/workflows/ci.yml), adicione as secrets como variáveis de ambiente para que o Cypress possa acessá-las: name: Cypress Tests on: push jobs: cypress-run: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Node uses: actions/setup-node@v3 with: node-version: v20.17.0 - name: Install dependencies run: npm install npm run build npm run test - name: Run Cypress Tests run: npx cypress run env: USER_NAME: ${{ secrets.USER_NAME }} PASSWORD: ${{ secrets.PASSWORD }} secrets.USER_NAME e secrets.PASSWORD referem-se às secrets que você adicionou nas configurações do repositório. Esses valores não aparecem em texto puro nos logs do GitHub, pois o GitHub automaticamente os mascara. 4. Configurando o Cypress para usar as variáveis de ambiente No arquivo de configuração do Cypress (cypress.config.js ou cypress.config.ts), você pode captar as variáveis de ambiente do sistema e atribuí-las ao objeto env do Cypress: const { defineConfig } = require('cypress'); module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { // Passa as variáveis de ambiente do sistema para o config do Cypress config.env.DB_PASSWORD = process.env.DB_PASSWORD; config.env.API_KEY = process.env.API_KEY; config.env.TOKEN = process.env.TOKEN; return config; }, }, }); 5. Boas práticas para evitar exposição de dados Não versionar o .env: Se você utiliza um arquivo .env para desenvolvimento local, adicione-o ao .gitignore. Os valores de produção ou staging devem ser configurados como secrets no GitHub, não no repositório. Não exibir segredos em logs: evite usar console.log(Cypress.env('DB_PASSWORD')) , pois isso pode vazar em relatórios. - Mascarar manualmente valores sensíveis (se necessário): se ainda assim precisar exibir algo parecido em logs, use o comando de mascaramento do GitHub: - name: Mask sensitive data run: echo "::add-mask::${{ secrets.DB_PASSWORD }}" Assim, se o valor aparecer em algum log, ele será substituído por ***. 6. Informações adicionais ❗❗ As variaváveis que estão dentro do .env devem conter a mesma nomenclatura das variáveis adicionadas no respositório secret no github.

Jan 14, 2025 - 20:06
Como mascarar dados sensíveis na pipeline utilizando Cypress

1. Por que precisamos mascarar dados sensíveis?

  • Segurança: As informações confidenciais (senhas, tokens, etc.) não podem ficar expostas em arquivos versionados ou em logs de execução.
  • Compliance: Dependendo da sua organização, existem regras de compliance que exigem esse cuidado.
  • Boas práticas: Facilita a manutenção do projeto e evita vazamento de dados.

2. Criando Secrets no GitHub

  • Acesse o repositório no GitHub.
  • Vá em Settings > Secrets and variables > Actions.
  • Clique em New repository secret.
  • Crie uma secret para cada valor sensível (por exemplo: USER_NAME/PASSWORD, API_KEY, TOKEN).

Essas variáveis não ficam expostas no repositório e podem ser utilizadas apenas dentro dos arquivos de workflow do GitHub Actions.

3. Adicionando secrets no arquivo de workflow
No seu arquivo de workflow (.github/workflows/ci.yml), adicione as secrets como variáveis de ambiente para que o Cypress possa acessá-las:

name: Cypress Tests
on: push
jobs:
  cypress-run:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Set up Node
        uses: actions/setup-node@v3
        with: 
          node-version: v20.17.0
      - name: Install dependencies
        run:
          npm install
          npm run build
          npm run test
      - name: Run Cypress Tests
        run: npx cypress run
        env:
          USER_NAME: ${{ secrets.USER_NAME }}
          PASSWORD: ${{ secrets.PASSWORD }}
  • secrets.USER_NAME e secrets.PASSWORD referem-se às secrets que você adicionou nas configurações do repositório.
  • Esses valores não aparecem em texto puro nos logs do GitHub, pois o GitHub automaticamente os mascara.

4. Configurando o Cypress para usar as variáveis de ambiente
No arquivo de configuração do Cypress (cypress.config.js ou cypress.config.ts), você pode captar as variáveis de ambiente do sistema e atribuí-las ao objeto env do Cypress:

const { defineConfig } = require('cypress');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      // Passa as variáveis de ambiente do sistema para o config do Cypress
      config.env.DB_PASSWORD = process.env.DB_PASSWORD;
      config.env.API_KEY = process.env.API_KEY;
      config.env.TOKEN = process.env.TOKEN;

      return config;
    },
  },
});

5. Boas práticas para evitar exposição de dados

  • Não versionar o .env: Se você utiliza um arquivo .env para desenvolvimento local, adicione-o ao .gitignore. Os valores de produção ou staging devem ser configurados como secrets no GitHub, não no repositório.
  • Não exibir segredos em logs: evite usar console.log(Cypress.env('DB_PASSWORD')) , pois isso pode vazar em relatórios. - Mascarar manualmente valores sensíveis (se necessário): se ainda assim precisar exibir algo parecido em logs, use o comando de mascaramento do GitHub:
- name: Mask sensitive data
  run: echo "::add-mask::${{ secrets.DB_PASSWORD }}"

Assim, se o valor aparecer em algum log, ele será substituído por ***.

6. Informações adicionais ❗❗

  • As variaváveis que estão dentro do .env devem conter a mesma nomenclatura das variáveis adicionadas no respositório secret no github.