Courseiva
Security and Compliance →mediumMultiple Choice

SOA-C02 Security and Compliance Practice Question

A SysOps administrator needs to ensure that all Amazon S3 buckets in an AWS account are encrypted at rest using server-side encryption. Which combination of actions should be taken to enforce this policy?

⚠ Common exam trap

Many exam-takers confuse default encryption (which is applied server-side after upload) with a bucket policy that denies unencrypted uploads, thinking that default encryption alone enforces encryption, when in fact it does not prevent the upload of unencrypted objects.

Answer choices

Why each option matters

Answer the question above first, then reveal the full breakdown to understand why each option is right or wrong.

Correct answer & explanation

✓

Use an S3 bucket policy on each bucket that denies s3:PutObject if the x-amz-server-side-encryption header is not present.

An S3 bucket policy with a Deny statement for s3:PutObject that requires the x-amz-server-side-encryption header ensures that any PUT request without encryption headers is rejected. This enforces server-side encryption at the point of upload, preventing unencrypted objects from being stored in the bucket. Default encryption (Option A) only applies encryption to objects that are uploaded without encryption headers, but it does not prevent unencrypted uploads; a bucket policy denial is the only way to block them outright.

Answer analysis

Option-by-option breakdown

For each option: why learners choose it and why it is or isn't the right answer here.

  • ✗

    Enable default encryption on each S3 bucket and create a CloudWatch alarm to notify if unencrypted objects are uploaded.

    Why it's wrong here

    Default encryption on an S3 bucket transparently encrypts objects at rest after the PUT completes, but it does not inspect or reject an incoming request that lacks encryption headers. A CloudWatch alarm can only notify you after the fact about objects that were already stored, leaving a window where unencrypted data exists and failing to enforce encryption as a precondition for the write operation. This approach is detective, not preventive, so it does not satisfy the requirement to ensure all uploads are encrypted from the start.

  • ✗

    Use an S3 bucket policy with a Deny statement for s3:PutObject without encryption applied to all buckets via a single policy.

    Why it's wrong here

    Bucket policies are scoped to a single bucket and cannot be applied globally across multiple buckets in one statement. While you could attach a similar Deny policy to each bucket individually, the option specifically claims a single policy covers all buckets, which is incorrect because an S3 bucket policy has no cross-bucket or organizational application mechanism. Additionally, the Deny condition would need to check for the x-amz-server-side-encryption header (or require aws:SecureTransport-like conditions), but the fundamental flaw is the policy's inability to be global without per-bucket deployment.

  • ✗

    Use AWS CloudTrail to monitor PutObject calls and trigger an AWS Lambda function to delete unencrypted objects.

    Why it's wrong here

    CloudTrail logs PutObject API calls, so it can record whether an object was uploaded without encryption, but it does not intercept or block the request at write time. Invoking a Lambda function to delete unencrypted objects after the fact is a destructive, reactive measure that risks data loss and race conditions, and it does not guarantee that unencrypted data never exists in the bucket. This option provides audit visibility but fails the requirement to proactively enforce encryption on every upload.

  • ✓

    Use an S3 bucket policy on each bucket that denies s3:PutObject if the x-amz-server-side-encryption header is not present.

    Why this is correct

    A bucket policy with a Deny for s3:PutObject when the x-amz-server-side-encryption header is absent enforces encryption at upload time by rejecting the request before any object is written. The condition evaluates the presence of the encryption header (e.g., using StringNotEquals if s3:x-amz-server-side-encryption is not AES256 or aws:kms), and this applies to every PutObject on that bucket. Because each bucket needs its own policy, the administrator must attach the policy to every bucket individually, but this fully satisfies the enforcement requirement.

Quick reference

AWS S3 Storage Class Comparison

Storage ClassMin DurationRetrievalUse Case
S3 StandardNoneImmediateFrequently accessed data
S3 Standard-IA30 daysImmediateInfrequent access, rapid retrieval
S3 One Zone-IA30 daysImmediateNon-critical infrequent data
S3 Intelligent-TieringNoneImmediate–hoursUnknown or changing access patterns
S3 Glacier Instant90 daysMillisecondsArchive with instant retrieval
S3 Glacier Flexible90 daysMinutes–hoursArchive, flexible retrieval
S3 Glacier Deep Archive180 daysHoursLong-term compliance archive

About these practice questions

Courseiva writes every SOA-C02 question from scratch — 1,169 in total, each with an explanation and a wrong-answer breakdown. None are copied from real exams or dumps. Learn why practice questions differ from exam dumps →

How Courseiva writes practice questions · Editorial policy

JA

Written by Johnson Ajibi, MSc IT Security

Senior Network & Security Engineer · founder of Courseiva

This SOA-C02 practice question is part of Courseiva's free Amazon Web Services certification practice question bank. Courseiva provides original exam-style practice questions with explanations, topic-based practice, mock exams, readiness tracking, and study analytics to help learners prepare for the SOA-C02 exam.