Cloud Security Hardening: IAM, Secrets, and Reviews That Hold Up
A practical guide to hardening cloud systems. Least-privilege IAM, secrets management, network boundaries, SSRF defense, audit trails, and how to run a security review.
Security Is a Property, Not a Product
Let me be direct: you cannot buy your way to a secure system. There is no tool that makes an over-permissioned IAM role safe or a secret in a config file secret. Security is a property of how the system is built and operated, and hardening is the ongoing work of removing the ways it can go wrong.
Most breaches are not exotic. They are a leaked key with too much access, a storage bucket left public, a callback URL that reached an internal service, an audit trail nobody kept. The work of hardening is unglamorous and specific, and it is the difference between a system that survives a mistake and one that turns a mistake into a headline.
The goal of hardening is not to make an attack impossible. It is to make one mistake survivable, by ensuring no single failure has a large blast radius.
We do security architecture reviews and hardening as part of our consulting practice, and we build these controls into our own platforms, Exfinity and OGuardAI. This guide is what we actually check and fix. For the AI-specific angle, pair it with our AI governance guide and data leakage prevention guide.
Who Cares About What
| Role | The real question | What good looks like |
|---|---|---|
| CTO | Where is our biggest exposure right now? | A ranked list, not a vague "we are fine" |
| Security lead | Can one leaked key do real damage? | Least privilege, small blast radius |
| SRE | Can we detect and reconstruct an incident? | Logs, audit trail, alerting |
| Compliance | Is this defensible to an auditor? | Documented controls, retained evidence |
| Developer | What do I actually change? | Concrete fixes, not a policy PDF |
Identity: Least Privilege or Nothing
The most common serious finding in any review is over-permissioned identity. A role that can do far more than its job needs is a leaked-key disaster waiting to happen. The fix is least privilege: every identity gets exactly the access it needs, no more.
This is tedious and it is worth it. A compromised credential scoped to read one bucket is an incident. The same credential with broad write access is a catastrophe.
| Anti-pattern | Fix |
|---|---|
| Wildcard permissions on roles | Scope to specific resources and actions |
| Long-lived static keys | Short-lived, rotated credentials |
| Shared credentials across services | One identity per service |
| Human and machine sharing a role | Separate, differently-scoped identities |
In our own platforms, machine identities are scoped per service and rotated, and human access is separated from machine access with different privileges. The principle applies on any cloud. Our multi-tenant system design guide covers how identity scoping interacts with tenant isolation.
Secrets: Not in Code, Not in Config
A secret in a repository is a secret that has leaked, whether or not anyone has found it yet. Secrets belong in a managed secrets store, encrypted, retrieved at runtime, and rotated.
The checklist is short and strict:
- No secrets in code or config files. Not in the repo, not in the container image, not in an environment file committed anywhere.
- Encrypted at rest with a managed key. The store encrypts, and access to the key is itself controlled.
- Retrieved at runtime, not baked in. The application pulls secrets when it starts or when it needs them.
- Rotated, with a grace window. A rotated key gives the old one a short overlap so nothing breaks mid-rotation.
Exfinity keeps provider keys, connection strings, and signing secrets in a managed secrets store with key-based encryption, and OGuardAI encrypts its session mappings with authenticated encryption and supports zero-downtime key rotation through a key ring. The pattern is the same everywhere: the secret is never sitting in plaintext where a repo clone or an image pull would expose it.
Network Boundaries: Private by Default
The default posture for every data store and internal service is private. Databases, search, caches, and message brokers should live in private subnets with no public route, reachable only from the compute that needs them.
Internet
│
▼
Load balancer (public, HTTPS only)
│
▼
Compute (private subnet)
│
▼
Data stores (private subnet, no public access)
── database ── search ── cache ── message broker
Only the load balancer and CDN face the internet, and they speak HTTPS only. Everything behind them is reachable through the network, not from the open internet. Security groups allow the minimum: the load balancer to the compute, the compute to the data stores, nothing wider. A web application firewall in front catches common attack patterns. This is how a compromised front end does not automatically mean a compromised database. Our AWS multi-tenant SaaS guide shows this topology in a full platform.
The Overlooked One: SSRF and Outbound Calls
Here is a class of vulnerability most reviews miss until it bites. If your system makes outbound HTTP calls to URLs it did not fully control, webhooks, callbacks, link previews, image fetches, an attacker can point those at your internal network and use your own server to probe it. This is server-side request forgery, and it is how internal metadata services and private endpoints get reached from the outside.
The defense is a fail-closed allowlist that validates the destination before the call is made, rejecting anything that resolves to an internal or non-public address.
Outbound URL ──▶ resolve ──▶ is it a public unicast address?
│ no │ yes
▼ ▼
reject proceed, pinned to
(fail closed) the validated host
Exfinity validates outbound webhook and probe targets against a unicast allowlist and pins the connection to the validated host so a redirect cannot smuggle the request elsewhere. If your system calls URLs derived from user input, this is a must-fix. We cover the integration side in our enterprise integration guide.
Encryption and the Audit Trail
Two controls that auditors always ask about, and that you want in place before they do.
Encryption everywhere: data encrypted at rest in every store, and in transit over TLS on every hop. This is table stakes, and it is cheap on modern cloud platforms, so there is no excuse to skip it.
An audit trail that holds up: every meaningful action recorded with who, what, when, and against which resource, in a durable, tamper-evident store, retained as long as your obligations require. Exfinity keeps an operational audit log that archives to durable storage with a multi-year retention for compliance, and OGuardAI records a personal-data-free audit trail with an optional hash chain for tamper evidence. The test is simple: after an incident, can you reconstruct exactly what happened? If not, you have a gap. Our observability guide covers the wider telemetry picture.
Dependencies and the Supply Chain
The code you did not write is still your attack surface. A vulnerable package deep in your dependency tree, or a compromised base image, is a breach that arrives through the front door you left open by not looking. Supply-chain hygiene is now a first-class part of hardening, not an afterthought.
The practical controls are concrete and automatable. Scan container images for known vulnerabilities on every build, and fail the build on anything serious. Sign your images so a deployment can verify it is running what you built and not a substituted artifact. Produce a software bill of materials so you can answer "are we affected by this new vulnerability" in minutes instead of days.
We apply this to our own artifacts. The OGuardAI runtime ships as scanned, signed images with a bill of materials attached, so an operator can verify provenance before running it. The same discipline belongs on any image you deploy.
| Control | Answers |
|---|---|
| Image scanning | Are there known vulnerabilities in what we ship? |
| Image signing | Is this the artifact we actually built? |
| Bill of materials | Which of our systems contains this vulnerable component? |
| Pinned base images | Did a base image change under us? |
A vulnerability in a dependency is not your fault, but shipping it unknowingly is your responsibility. Our infrastructure as code guide covers wiring these checks into the pipeline.
How to Actually Run a Security Review
A review is not a vibe check. It is a structured pass across the surfaces that matter, producing a ranked, actionable list.
| Area | What to check |
|---|---|
| Identity | Over-permissioned roles, static keys, shared identities |
| Secrets | Anything in code, config, or images; rotation |
| Network | Public data stores, over-wide security groups, no WAF |
| Outbound | SSRF exposure on any user-influenced URL |
| Data | Encryption at rest and in transit, residency |
| Audit | Coverage, durability, retention, tamper evidence |
| Dependencies | Known-vulnerable packages, unpatched runtimes |
| Access control | Authorization gaps, missing tenant checks |
The output is not "you are insecure." It is a prioritized remediation plan: what to fix first by blast radius, what is medium, what is acceptable risk to accept consciously. That prioritization is the value, because everything cannot be urgent. Our consulting team runs exactly this kind of review, and our methodology frames how we sequence the fixes.
Getting Started
- Inventory identity. Find the over-permissioned roles and static keys first. They are the biggest blast radius.
- Sweep for secrets. Scan code, config, and images. Move everything to a managed store.
- Close the network. Make data stores private, tighten security groups, add a firewall.
- Check outbound calls. Any user-influenced URL is an SSRF risk. Add a fail-closed allowlist.
- Verify the audit trail. Confirm you could reconstruct an incident. Fix the gaps.
Start at contact or get a scoped quote for a review. This is core cloud and consulting work.
Common Ways This Goes Wrong
- Over-permissioned identity. The most common serious finding. Scope every role to its job.
- Secrets in code or config. Already leaked. Move them to a managed, encrypted store.
- Public data stores. A database on the open internet is a breach waiting to happen. Make it private.
- Ignoring SSRF. User-influenced outbound calls can reach your internals. Allowlist and fail closed.
- No usable audit trail. If you cannot reconstruct an incident, you cannot respond to one. Build it in.
- Treating security as a one-time project. Hardening is ongoing. Review on a cadence, not once.
Who Builds This
Oronts is a founder-led software company in Munich. Refaat Al Ktifan, our founder and solution architect, leads a senior team across backend, cloud, and security. We run security architecture reviews and build hardening into delivery, and the controls in this guide are ones we enforce in our own platforms, Exfinity and OGuardAI. We assess your exposure, hand you a ranked remediation plan, and help you fix it by priority. See our services, solutions, and trust pages.
Takeaways
- Security is a property of how a system is built and run, not a product you install.
- Least-privilege identity is the highest-leverage fix, because it shrinks the blast radius of a leak.
- Keep secrets out of code and config, in a managed encrypted store, and rotate them.
- Make data stores private, defend against SSRF on outbound calls, and encrypt everything.
- Keep an audit trail you could actually reconstruct an incident from, and review on a cadence.
Hardening is not about a perfect defense. It is about making sure that when something goes wrong, and it will, the damage is contained and you can see exactly what happened.
Want a security review that produces fixes, not a PDF? Tell us what you run. Start at contact or get a scoped quote.
Topics covered
Related Guides
Agent Memory That Remembers: Knowledge Graphs and Context Assembly
A deep technical guide to production agent memory: recent windows, semantic recall, working memory templates, per-tenant knowledge graphs, and layered context assembly.
Read guideEnterprise Guide to Agentic AI Systems
Technical guide to agentic AI systems in enterprise environments. Learn the architecture, capabilities, and applications of autonomous AI agents.
Read guideAgentic Commerce: How to Let AI Agents Buy Things Safely
How to design governed AI agent-initiated commerce. Policy engines, HITL approval gates, HMAC receipts, idempotency, tenant scoping, and the full Agentic Checkout Protocol.
Read guideBuilding something like this?
We design and ship production systems like the one in this guide. Talk to the engineers who wrote it, no sales pitch.
Start a conversation