Reliability Engineering Lab
Illustration for: IAM Least Privilege in Practice: Closing the Gaps That Audits Miss

Security

IAM Least Privilege in Practice: Closing the Gaps That Audits Miss

Feb 28, 20264 min read

The gap between policy and practice

The principle of least privilege is well understood: every identity should have only the permissions it needs to perform its function, nothing more. In practice, most cloud environments accumulate a layer of over-permissioned access over time — not from negligence, but from the legitimate friction of moving fast and the difficulty of tracking what was granted and why.

A periodic IAM audit surfaces obvious issues. What it misses is the structural pattern that keeps re-creating them.

Where over-permissioned access accumulates

Administrator roles attached to service accounts

Service accounts that were granted admin access to unblock a deployment deadline are rarely downscoped afterward. The task completes, the broad permission stays. In a moderately complex environment, these accounts multiply.

Review service accounts and workload identities with admin or owner roles. For each one, ask: what does this account actually need to do? In most cases, the answer is a narrow set of actions against specific resources — not account-wide admin.

Human accounts with standing access

Standing privileged access — roles that are always active, not time-bound — creates persistent exposure. An account with standing admin access is a target at all times.

Where your cloud provider supports it, replace standing privileged roles with just-in-time (JIT) access: elevated access is requested, approved, and automatically revoked after a defined window. This does not eliminate the risk, but it reduces the exposure window from continuous to bounded.

Wildcard permissions in custom policies

Custom IAM policies frequently contain wildcard action patterns (s3:*, ec2:*) written to avoid the friction of enumerating specific actions. These policies often outlive the context in which they were created.

Audit custom policies for action wildcards against sensitive resource types: IAM itself, key management services, storage buckets, and compute APIs. Wildcards in these domains are worth replacing with explicit action lists even if it takes engineering effort.

Cross-account trust relationships

Cross-account roles that allow one account to assume roles in another are powerful and easy to misconfigure. A trust policy that includes a wildcard principal, or that trusts an account that has since been deprecated, is an open path.

List all cross-account roles in your environment. For each one, verify: who can assume this role, from which account, and under what conditions? Policies using * as a trusted principal should be treated as critical findings.

Unused credentials and access keys

Access keys that have not been used in 90 days are a residual attack surface. Enumerate active access keys and their last-used date. Rotate or delete keys that have been inactive for 90+ days. For keys attached to human identities, the threshold should be lower.

Automated credential rotation is the target state. If rotation is not yet implemented, a manual quarterly review is the minimum viable control.

A structured approach to closing the gaps

Remediating IAM findings in isolation is effective but slow. The pattern that produces durable improvement combines three elements.

First, establish a permission boundary baseline. Define the maximum permissions any non-administrative identity in your environment should be able to hold, and encode this as a permission boundary applied to all new identities. This does not fix existing over-permissioned accounts, but it stops new ones from being created without deliberate review.

Second, tag all IAM identities with ownership metadata. A service account without an owner is a service account that will never be cleaned up. Require a team tag and a last-reviewed date on all machine identities as a prerequisite for any new deployment.

Third, add IAM drift detection to your operational monitoring. Track newly created roles with broad permissions, new cross-account trust relationships, and access key creation events. Treat these as signals worth reviewing in your weekly operational cadence, not as alerts that fire in isolation.

What an audit misses

A point-in-time IAM audit tells you what exists now. It does not tell you how it got there, who approved it, or what the business context was. Without that context, remediating findings is slow and risky: teams hesitate to remove access they do not fully understand.

The remediation process is as important as the finding. For each over-permissioned identity, document the business function it serves before proposing a replacement policy. Downscoping is straightforward when you know what the account is supposed to do. It is risky and slow when you are guessing.

Ready to find out what your cloud environment could save?

Book a free scoping call. We will map your spend band, define scope, and issue a fixed-fee proposal with a guaranteed minimum savings threshold — typically within one business day.

Book a Discovery Call