Post

Managing Secrets in CI/CD

Introduction

CI/CD pipelines require secrets for package registries, cloud APIs, and deployment tools. Poor handling leads to credential leaks and compromised environments. The goal is to minimize exposure while keeping automation reliable.

Core Principles

  • Least privilege for every pipeline credential.
  • Short-lived tokens instead of long-lived static secrets.
  • No secrets in logs or build artifacts.

Secret Sources

Use dedicated secret managers rather than CI variables when possible. Examples include cloud secret managers and vault systems. The CI runner should request secrets at runtime and inject them into the job environment.

Runtime Injection Example

A Node service should load secrets from environment variables and avoid hard-coded values.

1
2
3
4
5
6
7
const dbPassword = process.env.DB_PASSWORD;

if (!dbPassword) {
  throw new Error("DB_PASSWORD is missing");
}

// In production, avoid logging anything about secret values or their presence.

Rotation and Revocation

Automate secret rotation and ensure pipelines can handle rotation without downtime. When a secret is rotated, update it in the secret manager and invalidate old versions immediately.

Auditing and Detection

Enable secret scanning on repositories and audit access logs for secret managers. Combine that with alerting on anomalous access patterns.

Summary

Managing secrets in CI/CD is about reducing exposure and increasing traceability. Use runtime injection, short-lived tokens, and strict auditing to keep pipelines secure without slowing delivery.

This post is licensed under CC BY 4.0 by the author.