GitHub Actions: Orquestrador DevOps Seguro Além de CI/CD

 



Neste artigo, serão abordados os seguintes tópicos:

  • Um snippet YAML para varreduras de CodeQL e detecção de tokens.

  • As melhores práticas para que o profissional se torne um mestre em DevOps seguro.



  • Geração de SBOM: Criar Software Bills of Materials para rastrear dependências.

  • Gates de Conformidade: Aplicar políticas como varreduras CodeQL antes dos deploys.

  • Hub de Integração: Conectar-se com ferramentas como Dependabot, Snyk e Trivy.




  • Um cluster AWS EKS.

  • kubectl e aws CLI instalados.

  • Um webhook do Slack para alertas.



Serão construídos três workflows:

  1. Geração de SBOM: Gerar um SBOM usando Syft.

  2. Detecção de Segredos: Escanear tokens vazados com Trivy.

Salvar este como .github/workflows/secure-pipeline.yml:

name: Secure DevOps Pipeline
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
jobs:
  generate-sbom:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Generate SBOM with Syft
        uses: anchore/sbom-action@v0
        with:
          format: cyclonedx-json
          output-file: sbom.json
      - name: Upload SBOM
        uses: actions/upload-artifact@v3
        with:
          name: sbom
          path: sbom.json
  secrets-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Scan for Secrets with Trivy
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          format: 'table'
          exit-code: '1' # Fail on secrets detection
      - name: Notify Slack on Secrets Found
        if: failure()
        uses: slackapi/slack-github-action@v1
        with:
          slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }}
          channel-id: 'devops-alerts'
          text: 'Leaked secrets detected in ${{ github.repository }}! Check Trivy scan results.'
  codeql-scan:
    runs-on: ubuntu-latest
    permissions:
      security-events: write
    steps:
      - uses: actions/checkout@v3
      - name: Initialize CodeQL
        uses: github/codeql-action/init@v2
        with:
          languages: javascript
      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@v2
      - name: Notify Slack on Vulnerabilities
        if: failure()
        uses: slackapi/slack-github-action@v1
        with:
          slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }}
          channel-id: 'devops-alerts'
          text: 'CodeQL vulnerabilities found in ${{ github.repository }}! Review SARIF report.'
  deploy:
    needs: [generate-sbom, secrets-scan, codeql-scan]
    runs-on: ubuntu-latest
    if: success()
    steps:
      - uses: actions/checkout@v3
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      - name: Deploy to EKS
        run: |
          kubectl apply -f k8s/deployment.yaml

Este pipeline:

  • Gera um SBOM com Syft e o carrega como um artefato.

  • Escaneia por segredos com Trivy, falhando se credenciais forem encontradas.

  • Realiza o deploy para EKS apenas se todas as “security gates” forem aprovadas.

  • Envia alertas para o Slack em caso de falhas.

Instruções de Configuração:

  1. Criar um k8s/deployment.yaml para a aplicação de e-commerce.

  2. Realizar um push para a branch main para acionar o pipeline.



  1. Trivy: Escanear por segredos e vulnerabilidades (aquasecurity.github.io/trivy).

  2. CodeQL: Análise estática para segurança de código (codeql.github.com).




  1. Aplicar “Security Gates”: Usar needs em workflows para bloquear deploys em caso de falhas.

  2. Automatizar SBOMs: Gerar SBOMs para cada release para rastrear dependências.

  3. Monitorar Alertas: Integrar Slack ou PagerDuty para notificações em tempo real.

name: Dependabot Auto-Update
on:
  schedule:
    - cron: '0 0 * * *'
jobs:
  dependabot:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Dependabot
        uses: github/dependabot-action@v3
        with:
          package-ecosystem: npm
          schedule-interval: daily




  1. Configurar o Pipeline: Utilizar o snippet secure-pipeline.yml para adicionar verificações de SBOM, segredos e CodeQL.

  2. Testar os Security Gates: Realizar um push de teste com uma chave API falsa para verificar a detecção do Trivy.

  3. Monitorar com Slack: Configurar alertas para falhas.

  4. Escalar: Adicionar Dependabot ou Snyk para uma cobertura de segurança mais ampla.

  5. Compartilhar as Conquistas: Publicar dicas de orquestração de segurança nos comentários!


Conectar-se e Continuar Construindo!

A Demandei apoia a criação de mais guias práticos como este. É possível apoiar o autor em [ko-fi.com/mohamedelemam]. Cada contribuição incentiva a missão de capacitar engenheiros com soluções reais!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *