DevOps Security: Scenario-Based Questions
14. How do you handle secrets and credentials securely in CI/CD pipelines?
Storing and managing secrets like API keys, database passwords, or tokens securely in CI/CD pipelines is essential to prevent leaks, unauthorized access, or supply chain attacks.
๐ Secure Practices
- Environment Variables: Inject secrets via environment variables managed in the pipeline configuration, not hardcoded in code or scripts.
- Secrets Managers: Use cloud-native tools like AWS Secrets Manager, Azure Key Vault, or HashiCorp Vault to manage dynamic secrets.
- Encrypted Files: Store secrets in encrypted formats (e.g., Ansible Vault, Mozilla SOPS), only decrypted during pipeline execution.
๐งช CI/CD Integration Techniques
- GitHub Actions: Use the encrypted Secrets UI or
secrets.GITHUB_TOKEN
context. - GitLab CI: Store secrets in CI/CD variables with masking enabled.
- Jenkins: Use the credentials plugin with injected secrets via bindings.
- Kubernetes: Inject secrets via sealed-secrets, KMS-integrated secrets, or service mesh.
โ Best Practices
- Rotate secrets regularly and audit usage logs.
- Use short-lived credentials with expiration policies.
- Restrict secret scope to the minimum necessary (least privilege).
- Scan code and configs for leaked secrets (e.g., truffleHog, Gitleaks).
๐ซ Common Mistakes
- Hardcoding secrets in code or uploading them to version control.
- Using plaintext configuration files shared across environments.
- Reusing the same API keys across multiple pipelines or environments.
๐ Real-World Insight
Many data breaches originate from leaked secrets in CI/CD logs, source code, or misconfigured access controls. Modern DevSecOps workflows treat secrets as first-class citizens โ rotating, tracking, and managing them with the same rigor as code.