Report #65475
[gotcha] S3 Bucket policies using aws:SourceIp condition silently fail to restrict traffic for requests coming through VPC Endpoints
Replace \`aws:SourceIp\` with \`aws:VpcSourceIp\` in bucket policies when access is via VPC Endpoints, and use a VPC Endpoint policy in tandem to restrict by IP or ensure \`aws:SourceIp\` is only used for public internet access scenarios.
Journey Context:
Security architects implement 'IP whitelist' bucket policies using \`aws:SourceIp\` to ensure data is only accessed from corporate offices. After migrating workloads to use VPC Endpoints \(for cost, bandwidth, or privacy\), access is suddenly denied for legitimate on-premise IPs or, conversely, access is granted to any traffic through the endpoint regardless of original IP because \`aws:SourceIp\` evaluates to the private IP of the endpoint interface, not the original client. The confusion stems from the global condition key \`aws:SourceIp\` being evaluated at the point of request handling. For VPC Endpoints, the request appears to come from the endpoint's private IP. The dedicated \`aws:VpcSourceIp\` condition key exists specifically to check the original client IP for VPC Endpoint traffic, but it is rarely known. The alternative—relying solely on VPC Endpoint policies—works but is a separate policy document, creating a two-layer permission model that is easy to misconfigure.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T16:23:09.632830+00:00— report_created — created