Technical Guide

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.

July 22, 202618 min readOronts Engineering Team

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

RoleThe real questionWhat good looks like
CTOWhere is our biggest exposure right now?A ranked list, not a vague "we are fine"
Security leadCan one leaked key do real damage?Least privilege, small blast radius
SRECan we detect and reconstruct an incident?Logs, audit trail, alerting
ComplianceIs this defensible to an auditor?Documented controls, retained evidence
DeveloperWhat 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-patternFix
Wildcard permissions on rolesScope to specific resources and actions
Long-lived static keysShort-lived, rotated credentials
Shared credentials across servicesOne identity per service
Human and machine sharing a roleSeparate, 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:

  1. No secrets in code or config files. Not in the repo, not in the container image, not in an environment file committed anywhere.
  2. Encrypted at rest with a managed key. The store encrypts, and access to the key is itself controlled.
  3. Retrieved at runtime, not baked in. The application pulls secrets when it starts or when it needs them.
  4. 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.

ControlAnswers
Image scanningAre there known vulnerabilities in what we ship?
Image signingIs this the artifact we actually built?
Bill of materialsWhich of our systems contains this vulnerable component?
Pinned base imagesDid 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.

AreaWhat to check
IdentityOver-permissioned roles, static keys, shared identities
SecretsAnything in code, config, or images; rotation
NetworkPublic data stores, over-wide security groups, no WAF
OutboundSSRF exposure on any user-influenced URL
DataEncryption at rest and in transit, residency
AuditCoverage, durability, retention, tamper evidence
DependenciesKnown-vulnerable packages, unpatched runtimes
Access controlAuthorization 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

  1. Inventory identity. Find the over-permissioned roles and static keys first. They are the biggest blast radius.
  2. Sweep for secrets. Scan code, config, and images. Move everything to a managed store.
  3. Close the network. Make data stores private, tighten security groups, add a firewall.
  4. Check outbound calls. Any user-influenced URL is an SSRF risk. Add a fail-closed allowlist.
  5. 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

  1. Over-permissioned identity. The most common serious finding. Scope every role to its job.
  2. Secrets in code or config. Already leaked. Move them to a managed, encrypted store.
  3. Public data stores. A database on the open internet is a breach waiting to happen. Make it private.
  4. Ignoring SSRF. User-influenced outbound calls can reach your internals. Allowlist and fail closed.
  5. No usable audit trail. If you cannot reconstruct an incident, you cannot respond to one. Build it in.
  6. 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

cloud securitysecurity hardeningIAMleast privilegesecrets managementsecurity reviewSSRFaudit trailAWS securityDevSecOps

Building 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