Documentation Index
Fetch the complete documentation index at: https://docs.jacobpevans.com/llms.txt
Use this file to discover all available pages before exploring further.
One profile per Terraform root. MFA on every session. Cached for a bounded TTL.
What AWS Vault is for
aws-vault is the envelope around your AWS credentials. It stores long-lived access keys in the macOS keychain backend, requires MFA to mint a short-lived session, and exposes the session to subprocesses via environment variables — never to the parent shell, never to disk.
Profile model
aws-vault exec <profile>
The keychain backend hands you long-lived access keys for that profile only — never to the parent shell.
Subprocess receives env vars
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN are injected into the child process only.tf-proxmox session has no rights to tf-runs-on infrastructure even if you accidentally exec the wrong terragrunt root.
| Profile | Terraform root | Doppler config |
|---|---|---|
tf-proxmox | terraform-proxmox | iac-conf-mgmt/prd |
tf-runs-on | terraform-runs-on | iac-conf-mgmt/prd |
tf-splunk-aws | tf-splunk-aws | (uses repo secrets directly) |
docs.dryvist.com (dryvist internal).
The canonical chain
aws-vault exec tf-proxmox— opens an MFA-protected session, exports AWS env vars into the child.doppler run --— fetches Doppler config (DB passwords, etc.), injects as env vars into the child.terragrunt plan— sees both layers; uses them to plan and apply.
terragrunt exits, all three layers tear down. The parent shell never saw any of them.
~/.aws/config shape (template)
session_ttl = 1h is the soft limit. Short enough that an abandoned terminal re-prompts on the next exec; long enough that a real plan/apply cycle doesn’t re-prompt mid-run.
Real account IDs do not appear in this docs site.
Adding a new profile
- Add a
[profile <name>]block to~/.aws/configwith the IAM user’smfa_serial. - Store the long-lived access key via
aws-vault add <name>. The keychain backend stores it;~/.aws/credentialsstays empty. - Verify with
aws-vault exec <name> -- aws sts get-caller-identity. - Plumb the profile name into the Terraform root’s docs (README) so the Terragrunt invocation has a copy-pasteable command.
Best practices
- Always
aws-vault exec— neveraws-vault envoraws-vault login, which spread the session beyond the subprocess. - Pair with Doppler on every Terraform call. Naked
aws-vault exec ... -- terragrunt planskips runtime config injection and tempts hardcoded values in.tfvars. - Cap
session_ttlto 1 hour. Longer sessions are convenience that fights least-privilege. - Enable CloudTrail. The audit trail for
aws-vaultis on the AWS side — there’s no local log.
Anti-pattern we don’t ship
Storing long-lived AWS access keys in~/.aws/credentials instead of the keychain backend defeats the whole tool. aws-vault add uses the keychain because that is the whole point.
See also
- Doppler — the runtime config layer wrapped inside
aws-vault exec. - How it fits together — flow diagram.
docs.dryvist.com— account IDs, MFA serials, real-world profile names.