ISO 27001 doesn’t just demand encryption and policies — it demands control. For AWS S3, that means locking down access with precision. A read-only role should read, but it should never list, never write, and never expose data that doesn’t belong to it. Too many policies are written like open doors: wide scopes, s3:* permissions, and trust policies that would pass any stranger through. That’s how compliant architectures turn into breaches waiting to happen.
An ISO 27001-aligned S3 read-only role starts with scoping. Define exactly which buckets can be accessed with Resource ARNs. Avoid wildcards. Remove ListAllMyBuckets unless there’s a reason it must exist, and log every call with CloudTrail. Combine IAM policy conditions like aws:SourceIp or aws:PrincipalArn with S3 bucket policies to bind the role into a narrow lane. Encrypt bucket content with SSE-KMS and enforce TLS connections to align with Annex A.8 and A.10 controls.
To pass an audit, you need traceability. Attach managed policies built for AWS S3 read access, then strip away excess with inline policy restrictions. Map controls directly to ISO 27001 clauses: