Skip to content
Back to skills

Secrets Management

BSecurity

Práticas seguras de gestão de secrets para pipelines de CI/CD usando Vault, AWS Secrets Manager e outras ferramentas.

  • 11 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 8, 2026
devopspythongobashdockerkubernetesawsgcpazureterraformgit

Works with

  • cli
  • api

Security analysis

B75/100
  • criticalExfiltrates credentials via HTTP — exact pattern from Snyk ToxicSkills study
  • criticalSends environment variables or credentials to an external URL

Pro shows the line behind each finding and how to fix it

Scanned September 8, 2026

npx -y skills add artubss/SKILLS-CLAUDE-CODE --skill secrets-management --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Secrets Management?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Secrets Management
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/artubss-secrets-management/badge)](https://www.skillsdirectory.com/skills/artubss-secrets-management)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: secrets-management
description: "Práticas seguras de gestão de secrets para pipelines de CI/CD usando Vault, AWS Secrets Manager e outras ferramentas."
risk: unknown
source: community
date_added: "2026-02-27"
---

# Gestão de Secrets

Práticas seguras de gestão de secrets para pipelines de CI/CD usando Vault, AWS Secrets Manager e outras ferramentas.

## Propósito

Implementar gestão segura de secrets em pipelines de CI/CD sem hardcodear informações sensíveis.

## Use essa skill quando

- Armazenar API keys e credenciais
- Gerenciar senhas de banco de dados
- Lidar com certificados TLS
- Rotacionar secrets automaticamente
- Implementar acesso com menor privilégio

## Não use essa skill quando

- Você planeja hardcodear secrets no controle de fonte
- Você não consegue proteger o acesso ao backend de secrets
- Você só precisa de valores locais de desenvolvimento sem compartilhamento

## Instruções

1. Identifique tipos de secrets, proprietários e requisitos de rotação.
2. Escolha um backend de secrets e modelo de acesso.
3. Integre retrieval de CI/CD ou runtime com menor privilégio.
4. Valide rotação e logging de auditoria.

## Segurança

- Nunca faça commit de secrets no controle de fonte.
- Limite o acesso e registre o uso de secrets para auditoria.

## Ferramentas de Gestão de Secrets

### HashiCorp Vault
- Gestão centralizada de secrets
- Geração dinâmica de secrets
- Rotação de secrets
- Logging de auditoria
- Controle de acesso granular

### AWS Secrets Manager
- Solução nativa da AWS
- Rotação automática
- Integração com RDS
- Suporte a CloudFormation

### Azure Key Vault
- Solução nativa do Azure
- Chaves com suporte a HSM
- Gestão de certificados
- Integração com RBAC

### Google Secret Manager
- Solução nativa do GCP
- Versionamento
- Integração com IAM

## Integração com HashiCorp Vault

### Configurar Vault

```bash
# Start Vault dev server
vault server -dev

# Set environment
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='root'

# Enable secrets engine
vault secrets enable -path=secret kv-v2

# Store secret
vault kv put secret/database/config username=admin password=secret
```

### GitHub Actions com Vault

```yaml
name: Deploy with Vault Secrets

on: [push]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - name: Import Secrets from Vault
      uses: hashicorp/vault-action@v2
      with:
        url: https://vault.example.com:8200
        token: ${{ secrets.VAULT_TOKEN }}
        secrets: |
          secret/data/database username | DB_USERNAME ;
          secret/data/database password | DB_PASSWORD ;
          secret/data/api key | API_KEY

    - name: Use secrets
      run: |
        echo "Connecting to database as $DB_USERNAME"
        # Use $DB_PASSWORD, $API_KEY
```

### GitLab CI com Vault

```yaml
deploy:
  image: vault:latest
  before_script:
    - export VAULT_ADDR=https://vault.example.com:8200
    - export VAULT_TOKEN=$VAULT_TOKEN
    - apk add curl jq
  script:
    - |
      DB_PASSWORD=$(vault kv get -field=password secret/database/config)
      API_KEY=$(vault kv get -field=key secret/api/credentials)
      echo "Deploying with secrets..."
      # Use $DB_PASSWORD, $API_KEY
```

**Referência:** Veja `references/vault-setup.md`

## AWS Secrets Manager

### Armazenar Secret

```bash
aws secretsmanager create-secret \
  --name production/database/password \
  --secret-string "super-secret-password"
```

### Recuperar no GitHub Actions

```yaml
- name: Configure AWS credentials
  uses: aws-actions/configure-aws-credentials@v4
  with:
    aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
    aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    aws-region: us-west-2

- name: Get secret from AWS
  run: |
    SECRET=$(aws secretsmanager get-secret-value \
      --secret-id production/database/password \
      --query SecretString \
      --output text)
    echo "::add-mask::$SECRET"
    echo "DB_PASSWORD=$SECRET" >> $GITHUB_ENV

- name: Use secret
  run: |
    # Use $DB_PASSWORD
    ./deploy.sh
```

### Terraform com AWS Secrets Manager

```hcl
data "aws_secretsmanager_secret_version" "db_password" {
  secret_id = "production/database/password"
}

resource "aws_db_instance" "main" {
  allocated_storage    = 100
  engine              = "postgres"
  instance_class      = "db.t3.large"
  username            = "admin"
  password            = jsondecode(data.aws_secretsmanager_secret_version.db_password.secret_string)["password"]
}
```

## GitHub Secrets

### Secrets de Organização/Repositório

```yaml
- name: Use GitHub secret
  run: |
    echo "API Key: ${{ secrets.API_KEY }}"
    echo "Database URL: ${{ secrets.DATABASE_URL }}"
```

### Secrets de Environment

```yaml
deploy:
  runs-on: ubuntu-latest
  environment: production
  steps:
  - name: Deploy
    run: |
      echo "Deploying with ${{ secrets.PROD_API_KEY }}"
```

**Referência:** Veja `references/github-secrets.md`

## Variáveis de GitLab CI/CD

### Variáveis de Projeto

```yaml
deploy:
  script:
    - echo "Deploying with $API_KEY"
    - echo "Database: $DATABASE_URL"
```

### Variáveis Protegidas e Mascaradas
- Protegidas: Disponíveis apenas em branches protegidas
- Mascaradas: Ocultas nos logs de job
- Tipo arquivo: Armazenadas como arquivo

## Melhores Práticas

1. **Nunca faça commit de secrets** no Git
2. **Use secrets diferentes** por environment
3. **Rotacione secrets regularmente**
4. **Implemente acesso com menor privilégio**
5. **Ative logging de auditoria**
6. **Use secret scanning** (GitGuardian, TruffleHog)
7. **Mascare secrets nos logs**
8. **Criptografe secrets em repouso**
9. **Use tokens de curta duração** quando possível
10. **Documente os requisitos de secrets**

## Rotação de Secrets

### Rotação Automatizada com AWS

```python
import boto3
import json

def lambda_handler(event, context):
    client = boto3.client('secretsmanager')

    # Get current secret
    response = client.get_secret_value(SecretId='my-secret')
    current_secret = json.loads(response['SecretString'])

    # Generate new password
    new_password = generate_strong_password()

    # Update database password
    update_database_password(new_password)

    # Update secret
    client.put_secret_value(
        SecretId='my-secret',
        SecretString=json.dumps({
            'username': current_secret['username'],
            'password': new_password
        })
    )

    return {'statusCode': 200}
```

### Processo de Rotação Manual

1. Gere novo secret
2. Atualize secret no armazenamento de secrets
3. Atualize aplicações para usar novo secret
4. Verifique funcionalidade
5. Revogue secret antigo

## External Secrets Operator

### Integração com Kubernetes

```yaml
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
  name: vault-backend
  namespace: production
spec:
  provider:
    vault:
      server: "https://vault.example.com:8200"
      path: "secret"
      version: "v2"
      auth:
        kubernetes:
          mountPath: "kubernetes"
          role: "production"

---
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: database-credentials
  namespace: production
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: vault-backend
    kind: SecretStore
  target:
    name: database-credentials
    creationPolicy: Owner
  data:
  - secretKey: username
    remoteRef:
      key: database/config
      property: username
  - secretKey: password
    remoteRef:
      key: database/config
      property: password
```

## Secret Scanning

### Pre-commit Hook

```bash
#!/bin/bash
# .git/hooks/pre-commit

# Check for secrets with TruffleHog
docker run --rm -v "$(pwd):/repo" \
  trufflesecurity/trufflehog:latest \
  filesystem --directory=/repo

if [ $? -ne 0 ]; then
  echo "❌ Secret detected! Commit blocked."
  exit 1
fi
```

### Secret Scanning em CI/CD

```yaml
secret-scan:
  stage: security
  image: trufflesecurity/trufflehog:latest
  script:
    - trufflehog filesystem .
  allow_failure: false
```

## Arquivos de Referência

- `references/vault-setup.md` - Configuração do HashiCorp Vault
- `references/github-secrets.md` - Melhores práticas de GitHub Secrets

## Skills Relacionadas

- `github-actions-templates` - Para integração com GitHub Actions
- `gitlab-ci-patterns` - Para integração com GitLab CI
- `deployment-pipeline-design` - Para arquitetura de pipeline

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…