Secrets management
API keys, DB credentials, and certs belong in a secrets manager (Vault, AWS Secrets Manager, Doppler) — never in source control or a plaintext env file.
Lesson 4 of 4 · ⭐ Gap priority
A customer requires an air-gapped install, or a security review flags a policy that's far too broad. Neither should be the first time you've thought about either.
Three areas cover most of what shows up in a real review or incident.
API keys, DB credentials, and certs belong in a secrets manager (Vault, AWS Secrets Manager, Doppler) — never in source control or a plaintext env file.
A role should have exactly the permissions its job requires, no more. The most common production incident isn't a sophisticated exploit — it's an overly broad policy.
Not every service needs to talk to every other service. VPCs, subnets, and security groups make "if this is compromised, what can it reach?" an answerable question.
The same application looks very different to operate depending on where it actually runs.
Standard SaaS deployment — the provider's infra, your code, internet-reachable by default and gated behind auth.
Runs inside the customer's own data center. You lose managed services (their DB, their load balancer) and gain their change-control process.
No path to the public internet, ever. Every dependency — images, packages, even license checks — has to be mirrored in and updated by hand.
Look at the sanitized IAM policy below, then work through both exercises.
// Flagged in a security review
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
// What it should have been — this service only ever
// reads objects from one bucket
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::invoice-exports/*"
}Answer in your head first, then click a question to reveal the answer.
Work through the sample IAM policy and check each item off. Progress is saved in your browser.
These primers are a starting point. Read the primary sources to build real fluency.
What building this project taught me.
This lesson covers two related gaps from the same job-hunting scan: security-domain production experience, and on-prem/air-gapped deployment. They're grouped here because most job descriptions raised them together, not separately.
Air-gapped installs alone could fill their own trail. The goal here is recognizing the vocabulary and trade-offs when a customer or job description raises them — not having shipped one yourself yet.