Check ID: s3_bucket_cross_account_access
Provider: AWS
Service: s3
Severity: HIGH
Categories: identity-access, trust-boundaries
Resource type: AwsS3Bucket

What this check verifies

Amazon S3 bucket policies are analyzed for statements that grant cross-account access. Any policy that names principals outside the owning account (other account IDs or Principal: "*") is treated as cross-account; absence of a policy implies no cross-account grants.

Risk

Cross-account grants can let external principals read, write, or administer the bucket, impacting:
  • Confidentiality: unauthorized object access/exfiltration
  • Integrity: object tampering, policy or encryption changes
  • Availability: deletions, versioning changes, or lockouts causing data loss and downtime

Recommendation

Enforce least privilege: limit bucket policy Principal to your account or approved org IDs with fixed values; avoid wildcards. Use role-based cross-account access with scoped permissions when needed. Add defense-in-depth conditions (private networks, TLS), and periodically review for unintended external access.

Remediation

aws s3api delete-bucket-policy —bucket <example_resource_name>

References

Where this check fires

This check runs on every scheduled scan against your AWS account. Findings appear at Cloud Security → Findings filterable by Check ID = s3_bucket_cross_account_access. To re-evaluate after a fix, hit Run now on the account’s schedule under Cloud Security → Schedules — the next scan re-checks this control and marks the finding fixed or keeps it persistent.
← Back to AWS checks