The Secrets Engine provides secure storage for sensitive data such as API keys, passwords, certificates, and other secrets.
The Secrets Engine is a versioned key/value store with:
- Versioning: Keep history of secret changes with rollback capability
- TTL & Expiration: Automatic expiration of temporary secrets
- Metadata: Custom attributes and tags
- Rotation: Manual and automated secret rotation
Secrets are organized in a hierarchical path structure:
secrets/
├── myapp/
│ ├── database
│ ├── api-key
│ └── config/
│ ├── dev
│ └── prod
└── shared/
└── encryption-key
Path rules:
- Use
/as separator - Alphanumeric, hyphens, and underscores allowed
- Case-sensitive
- Maximum depth: 10 levels
Every secret update creates a new version:
{
"path": "myapp/database",
"current_version": 3,
"versions": {
"1": { "created_at": "2025-01-01T00:00:00Z", "deleted": false },
"2": { "created_at": "2025-01-15T00:00:00Z", "deleted": true },
"3": { "created_at": "2025-02-01T00:00:00Z", "deleted": false }
}
}Secrets can have an expiration time:
# Secret expires in 1 hour
egide secrets put myapp/temp-token token=xxx --ttl=1hAfter expiration, the secret returns an error when accessed.
egide secrets put myapp/database \
username=admin \
password=supersecretWith metadata:
egide secrets put myapp/database \
username=admin \
password=supersecret \
--metadata="owner=team-a" \
--metadata="environment=production"# Get current version
egide secrets get myapp/database
# Get specific version
egide secrets get myapp/database --version=2# List all secrets
egide secrets list
# List secrets under a path
egide secrets list myapp/# Soft delete (marks as deleted, can be recovered)
egide secrets delete myapp/database
# Hard delete (permanent, cannot be recovered)
egide secrets delete myapp/database --permanentegide secrets recover myapp/databaseegide secrets history myapp/databaseStandard key-value pairs:
{
"username": "admin",
"password": "supersecret",
"host": "db.example.com"
}Base64-encoded binary data:
egide secrets put myapp/cert --binary @certificate.pemStructured JSON data:
egide secrets put myapp/config --json @config.jsonOrganize secrets by application and environment:
secrets/
├── <app-name>/
│ ├── <env>/
│ │ ├── database
│ │ ├── api-keys
│ │ └── config
│ └── shared/
│ └── encryption-key
└── shared/
└── certificates/
- Manual Rotation: Update secrets via CLI or API
- Scheduled Rotation: Use external automation (cron, CI/CD)
- Dynamic Secrets: Generate on-demand (future feature)
Use policies to restrict access:
# Allow read-only access to myapp secrets
path "secrets/myapp/*" {
capabilities = ["read", "list"]
}
# Allow full access to team-specific secrets
path "secrets/team-a/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}See Secrets API for the complete API reference.
- KMS Engine: Cryptographic key management
- Transit Engine: Encryption as a Service