When you genuinely have a secret and your whole workflow is git, where does it live? Not plaintext in the repo, not a gitignored file passed around Slack. SOPS with age encrypts the values, commits the ciphertext, keeps git diffs readable, and decrypts only at the point of use. age gives modern key management without the PGP misery; SOPS gives the value-only, multi-recipient, git-friendly workflow. A team's access model becomes a reviewable list of public keys. Plus when SOPS beats Vault and the one thing you must not get wrong.
tag: #security
The most dangerous thing in most Azure setups is a stored secret - it leaks, nobody rotates it, and an attacker finds it months later. Managed identities delete it, because the identity becomes the credential and your code gets short-lived tokens by proving what it is. Inside Azure that is one toggle and a scoped role; across the boundary, Workload Identity Federation lets GitHub Actions and Kubernetes authenticate to Azure over OIDC with no stored secret at all. Here is how both work, and the caveats that replace secret rotation.
An AI agent writes code, and now you have to decide where it runs, because in your process a single prompt injection reaches everything. Three answers sit at three points on the one axis that matters, isolation strength - plain Docker (thin shared-kernel wall), my tank-os-with-llms container (that thin wall hardened, self-hosted), and Azure Container Apps Sandboxes (thick hardware-backed microVM, cloud-managed). Isolation strength and ownership pull against each other, and here is how to pick.
Around 60% of breaches exploit a vulnerability that already had a patch. The gap is not knowledge, it is deployment, and it stays open because patching genuinely breaks things, there are too many patches, CVSS points at the wrong ones, and nobody owns the forgotten systems. The way through: prioritize by what is actually being exploited (the CISA KEV catalog, not raw severity), tier your response by exposure, automate the boring low-risk majority, and know what you run, because you cannot patch what you forgot you own.
When someone deletes production, the room asks who did it. That is the wrong question. If one person at one terminal with one wrong command can destroy prod, the system that granted that power with no guardrail is the failure, not the human, who is only the last link in a chain of missing controls. Here is why human error is a symptom not a cause, the controls that actually prevent it (least privilege, deletion protection, two-step destructive ops, environment isolation, separate-account immutable backups), and using chaos engineering to test the guardrails before reality does.
WORM (Write Once Read Many) storage cannot be altered or deleted after writing, even by an administrator, which makes it the right tool for audit logs, regulated financial records, and ransomware-resistant backups. But it confuses two different promises - write-prevention (the storage lock) and integrity-proof (a hash chain). Most tamper-proof-log requirements need only the hash chain, which is cheaper and independently verifiable. Here is when to reach for real WORM, the irreversible compliance-mode trap, and the GDPR conflict to design around.
People install Claude Code, Codex, and Cursor in five minutes and never ask what the thing can actually reach. The answer is everything you can - your files, your network, your keys. The documented 2026 attacks are mundane, a JSON config in a cloned repo that runs commands before the trust dialog, a crash report that smuggles a shell command through a tool you trust. Here is the real threat model and how to bound it, up to my tank-os-with-llms box.
kube-bench runs the CIS Kubernetes Benchmark against your cluster and tells you, check by check, where the configuration falls short of the hardening baseline. It is one job to run, it is free, and every cluster should be scored by it at least once. It also has a clear limit worth understanding before you trust a green result.
Everyone learns SSH keys and stops at authorized_keys. That is exactly the part that does not scale and cannot be revoked cleanly. SSH has had a certificate authority for over a decade that fixes both, kills the host-key TOFU prompt, and gives every login an expiry. Almost nobody uses it. Here is why you should.
A symlink vanishes and the normal logs say nothing. syslog and the journal record what programs choose to say. auditd records what the kernel actually did in the syscall path. That is why it names the culprit, and why it only works if you turned it on first.