Stores Configuration
The stores section in atmos.yaml configures external key-value stores that can be used to share data between components using the !store YAML function and hooks. Any store can also be marked sensitive with secret: true to make it a secret backend — a great place to keep API keys, tokens, and passwords — resolved with the !secret function and the atmos secret CLI.
Configuration
Store Name Convention
Store names follow the pattern <environment>/<type> by convention:
prod/ssm- Production SSM Parameter Storedev/secrets- Development Secrets Managershared/config- Shared configuration store
You can reference stores in stack configuration using the !store function:
vars:
database_password: !store prod/secrets::database/password
api_key: !store prod/ssm::/app/api-key
Supported Store Kinds
Use kind for new store definitions. The legacy type field is still accepted for
backward compatibility; when both are set, kind wins.
aws/ssm(legacy type:aws-ssm-parameter-store)- AWS Systems Manager Parameter Store. Stores and retrieves parameters from SSM.
aws/asm(legacy type:aws-secrets-manager)- AWS Secrets Manager. Stores and retrieves string or JSON secret values.
azure/keyvault(legacy type:azure-key-vault)- Azure Key Vault. Stores and retrieves secrets from Azure.
gcp/secretmanager(legacy types:google-secret-manager,google/secretmanager,gsm)- Google Cloud Secret Manager. Stores and retrieves secrets from GCP.
redis- Redis key-value store. Useful for caching and temporary data.
artifactory- JFrog Artifactory. Stores and retrieves data as JSON files. Use a Generic repository type.
github-actions(kind:github/actions)- GitHub Actions secrets. Writes, lists, and deletes secrets through the GitHub API; secret values can only be read back inside a GitHub Actions runner (the API never returns them). Best suited as a distribution target so workflows consume secrets via the native
secretscontext.
Secret Stores
Stores are an excellent place to keep secrets. Mark any store sensitive by setting secret: true, and it becomes a secret backend:
A secret: true store:
- Writes the sensitive at-rest variant of its backend (e.g. SSM
SecureString, Key Vault secret). - Masks values automatically in command output, so secrets don't leak into logs the way a plain
!storevalue can. - Is resolved only with
!secretand theatmos secretCLI — using!store,!store.get, oratmos.Storeagainst asecret: truestore is an error, which keeps the declarative secret registry mandatory by construction.
Some backends are secret managers by nature (1Password, the OS keychain, GitHub Actions) and default to secret: true even when you omit it. For declaring, provisioning, and reading secrets, see Secrets Configuration.
secret: true is rejected at startup for backends that store values in plaintext — currently Redis (an in-memory cache) and Artifactory (an artifact repository). Marking one of these sensitive would give a false sense of security, so Atmos fails fast with a clear error rather than writing secrets in the clear. Use an encrypted backend instead: AWS SSM (SecureString), AWS Secrets Manager, Azure Key Vault, Google Secret Manager, HashiCorp Vault, 1Password, the OS keychain, or GitHub Actions.
Store Type Configuration
AWS SSM Parameter Store
SSM parameter names use hierarchical paths, so a configured prefix must start with / (for example, /myapp).
When a store is marked secret: true, string values are written to SSM verbatim (no JSON quoting), so AWS-native consumers (ECS, Lambda, the aws CLI) read the exact secret bytes. Structured values (maps and lists) and empty strings are still stored JSON-encoded — SSM rejects zero-length values. On read, Atmos decodes JSON objects, arrays, and quoted strings (the pre-existing storage format) and returns all other values byte-exact. One consequence: a string secret whose entire value is itself a JSON document (or is wrapped in literal double quotes) is indistinguishable from the encoded form of a structured secret, so Atmos readers (!secret, atmos secret get/env/exec) decode it rather than returning the exact original string; external consumers always receive the exact stored bytes.
AWS Secrets Manager
Azure Key Vault
Labels are applied as Azure Key Vault secret tags. Use labels and expires when an Azure Policy requires every Key Vault secret to carry tags or an expiration date; without them the policy rejects Atmos writes. Both options only affect writes, so reads, existence checks, listing, and deletion are unchanged. A relative expires (such as 90d) is recalculated each time Atmos writes a secret, so rewriting a secret renews its expiration. A fixed date that is already in the past is accepted, but Atmos logs a warning because Key Vault or your policy may reject it. A duration must be at least one second, because Key Vault stores expiration in whole seconds. Invalid values (for example 0d, 500ms, or soon) fail when the store is created.
Authentication uses the Azure Default Credential chain, which checks environment variables, managed identity, Azure CLI, and other sources.