Not everything is a secret
An AWS region, a default model name, a feature flag URL — these are configuration, not secrets. They don't need encryption at rest. They do need to be visible in logs (for debugging) and shareable across repos.
GitHub provides variables alongside secrets. Same scoping (repo, org, environment), but:
- Stored in plaintext.
- Visible in logs (no redaction).
- Accessed via
vars.NAMEinstead ofsecrets.NAME. - Same UI: Settings → Secrets and variables → Actions → Variables tab.
What goes where
| Variable (vars.X) | Secret (secrets.X) |
|---|---|
| AWS_REGION | AWS_ACCESS_KEY_ID |
| OPENAI_MODEL | OPENAI_API_KEY |
| PYTHON_VERSION | — |
| STAGING_HOST | STAGING_SSH_KEY |
The rule of thumb: if leaking it would be fine on a public log, it's a variable. If leaking it would require rotation, it's a secret.