S3 access control is a dense corner of the secure-architectures domain, and the exam tests it with requirements that each map to one specific mechanism. Learn which control answers which requirement and these scenarios become fast, reliable marks.
The guarantee: Block Public Access
When the requirement is an account-wide guarantee that nothing can ever be public, the answer is S3 Block Public Access. It overrides any ACL or bucket policy that would grant public access, for every bucket now and in future — a single setting that no later team can accidentally undo. Per-bucket deny policies solve a narrower version of the same problem but must be maintained everywhere and can be edited away.
The bucket policy: one control, every request
A bucket policy is resource-based, so it applies to every request to the bucket regardless of who makes it — which is why it, not an identity policy, is the exam’s answer for account-wide rules. Three conditions recur:
- Enforce encryption → Deny
s3:PutObject when the server-side-encryption header is absent, so a non-encrypting upload is rejected rather than silently stored.
- Enforce TLS → Deny all actions when
aws:SecureTransport is false, refusing any plain-HTTP request.
- Restrict to a VPC endpoint → Deny unless
aws:sourceVpce matches the named endpoint, so only in-network traffic reaches the bucket.
Notice the pattern: each is an explicit Deny with a condition. Deny is airtight where an allow-only phrasing can leak through a separate grant.
Cross-account access
To let a principal in another account act on your bucket, add a bucket policy naming that account’s role — the direct, least-privilege grant. The distractors all overreach: making the bucket public to serve one account, copying data to duplicate it, or sharing root credentials. Cross-account object access is a resource policy naming the other side, nothing more.
Sharing one object, privately
When an unauthenticated user needs one object for a limited time without the object becoming public, the answer is a presigned URL. It carries signed, expiring permission for that single object. Turning on public read, minting an IAM user, or emailing the file each fail some part of “one object, temporary, still private”.
How to use the six scenarios below
Answer each one before opening the explanation, and when you miss, name the requirement that decided it — “account-wide guarantee”, “reject unencrypted”, “only over HTTPS”, “another account”, “only through the endpoint”, “temporary and private”. Every explanation states that constraint and then dismantles the distractors, which are usually real S3 features answering a slightly different requirement. For the domain overview, see Design Secure Architectures.
Updated for SAA-C03 (July 2026). The sample questions above are our own work
in the style of the exam — not real exam items. The exam itself is set and marked
by the certification body.