Give the Auditor a Read-Only Identity, Never Your Admin
If the auditor cannot write, it cannot break. Here is the exact policy shape, what the audit can see with it, and what stays out of reach.
Create a dedicated IAM user with a policy of list, get and describe actions across the services in scope. The full audit runs on it. Secrets are never printed; findings reference shapes, not values.
One policy, all Allow, actions limited to list, get, describe and their service-specific equivalents, resources *. The wildcard on resources is acceptable because the actions themselves cannot mutate anything. Explicitly omitted: get-secret-value, get-parameter with decryption, anything starting with Put, Create, Delete, Modify, Update. The result: the auditor can map the whole account and change nothing.
In This Guide
The policy shape
What the audit does with it
The offboarding
Get the skill
4 Tips to Get Started
One identity per auditor, named for the purpose. Offboarding is then one key deletion.
Deny by omission: grant only list, get, describe. No Put*, no Delete*, no Create*.
Set a key rotation reminder: auditor keys follow the same 90-day rule as every other key.
The audit report must never contain secret values. Shapes and prefixes only.
Ready to Stop Worrying About Infra?
Knowledge is the first step. Get a free 1-hour diagnostic and see where your infrastructure leaks time, money, and focus.
Related Guides
Is My S3 Bucket Public? How to Check in One Command
One command tells you if your S3 bucket is public, and one curl proves it. The policy check shows intent, the anonymous request shows reality.
The Most Common AWS Misconfiguration (It Is One Line of Config)
Public buckets and Principal * policies cause most disclosed AWS incidents. Each is one line of config with account-wide blast radius. Here is the pattern.
Terraform State File Leak: Every Secret in Plaintext
terraform.tfstate stores database passwords, IAM keys and TLS private keys in plaintext. sensitive=true hides nothing. Here is how leaks happen and the check.
Docker Socket Mounted in a Container: Root on the Host, No Exploit Needed
A container with /var/run/docker.sock mounted controls the host daemon and can mount your entire filesystem. No kernel exploit required. Here is the mechanism and the check.
Ron Cohen — DevOps engineer & founder, roqy.io
Content reviewed by the roqy.io team. Our guides are based on publicly available data.
Disclaimer: This content is for informational and educational purposes only. It does not constitute professional advice or a guarantee of specific results. Infrastructure needs vary by team, stack, and stage. Consult a qualified engineer for advice tailored to your situation.
Frequently Asked Questions
How do I give an auditor read-only AWS access?
Create a dedicated IAM user, attach a policy granting only list, get and describe actions on the services in scope, and hand over its access key. The full audit runs on that identity: every command is read-only, nothing can be changed or restarted, and offboarding is deleting one key.
What can a read-only audit see?
Everything configuration: bucket policies, security groups, IAM users and keys, trust policies, snapshots, CloudTrail and GuardDuty state, runtime and certificate dates. It cannot see secret values inside Secrets Manager or SSM Parameter Store with a read-only policy scoped to metadata, and it never needs to: findings reference shapes, not values.
Is read-only really safe?
Yes, with one caveat: some read actions return sensitive data, like get-secret-value. The audit policy omits those specific actions. The skill's hard safety rules also cap network probes at single status-code requests, and the client can veto any probe.
Get the DevOps Ecosystem Behind You
One accountable engineer. Full platform behind him. Month-to-month, no lock-in.