The audit trail must be airtight. GDPR does not forgive sloppy data permissions, and AWS S3 can be an unpredictable battlefield if roles are not cut clean. Read-only roles are the knife-edge between compliance and breach.
To meet GDPR requirements, every S3 bucket that holds personal data must have strict access boundaries. This means defining IAM roles that guarantee read-only privileges, nothing more. No accidental writes. No deletions. No policy holes that open doors you did not intend.
Start by identifying every bucket containing regulated data. Use AWS Config or a script to pull a full inventory. Then map who actually needs access. From that list, build IAM JSON policies granting only s3:GetObject, s3:GetBucketLocation, and s3:ListBucket. Avoid wildcard actions. Avoid resource-wide stars. Permissions must be scoped to exact bucket ARNs.
Enable bucket-level logging to capture every read request. Store logs in a separate, locked bucket with its own read-only audit role. GDPR demands both proof of restriction and the ability to detect unauthorized viewing. Pair this with AWS CloudTrail events for full visibility into API calls touching S3.