AWS S3 read-only roles sound harmless. They aren’t. A read-only IAM role with the wrong scope can expose customer data, internal documents, or production assets to anyone who finds a way in. The danger hides in plain sight because read-only feels safe. But S3 read access without tight boundaries can be as dangerous as write or delete if the wrong party gets it.
Auditing AWS S3 read-only roles means going beyond the IAM policy name. You have to ask:
- Which buckets can this role read?
- Can it list all buckets?
- Does it expose sensitive prefixes within a bucket?
- Who or what can assume this role?
- Are there trust relationships that connect it to other accounts or services?
The first step is inventory. Pull a complete list of IAM roles with s3:GetObject, s3:ListBucket, or wildcard permissions that include them. Avoid blind spots by scanning inline policies, managed policies, and group attachments.
Next, map trust policies. Even a perfect read-only bucket policy is useless if an external AWS account can assume the role without restriction. Cross-account access to S3 read roles is one of the most common leaks. Watch for Principal: "*" and overly broad AWS account IDs.