Gestion des secrets

VérifiéPrudence

Pratiques sécurisées de gestion des secrets pour les pipelines CI/CD utilisant Vault, AWS Secrets Manager et d'autres outils.

Spar Skills Guide Bot
SecuriteIntermédiaire
22/07/2026
Claude CodeCursorWindsurfCopilotCodex
#secrets-management#cicd-security#hashicorp-vault#cloud-secrets#credential-rotation

Recommandé pour

Synthèse automatique

Cette compétence explique comment gérer les secrets dans les pipelines CI/CD avec Vault, AWS Secrets Manager, Azure Key Vault et Google Secret Manager, sans les coder en dur.

Points forts

  • Couvre plusieurs back-ends de secrets courants et compare leurs usages.
  • Fournit des exemples concrets d'intégration avec GitHub Actions et GitLab CI.
  • Met l'accent sur le moindre privilège, la rotation et la journalisation d'audit.
  • Aborde aussi l'usage de secrets cloud avec Terraform.

Limites

  • Les exemples restent introductifs et utilisent parfois un jeton Vault statique, ce qui n'est pas la pratique la plus sûre en production.
  • La rotation automatique est décrite comme objectif mais n'est pas implémentée de bout en bout.
  • Le scan de secrets et la purge de l'historique Git ne sont pas traités en détail.
Quand l'utiliser

À utiliser lorsqu'il faut intégrer la récupération de secrets dans une pipeline CI/CD ou définir un modèle d'accès sécurisé à un coffre-fort de secrets.

Quand l'éviter

À éviter si l'on prévoit de stocker des secrets dans le code source ou si l'accès au back-end de secrets ne peut pas être sécurisé.

Analyse de sécurité

Prudence
Score qualité85/100

The skill provides legitimate secrets management guidance using standard tools like Vault, AWS Secrets Manager, and CI/CD integrations. It does not instruct destructive or exfiltrating actions, but it does include examples that echo secrets to logs and uses powerful commands that require careful handling. The risk is low but not zero if an agent executes the commands in an unsafe manner.

Points d'attention
  • •Includes example code that echoes secrets to logs (GitHub Secrets section), which could lead to accidental secret exposure if copied verbatim, despite GitHub's automatic masking.
  • •Uses powerful CLI tools (vault, aws, terraform) and shell commands for legitimate secrets management, which could be risky if executed without proper environment isolation.
Comment cette analyse est faite

Exemples

Vault in GitHub Actions
Add HashiCorp Vault secret retrieval to my GitHub Actions deploy workflow using hashicorp/vault-action, and remove any hardcoded database credentials.
AWS Secrets Manager in GitLab CI
Review my GitLab CI pipeline and replace hardcoded database passwords and API keys with AWS Secrets Manager retrieval, including masking the retrieved values in logs.
Secrets rotation plan
Design a secrets management and rotation plan for production database passwords and TLS certificates using Vault or AWS Secrets Manager with least privilege and audit logging.

name: secrets-management description: "Secure secrets management practices for CI/CD pipelines using Vault, AWS Secrets Manager, and other tools." risk: unknown source: community date_added: "2026-02-27"

Secrets Management

Secure secrets management practices for CI/CD pipelines using Vault, AWS Secrets Manager, and other tools.

Purpose

Implement secure secrets management in CI/CD pipelines without hardcoding sensitive information.

Use this skill when

  • Store API keys and credentials
  • Manage database passwords
  • Handle TLS certificates
  • Rotate secrets automatically
  • Implement least-privilege access

Do not use this skill when

  • You plan to hardcode secrets in source control
  • You cannot secure access to the secrets backend
  • You only need local development values without sharing

Instructions

  1. Identify secret types, owners, and rotation requirements.
  2. Choose a secrets backend and access model.
  3. Integrate CI/CD or runtime retrieval with least privilege.
  4. Validate rotation and audit logging.

Safety

  • Never commit secrets to source control.
  • Limit access and log secret usage for auditing.

Secrets Management Tools

HashiCorp Vault

  • Centralized secrets management
  • Dynamic secrets generation
  • Secret rotation
  • Audit logging
  • Fine-grained access control

AWS Secrets Manager

  • AWS-native solution
  • Automatic rotation
  • Integration with RDS
  • CloudFormation support

Azure Key Vault

  • Azure-native solution
  • HSM-backed keys
  • Certificate management
  • RBAC integration

Google Secret Manager

  • GCP-native solution
  • Versioning
  • IAM integration

HashiCorp Vault Integration

Setup Vault

# 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 with Vault

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 with Vault

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

Reference: See references/vault-setup.md

AWS Secrets Manager

Store Secret

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

Retrieve in GitHub Actions

- 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 with AWS Secrets Manager

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

Organization/Repository Secrets

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

Environment Secrets

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

Reference: See references/github-secrets.md

GitLab CI/CD Variables

Project Variables

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

Protected and Masked Variables

  • Protected: Only available in protected branches
  • Masked: Hidden in job logs
  • File type: Stored as file

Best Practices

  1. Never commit secrets to Git
  2. Use different secrets per environment
  3. Rotate secrets regularly
  4. Implement least-privilege access
  5. Enable audit logging
  6. Use secret scanning (GitGuardian, TruffleHog)
  7. Mask secrets in logs
  8. Encrypt secrets at rest
  9. Use short-lived tokens when possible
  10. Document secret requirements

Secret Rotation

Automated Rotation with AWS

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}

Manual Rotation Process

  1. Generate new secret
  2. Update secret in secret store
  3. Update applications to use new secret
  4. Verify functionality
  5. Revoke old secret

External Secrets Operator

Kubernetes Integration

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

#!/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

CI/CD Secret Scanning

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

Reference Files

  • references/vault-setup.md - HashiCorp Vault configuration
  • references/github-secrets.md - GitHub Secrets best practices

Related Skills

  • github-actions-templates - For GitHub Actions integration
  • gitlab-ci-patterns - For GitLab CI integration
  • deployment-pipeline-design - For pipeline architecture

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/secrets-management-mrwakcz4/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/secrets-management-mrwakcz4' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/secrets-management-mrwakcz4/download' --output '.skill-downloads/secrets-management-mrwakcz4/SKILL.md.part' && mv '.skill-downloads/secrets-management-mrwakcz4/SKILL.md.part' '.skill-downloads/secrets-management-mrwakcz4/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/secrets-management-mrwakcz4/SKILL.md' && test -s '.skill-downloads/secrets-management-mrwakcz4/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/secrets-management' && cp -R '.skill-downloads/secrets-management-mrwakcz4' '.claude/skills/secrets-management'

Cursor
test -f '.skill-downloads/secrets-management-mrwakcz4/SKILL.md' && test -s '.skill-downloads/secrets-management-mrwakcz4/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/secrets-management' && cp -R '.skill-downloads/secrets-management-mrwakcz4' '.cursor/skills/secrets-management'

Codex
test -f '.skill-downloads/secrets-management-mrwakcz4/SKILL.md' && test -s '.skill-downloads/secrets-management-mrwakcz4/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/secrets-management' && cp -R '.skill-downloads/secrets-management-mrwakcz4' '.agents/skills/secrets-management'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/secrets-management-mrwakcz4'

openskills read 'secrets-management-mrwakcz4'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/secrets-management-mrwakcz4/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires