SCS-C03 · Domain 5 · Data Protection (18%) · Day 3 of 5
Data at rest, integrity, retention and backup
Days 1 and 2 were about keys. Today you use them: encrypting S3, EBS, RDS, DynamoDB and EFS, then stopping data from being changed or deleted with Object Lock, Vault Lock and integrity checks, and finally keeping it for the right time and recovering it with lifecycle rules, AWS Backup, replication, DLM and DataSync.
Skill 5.2.1 encryption at restSkill 5.2.2 data integritySkill 5.2.3 lifecycle and retentionSkill 5.2.4 replication and backup~100 min read + 30 min lab
01
Encrypting data at rest in Amazon S3
Skill 5.2.1 asks you to pick the right encryption at rest. S3 is where most of those questions live. Since January 2023 every new object is encrypted with SSE-S3 automatically, so the real question is never “is it encrypted?” but who holds the key, who can audit its use, and who can turn it off.
Concept profile
S3 server-side encryption (SSE-KMS)
often confused with SSE-S3
?What is it?
S3 encrypts each object with a data key that AWS KMS generates under a KMS key you choose (x-amz-server-side-encryption: aws:kms). To read the object, the caller needs s3:GetObjectandkms:Decrypt on that key.
⚙How does it work?
Set it as the bucket’s default encryption, or per request with headers.
S3 calls KMS GenerateDataKey on upload and Decrypt on download, all logged in CloudTrail.
Turn on an S3 Bucket Key: S3 gets one bucket-level key from KMS and makes object keys from it, cutting KMS requests and cost by up to 99%.
Changing the default later does not re-encrypt old objects; use S3 Batch Operations Copy.
{ }Structure
Five ways to encrypt S3 data, from least to most work for you.
⇄SSE-KMS vs SSE-S3
SSE-KMS
SSE-S3
Key owner
KMS key (customer managed or aws/s3)
S3-owned keys
Separate permission to read
Yes: kms:Decrypt
No, S3 permission is enough
Audit each use
CloudTrail KMS events
No
Disable or delete key = data locked
Yes
No
Cost
KMS requests (Bucket Key lowers it)
Free
Cross-account sharing
Customer managed key only
Works with bucket policy alone
!Common mistakes the exam tests
Using aws/s3 (AWS managed key) and then trying to share objects with another account: its key policy can’t be edited, so cross-account reads fail.
Forgetting the uploader needs kms:GenerateDataKey and the reader needs kms:Decrypt.
Expecting a new default to re-encrypt existing objects.
Turning on Bucket Keys but keeping key-policy conditions on the object ARN: the encryption context becomes the bucket ARN.
Picking SSE-C for new buckets: it is disabled for new buckets since April 2026 and must be enabled explicitly.
✓Benefits and use cases
Separation of duties: S3 admins can’t read data without KMS permission.
Audit trail of every decrypt for regulated data.
Crypto-shredding: disable or delete the key to make the data unreadable.
Server-side or client-side? KMS or CloudHSM?
Server-side means AWS encrypts after receiving your data, so it is easy and works with every AWS feature. Client-side means you encrypt before sending (AWS Encryption SDK, Amazon S3 Encryption Client, DynamoDB Encryption Client), so AWS stores only ciphertext. Choose client-side only when a rule says AWS or the storage admins must never see plaintext. For the key itself, KMS is the default answer; choose CloudHSM (or a CloudHSM key store) only when the question demands a single-tenant HSM you control.
Think of it like · a hotel safe
Your valuables are in a hotel. Who holds the key to the safe?
AWS concept
Familiar thing
SSE-S3
≈
The hotel locks everything in its own vault; you never see a key
SSE-KMS
≈
The safe needs a second key from the front desk, and the desk logs every time it is handed out
DSSE-KMS
≈
Your bag goes in a locked box, inside the locked safe
SSE-C
≈
You bring your own padlock key every time; lose it and nobody can open the safe
Client-side
≈
You lock the bag before you arrive; the hotel only stores a locked bag
Bucket Key
≈
The desk gives the floor manager one master key for the day instead of walking up for every guest
Real AWS example · enforce SSE-KMS with one key
Default encryption plus a bucket policy that rejects uploads naming any other key.
Uploads without headers get the default key; uploads that ask for a different key are denied.
Exam-style scenario
A healthcare company stores patient files in S3. Auditors require a log of every time a file is decrypted, and the storage team must not be able to read files without separate approval from the security team. Costs from millions of small objects must stay low. What should it use?
A. SSE-S3 with S3 server access logs.
B. SSE-KMS with a customer managed key controlled by the security team, S3 Bucket Keys enabled.
C. SSE-C with keys stored in Secrets Manager.
D. DSSE-KMS with the AWS managed key aws/s3.
Show the worked answer
Answer: B
SSE-KMS gives a separate permission (kms:Decrypt on a key the security team controls) and CloudTrail records key use. Bucket Keys reduce KMS request costs.
Why not the others
A: No separate key permission; S3 admins can read everything.
C: Heavy app changes, keys sent with every request, and SSE-C is off by default for new buckets.
D: AWS managed key policy can’t be controlled by the security team, and dual layers add cost the question didn’t ask for.
How the exam tests this
“Audit key use, separate duties”→ SSE-KMS with a customer managed key.
Each storage service has one quirk the exam loves: when can you turn encryption on, and what happens to snapshots, replicas and shares. Learn the four rules below and most “the team forgot to encrypt” questions answer themselves.
Concept profile
EBS encryption by default
often confused with RDS storage encryption
?What is it?
A per-account, per-Region setting that forces every new EBS volume and snapshot copy to be encrypted, with aws/ebs or a customer managed key you pick as the default.
⚙How does it work?
Run enable-ebs-encryption-by-default in each Region you use.
New volumes, including those created at instance launch, are encrypted. Existing volumes and snapshots are untouched.
Snapshots of encrypted volumes are encrypted; volumes made from them are encrypted.
You can’t change the key on an existing volume or snapshot, but you can pick a new key when you copy a snapshot.
{ }Structure
The universal fix for “it was created unencrypted”.
⇄EBS by default vs RDS storage encryption
EBS
RDS / Aurora
Turn on for existing resource
No: snapshot → encrypted copy → new volume
No: snapshot → encrypted copy → restore
Account default switch
Yes, per Region
No (choose at creation)
Replicas
n/a
Replica encryption must match the source
Cross-Region copy
Choose key in destination Region
Must give a key in destination Region
Share snapshot with another account
Only with a customer managed key
Only with a customer managed key
Turn encryption off
Can’t on an encrypted volume
Can’t
!Common mistakes the exam tests
Believing encryption by default is global: it is per Region.
Expecting it to encrypt existing volumes.
Sharing a snapshot encrypted with aws/ebs or the RDS AWS managed key: it can’t be shared. Re-copy with a customer managed key and allow the other account in its key policy.
Trying to create an encrypted read replica of an unencrypted RDS instance.
Forgetting the destination-Region KMS key when copying snapshots across Regions: KMS keys are Regional.
✓Benefits and use cases
Guarantee every new disk is encrypted without relying on people.
Pair with an SCP or Config rule ec2-ebs-encryption-by-default to keep it on.
Use a customer managed key so DR accounts can be granted access.
DynamoDB and EFS in one paragraph each
DynamoDB encrypts every table at rest, always; you can’t turn it off. You only choose the key: AWS owned (default, free, no audit), AWS managed (aws/dynamodb) or customer managed. You can switch between them at any time on an existing table.
Amazon EFS encryption at rest is chosen when you create the file system and can’t be added later. To encrypt an existing one, create a new encrypted file system and copy the data. Encryption in transit is separate: mount with the EFS mount helper option -o tls, and enforce it with a file system policy that denies when aws:SecureTransport is false.
Think of it like · a moving house
Some things can be locked after you move in, others only when you build them.
AWS concept
Familiar thing
EBS by default
≈
A city rule: every new house in this district gets a locked door
Unencrypted volume
≈
An old house without a lock; you can’t retrofit, you build a copy with a lock and move in
RDS replica must match
≈
Twin houses must have the same kind of lock
aws/ebs snapshot
≈
A key that only works in your own district, so you can’t lend the copy to a neighbour
DynamoDB
≈
Every house comes with a lock; you only choose who keeps the key
EFS at creation
≈
The lock is part of the foundation; decide before you pour concrete
Real AWS example · encrypt an existing RDS database
Snapshot, copy with a KMS key, restore, then switch the app endpoint.
Plan a short write freeze or use replication tools so no changes are lost between the snapshot and the cutover.
Exam-style scenario
A security audit finds that a production RDS for PostgreSQL instance and its read replica were created without encryption. The company must encrypt them with a customer managed key and later share snapshots with a DR account. What should the team do?
A. Modify the DB instance and enable encryption with the customer managed key.
B. Create an encrypted read replica, then promote it.
C. Take a snapshot, copy it with encryption using the customer managed key, restore a new instance from the copy, recreate the replica, and allow the DR account in the key policy.
D. Enable EBS encryption by default in the Region.
Show the worked answer
Answer: C
RDS encryption can only be set at creation. The snapshot-copy-restore path is the supported way, and a customer managed key is required to share snapshots.
Why not the others
A: Not possible on an existing instance.
B: You can’t have an encrypted replica of an unencrypted instance.
D: That setting is for EBS and never changes existing resources.
Encryption stops people reading data. Skill 5.2.2 is about stopping people changing or deleting it: write once, read many (WORM). In S3 that is Object Lock; in the original S3 Glacier vault API it is Vault Lock. Both are favourite answers when the question says “regulator”, “immutable” or “even the root user”.
Concept profile
S3 Object Lock
often confused with S3 Glacier Vault Lock
?What is it?
A WORM control on S3 object versions. A locked version can’t be overwritten or permanently deleted until its retention date passes or its legal hold is removed. Assessed for SEC 17a-4, CFTC and FINRA rules.
⚙How does it work?
Requires S3 Versioning; enabling Object Lock turns it on, and once on it can’t be turned off.
Set a default retention (mode + days or years) on the bucket, or a retain-until date per object version.
Choose governance (privileged users can bypass) or compliance (nobody can, not even root).
Add a legal hold for an open-ended freeze, independent of retention.
{ }Structure
Two retention modes and one legal hold.
⇄Object Lock vs S3 Glacier Vault Lock
S3 Object Lock
Glacier Vault Lock
Scope
Each object version
A whole Glacier vault
Control
Retention mode + date, legal hold
Vault Lock policy (IAM policy language)
Test before it sticks
Use governance mode first
24-hour in-progress window, then complete
After locking
Compliance: can extend, never shorten
Policy can never be changed or deleted
For new workloads
Yes (S3 Glacier storage classes too)
Legacy vault API, no new customers
!Common mistakes the exam tests
Thinking a plain DELETE fails: it returns 200 and adds a delete marker. Only deleting the specific locked version is denied (403).
Using compliance mode to test: a mistake there can’t be undone for years. Test with governance.
Thinking governance mode is safe from admins: anyone with s3:BypassGovernanceRetention who sends x-amz-bypass-governance-retention:true can delete.
Confusing a legal hold with retention: a hold has no date; it stays until someone with s3:PutObjectLegalHold removes it.
Letting the Glacier Vault Lock 24-hour window lapse: the in-progress policy is deleted and you start again.
✓Benefits and use cases
Broker-dealer records that must be kept unchanged for 7 years.
Ransomware protection for backups stored in S3.
Litigation hold on specific files.
Older material says Object Lock can only be turned on when the bucket is created. Today you can enable it on an existing versioned bucket (PutObjectLockConfiguration). Objects already in the bucket get no retention automatically: apply retention or legal holds to them with S3 Batch Operations. Once enabled, Object Lock can’t be turned off.
Think of it like · a bank’s safe-deposit boxes
Different ways to stop anyone touching a box.
AWS concept
Familiar thing
Governance mode
≈
Box sealed, but the branch manager’s master key can open it
Compliance mode
≈
Time-lock vault: no key opens it before the date, not even the CEO’s
Legal hold
≈
A court seal on the box with no end date until the judge lifts it
Delete marker
≈
A “closed” sign on the counter; the box behind it is untouched
Glacier Vault Lock 24 h
≈
A 24-hour trial of the vault rules before they are carved in stone
Real AWS example · lock a bucket by default for 7 years
New objects inherit compliance-mode retention automatically.
$ aws s3api put-object-lock-configuration --bucket trade-records \
--object-lock-configuration '{"ObjectLockEnabled":"Enabled",
"Rule":{"DefaultRetention":{"Mode":"COMPLIANCE","Years":7}}}'
$ aws s3api delete-object --bucket trade-records --key 2026/q3.csv \
--version-id 3HL4kqtJlcpXroDT
An error occurred (AccessDenied) when calling the DeleteObject operation
Use put-object-legal-hold --legal-hold Status=ON to freeze a specific version without a date.
Exam-style scenario
A financial firm must keep trade confirmations in S3 for 7 years in a way that no user, including the root user, can delete or overwrite them. The team also wants to try the configuration safely before committing. What should it do?
A. Enable versioning and MFA Delete.
B. Test Object Lock in governance mode on a test bucket, then set a default retention of 7 years in compliance mode on the production bucket.
C. Use a bucket policy that denies s3:DeleteObject to everyone.
D. Apply a legal hold to every object.
Show the worked answer
Answer: B
Only compliance mode stops even the root user. Governance mode is the safe way to rehearse because privileged users can still bypass it.
Why not the others
A: The root user with the MFA device can still delete versions.
C: The root user or any admin can edit the bucket policy.
D: Anyone with s3:PutObjectLegalHold can remove holds, and there is no 7-year date.
How the exam tests this
“Nobody, not even root, can delete”→ Compliance mode.
“Lock but let a few admins override”→ Governance mode + s3:BypassGovernanceRetention.
“Freeze with no end date (lawsuit)”→ Legal hold.
“Lock a Glacier vault policy forever”→ Vault Lock: initiate, test 24 h, complete.
“SEC 17a-4 WORM storage”→ S3 Object Lock.
Must remember
Object Lock needs versioning; protects versions.
Compliance: can’t delete or shorten, even root.
Governance bypass: permission + header.
Legal hold: no expiry, needs s3:PutObjectLegalHold.
The rest of skill 5.2.2 is about proving data wasn’t changed: keeping old versions, making deletes harder, checking files byte for byte, and signing code so only trusted builds run. These are quick wins when the question says “detect tampering” or “verify”.
Concept profile
Data integrity controls
often confused with Encryption
?What is it?
Controls that keep or prove the exact content of data: S3 Versioning, MFA Delete, checksums, CloudTrail log file integrity validation, and code signing with AWS Signer.
⚙How does it work?
Versioning keeps every version; overwrite or delete just adds a new version or delete marker. Once enabled it can only be suspended, never removed.
MFA Delete demands an MFA code to permanently delete a version or change versioning. Only the root user can enable it, with the CLI or API.
Checksums (CRC64NVME, CRC32, CRC32C, SHA-1, SHA-256, or Content-MD5) are checked by S3 on upload and stored for later checks.
CloudTrail log file validation writes hourly signed digest files so you can prove logs weren’t edited or deleted.
AWS Signer signs Lambda code and container images; a Lambda code signing configuration can block unsigned or untrusted code.
{ }Structure
Check on the way in, check on the way out, and chain the logs.
⇄Integrity controls vs Encryption
Integrity controls
Encryption
Question answered
Was it changed? Can it be undone?
Who can read it?
Stops a privileged delete
Object Lock / MFA Delete
No
Detects tampering
Checksums, digests, signatures
Only authenticated modes, not the main goal
Example service
Signer, CloudTrail validation
KMS, CloudHSM
Exam keyword
“tamper”, “verify”, “prove”
“confidential”, “unreadable”
!Common mistakes the exam tests
Trying to turn on MFA Delete in the console or as an IAM admin: root user, CLI/API only.
Thinking versioning alone stops ransomware: an attacker with delete-version permission can still remove versions. Add Object Lock or MFA Delete.
Forgetting log file validation must be enabled on the trail; it isn’t retroactive.
Setting the Lambda code signing policy to Warn when the requirement says block: use Enforce.
Confusing a checksum (detects accidental or malicious change) with encryption (hides content).
✓Benefits and use cases
Recover from accidental overwrite with a previous version.
Prove to auditors that CloudTrail logs are complete.
Only deploy Lambda code built by the release pipeline.
Think of it like · a notary office
How a notary proves a document is the real one.
AWS concept
Familiar thing
Versioning
≈
Keeping every draft in the archive, never shredding one
MFA Delete
≈
Shredding a draft needs the chief notary’s personal key fob
Checksum
≈
A fingerprint taken when the document arrives, compared when it leaves
CloudTrail digest chain
≈
A ledger where each page carries the seal of the page before
AWS Signer
≈
The notary’s stamp; Lambda refuses documents without it
Real AWS example · validate CloudTrail logs and enforce signed Lambda code
Attach the code signing config to each function; deployments of unsigned zips then fail.
Exam-style scenario
After an incident, investigators must prove that no CloudTrail log files in the central S3 bucket were modified or deleted during the last 90 days. The trail was configured last year with log file validation enabled. What should they do?
A. Compare object sizes in S3 Inventory reports.
B. Run aws cloudtrail validate-logs for the period, which checks the signed digest files and the hash of each log file.
C. Enable S3 Object Lock on the bucket now.
D. Search the logs with Athena for DeleteObject calls.
Show the worked answer
Answer: B
Log file validation creates hourly digest files signed with RSA that contain SHA-256 hashes of each log; validate-logs proves integrity and completeness.
Why not the others
A: Sizes don’t prove content is unchanged.
C: Good for the future, proves nothing about the past.
D: Shows API calls only if they were logged, and an attacker may have removed the evidence.
How the exam tests this
“Recover overwritten S3 object”→ Versioning.
“Extra factor to delete versions”→ MFA Delete (root, CLI).
Skill 5.2.3: keep data exactly as long as rules require, and no longer. Too short breaks compliance; too long costs money and widens the blast radius of a breach. The tools are S3 Lifecycle, Object Lock retention, EFS Lifecycle management and backup retention on services such as FSx for Lustre.
Concept profile
S3 Lifecycle configuration
often confused with S3 Object Lock retention
?What is it?
Bucket rules that act on objects automatically as they age: transition to cheaper storage classes and expire (delete) them. Rules can target a prefix, tags or object size.
⚙How does it work?
Transition actions, for example Standard → Standard-IA after 30 days → Glacier Flexible Retrieval after 90 days.
Expiration actions: current versions get a delete marker; NoncurrentVersionExpiration removes old versions.
AbortIncompleteMultipartUpload cleans up abandoned upload parts.
Rules run asynchronously; there can be a delay before an action happens.
{ }Structure
A typical 7-year retention rule.
⇄S3 Lifecycle vs S3 Object Lock retention
S3 Lifecycle
Object Lock retention
Purpose
Delete or move data when allowed
Stop deletion until allowed
Direction
Makes data go away
Makes data stay
Bypass
Anyone who can edit the rule
Governance: privileged; compliance: nobody
Together
Expire after retention ends
Lifecycle can’t remove locked versions
!Common mistakes the exam tests
Setting only an expiration on a versioned bucket: that adds delete markers but keeps every old version forever. Add NoncurrentVersionExpiration.
Using Lifecycle as a retention control: anyone who can edit the rule can shorten it. Use Object Lock to enforce minimum retention.
Ignoring minimum storage durations (for example Standard-IA 30 days, Glacier Flexible 90, Deep Archive 180): early deletion is still charged.
Forgetting that FSx for Lustre scratch file systems don’t support backups; use a persistent deployment type.
✓Benefits and use cases
Keep logs 1 year hot, 6 years in Deep Archive, then delete.
Delete temporary uploads after 7 days.
Minimise data kept, which reduces breach impact and cost.
EFS and FSx for Lustre
EFS Lifecycle management moves files that haven’t been accessed for a set number of days to the Infrequent Access or Archive storage classes, and can move them back to Standard on first access. It is about cost, not deletion; EFS has no built-in expiry, so retention and deletion of backups go through AWS Backup.
FSx for Lustre persistent file systems take automatic daily backups with a retention period you choose (up to 90 days) and support user-initiated backups that you keep until you delete them. For longer or centrally governed retention, manage them with AWS Backup plans.
Think of it like · an office filing system
Papers move and get thrown away on a schedule.
AWS concept
Familiar thing
Transition action
≈
Moving last year’s folders from the desk to the basement
Expiration action
≈
The shredding day written on each box
Noncurrent versions
≈
Old drafts in the back of the drawer that nobody shreds unless told
Object Lock
≈
A legal notice taped to the box: no shredding before 2033
EFS Lifecycle
≈
Files you haven’t opened in a month go to the cheap cabinet, and come back when you ask
Real AWS example · a versioned-bucket lifecycle rule
Move logs to cheaper storage, delete after 7 years, and clean old versions and parts.
Apply it with aws s3api put-bucket-lifecycle-configuration.
Exam-style scenario
A company must keep audit logs for at least 5 years and delete them soon after to limit exposure. A previous admin shortened a lifecycle rule, and logs were deleted after 1 year. What combination prevents early deletion while still removing logs after 5 years?
A. A lifecycle rule with 5-year expiration and an IAM policy denying PutLifecycleConfiguration to everyone.
B. Object Lock default retention of 5 years in compliance mode, plus a lifecycle rule that expires objects and noncurrent versions after 5 years.
C. S3 Versioning with MFA Delete only.
D. Glacier Deep Archive storage class only.
Show the worked answer
Answer: B
Object Lock enforces the minimum (nobody can delete early); Lifecycle does the clean-up once the lock has expired.
Why not the others
A: Admins can change IAM policies, so nothing is enforced.
C: Protects against deletes but never deletes anything, so the ‘delete after 5 years’ part fails.
D: Storage class changes cost, not retention.
How the exam tests this
“Move old data to cheaper storage”→ S3 Lifecycle transition.
“Delete after N days”→ Lifecycle expiration (+ noncurrent versions).
“Minimum retention nobody can shorten”→ Object Lock, not Lifecycle.
“EFS files rarely read”→ EFS Lifecycle to IA / Archive.
“FSx for Lustre retention”→ Automatic daily backups (≤ 90 days) or AWS Backup.
Skill 5.2.4 asks you to design backups that survive the worst day: an attacker with admin rights who encrypts or deletes everything. AWS Backup centralises backups for EBS, EC2, RDS, Aurora, DynamoDB, EFS, FSx, S3 and more; Vault Lock and logically air-gapped vaults make those backups untouchable.
Concept profile
AWS Backup Vault Lock
often confused with S3 Object Lock
?What is it?
A WORM setting on an AWS Backup vault. Recovery points can’t be deleted, and their lifecycle can’t be changed, before retention ends, even by the root user. Optional minimum and maximum retention make non-compliant backup jobs fail.
⚙How does it work?
Governance mode: users with enough IAM permissions can remove the lock.
Compliance mode: set --changeable-for-days (at least 3 days = 72 h grace time). During grace time you can change or remove the lock; after it, nobody (not even AWS) can.
--min-retention-days and --max-retention-days reject jobs outside that range; existing recovery points are unaffected.
Check Locked and LockDate with DescribeBackupVault.
{ }Structure
Back up locally, lock the vault, copy to a separate account.
⇄Backup Vault Lock vs S3 Object Lock
Backup Vault Lock
S3 Object Lock
Protects
Recovery points in a backup vault
Object versions in a bucket
Compliance grace
≥ 3 days, then immutable
None; immutable at once
Retention guardrail
Min / max retention days
Default retention on bucket
Legal hold
AWS Backup has separate legal holds
Yes, per version
Covers
Many services (EBS, RDS, EFS, DynamoDB…)
S3 only
!Common mistakes the exam tests
Keeping backups only in the same account: a compromised admin can delete the vault policy, the keys or the account. Copy to a separate account (or a logically air-gapped vault).
Testing compliance mode without noticing grace time: after LockDate it is permanent, and recovery points set to keep “Always” are kept forever.
Encrypting cross-account copies with an AWS managed key: copies to another account need a customer managed key.
Forgetting to test restores: a backup you can’t restore is not a backup (AWS Backup restore testing automates this).
Thinking Vault Lock protects against account closure: AWS deletes the contents after the 90-day post-closure period.
✓Benefits and use cases
Ransomware recovery with immutable, isolated copies.
Central backup policies across an organization with Organizations backup policies.
Prove compliance with Backup Audit Manager reports.
Logically air-gapped vaults
A logically air-gapped vault is always locked in compliance mode (minimum retention 7 days) and is encrypted with an AWS owned key by default, or a customer managed key from a separate recovery account. You share it with chosen accounts through AWS RAM so a clean account can restore directly, and with multi-party approval you can recover even if the vault-owning account is lost. Unencrypted Aurora, DocumentDB and Neptune clusters can’t be stored there.
Think of it like · a fire-proof off-site archive
How a company makes sure its records survive a fire or a thief.
AWS concept
Familiar thing
Backup plan
≈
The rule that a courier collects copies every night
Governance lock
≈
The archive door, but the head of security has the key
Compliance lock + grace time
≈
A time-lock you can still adjust for 3 days, then it is welded shut
Cross-account copy
≈
A second archive in another city, run by a different team
Air-gapped vault + RAM
≈
A sealed bunker; trusted partners can collect files without opening the original archive
Restore testing
≈
Fire drills: actually pulling a box out to check it’s readable
Real AWS example · lock a vault in compliance mode
3-day grace time, backups kept between 7 and 35 days.
Before LockDate you can still run delete-backup-vault-lock-configuration; after it, nothing can.
Exam-style scenario
A company fears ransomware where attackers obtain administrator credentials in the production account. Backups of EBS, RDS and DynamoDB must be impossible to delete for 35 days and must be restorable even if the production account is fully compromised. What should it do?
A. Take EBS and RDS snapshots with DLM and enable versioning.
B. Use AWS Backup with a backup plan that copies recovery points to a logically air-gapped vault (or a compliance-mode locked vault) in a separate recovery account, with 35-day minimum retention.
C. Store backups in the production account’s default vault with governance-mode Vault Lock.
D. Export all data to S3 with lifecycle expiration after 35 days.
Show the worked answer
Answer: B
Compliance-mode locking stops deletion even by root, and a separate account removes the dependency on the compromised one. Air-gapped vaults add RAM sharing for fast clean-room restores.
Why not the others
A: An admin in the same account can delete snapshots.
C: Governance mode can be removed by a privileged admin, and it’s in the compromised account.
D: No immutability; lifecycle rules can be changed.
How the exam tests this
“Backups can’t be deleted, even by root”→ Vault Lock compliance mode.
“Allow lock to be removed by admins”→ Governance mode.
“Change your mind window”→ Grace time ≥ 3 days (changeable-for-days).
“Restore if the account is compromised”→ Cross-account copy / logically air-gapped vault + RAM.
“Central backup rules across accounts”→ Organizations backup policies.
Must remember
Vault Lock: governance (removable) vs compliance (immutable after grace).
Backups protect against deletion; replication keeps a live second copy somewhere else. The exam pairs three tools with skill 5.2.4: S3 Replication (and its KMS traps), Amazon Data Lifecycle Manager for EBS snapshots and AMIs, and AWS DataSync for moving files with built-in integrity checks.
Concept profile
S3 Replication with SSE-KMS
often confused with AWS Backup cross-Region copy
?What is it?
Automatic, asynchronous copying of new object versions to another bucket in the same Region (SRR) or another Region (CRR), in the same or another account. Both buckets need versioning.
⚙How does it work?
An IAM replication role reads from the source and writes to the destination.
SSE-KMS and DSSE-KMS objects are skipped unless you set SseKmsEncryptedObjects: Enabled and a ReplicaKmsKeyID in the destination Region.
The role needs kms:Decrypt on the source key and kms:Encrypt on the destination key. SSE-C objects replicate with no extra setup.
Existing objects need S3 Batch Replication; S3 Replication Time Control (RTC) gives a 15-minute SLA.
{ }Structure
The two KMS settings that make encrypted objects replicate.
⇄S3 Replication vs AWS Backup cross-Region copy
S3 Replication
AWS Backup copy
What you get
Live copy, near real time
Point-in-time recovery points
Deletes
Delete markers optional; version deletes not replicated
Old points kept per lifecycle
Protects against
Region outage, latency
Deletion, corruption, ransomware
Immutability
Object Lock on destination
Vault Lock
Services
S3 only
Many services
!Common mistakes the exam tests
Leaving out the SSE-KMS selection criteria: PutBucketReplication succeeds but encrypted objects never copy.
Using a ReplicaKmsKeyID from the source Region: it must be in the destination Region (KMS keys are Regional).
Cross-account replication with an AWS managed key: needs a customer managed key the destination owner shares.
Expecting replication to copy objects that existed before the rule: use Batch Replication.
Treating replication as a backup: corruption or a delete marker can replicate too.
✓Benefits and use cases
Compliance copies in another Region.
Low-latency reads near users.
Copy logs into a separate security account’s bucket.
Amazon Data Lifecycle Manager (DLM)
DLM automates creating, keeping and deleting EBS snapshots and EBS-backed AMIs. Policies target volumes or instances by tag, run on a schedule, keep a count or age, and can copy snapshots to other Regions (with a destination KMS key) or share them with other accounts. It is the low-effort answer when only EBS is in scope; when the question spans several services or needs Vault Lock, pick AWS Backup. For extra protection, EBS snapshots can also be locked, and Recycle Bin retention rules let you recover snapshots and AMIs that were deleted by mistake.
AWS DataSync
DataSync moves data between on-premises storage (NFS, SMB, HDFS, object storage), other clouds and AWS (S3, EFS, FSx), and between AWS storage services. Data is encrypted in transit with TLS, and DataSync verifies integrity with checksums during the transfer and, optionally, compares source and destination at the end. It’s also the usual tool to copy data into a new encrypted EFS file system.
Think of it like · a library network
Ways a library keeps copies of its books safe.
AWS concept
Familiar thing
S3 Replication
≈
Every new book is photocopied to a branch in another city the same day
SseKmsEncryptedObjects
≈
A note saying “yes, also copy books in locked cases”; without it they are skipped
Replication role keys
≈
The courier needs the key to open case A and the key to lock case B
DLM
≈
A librarian who photographs tagged shelves every night and throws out photos older than 30 days
DataSync
≈
A moving company that counts and checks every box on arrival
Real AWS example · a DLM policy for tagged volumes
Daily snapshots of volumes tagged Backup=daily, keep 14, copy to another Region encrypted.
The KMS key for the copy lives in the target Region.
Exam-style scenario
A company replicates an S3 bucket from us-east-1 to eu-west-1. Objects uploaded with SSE-S3 appear in the destination, but objects encrypted with a customer managed KMS key never do, and no error is shown. What is the fix?
A. Enable S3 Bucket Keys on the destination bucket.
B. Add SourceSelectionCriteria with SseKmsEncryptedObjects enabled, set ReplicaKmsKeyID to a KMS key in eu-west-1, and give the replication role kms:Decrypt on the source key and kms:Encrypt on the destination key.
C. Make the KMS key a multi-Region key.
D. Turn on S3 Replication Time Control.
Show the worked answer
Answer: B
SSE-KMS objects are excluded by default. You must opt them in, name a destination-Region key, and give the role both KMS permissions.
Why not the others
A: Bucket Keys reduce KMS cost; they don’t enable replication.
C: S3 treats multi-Region keys as single-Region keys and still needs the replication settings.
D: RTC speeds up replication of objects that are already eligible.
Cheatsheet extras: S3 policy conflicts, ACLs and encryption in other services
The cheat sheet calls S3 policy conflicts an “exam essential topic”: what happens when an IAM policy, a bucket policy and an ACL disagree? It also lists encryption at rest for services this lecture didn’t cover (Lambda, Kinesis, SQS, Storage Gateway, Snow Family), and replication rules that have changed since it was written.
Concept profile
How S3 decides when policies conflict
often confused with “the most specific policy wins”
?What is it?
S3 joins together every policy that applies to a request: the caller’s IAM policies, the bucket policy, ACLs (if enabled), Block Public Access, SCPs/RCPs and VPC endpoint policies. Then the normal rule applies: default deny → explicit deny wins → otherwise an allow is needed.
⚙How does it work?
Same account: an allow in either the IAM policy or the bucket policy is enough, if nothing denies.
Cross-account: you need an allow in both the caller’s IAM policy and the bucket policy (or ACL).
An explicit Deny anywhere beats every Allow, including an Allow in another policy type.
Object Ownership = Bucket owner enforced (the default for new buckets since April 2023) turns ACLs off: only policies matter, and the bucket owner owns every object.
Block Public Access overrides public bucket policies and ACLs.
{ }Structure
Every policy is checked together; there is no “closest policy wins”.
⇄Real rule vs “the most specific policy wins”
Situation
Result
Why
IAM allows GetObject; bucket policy denies it
Denied
Explicit deny anywhere wins
Same account: no IAM allow; bucket policy allows the user
Allowed
One allow is enough in the same account
Other account: bucket policy allows, caller’s IAM doesn’t
Denied
Cross-account needs both sides
IAM denies the user S3 reads, but the object is public
Denied when signed with the user’s keys; allowed as an anonymous request through the public URL
Anonymous requests aren’t evaluated against the user’s IAM policy
Thinking an IAM Deny protects a public object: anyone can still read it anonymously. Fix the public access, not the IAM policy.
Giving cross-account access only in the bucket policy and forgetting the caller’s IAM policy.
Trying to use ACLs on a bucket with bucket owner enforced: requests that set ACLs fail.
Forgetting the KMS key policy: for SSE-KMS objects the caller also needs kms:Decrypt.
✓Benefits and use cases
Bucket policies are up to 20 KB and keep rules next to the data (for example “deny everyone except the HR role” on a performance-review bucket).
One deny statement in a bucket policy is easier than editing every user’s IAM policy.
Disabling ACLs removes a whole class of hidden permissions.
Encryption at rest in services not covered above
Service
At rest
Exam hint
Lambda environment variables
Always encrypted with an AWS managed key; choose a customer managed key, and use encryption helpers to encrypt values client-side so they are hidden in the console
“Hide a secret in env vars from console users” → helpers + customer managed key (better: Secrets Manager)
Kinesis Data Streams
Server-side encryption with a KMS key you pick; producers and consumers don’t handle keys
Use an interface VPC endpoint to keep traffic private
SQS / SNS
SSE with SQS-managed keys (SSE-SQS) or a KMS key
The sending service (for example S3 or EventBridge) needs kms:GenerateDataKey and kms:Decrypt on a customer managed key
Storage Gateway
Data in S3 encrypted with SSE-S3 by default, or SSE-KMS; TLS in transit
iSCSI volumes can use CHAP authentication
Snow Family
Data encrypted on the device with keys from KMS; keys are never stored on the device; tamper-resistant with a TPM
Device unlocked with a manifest + unlock code
EC2 instance store
NVMe instance store volumes are encrypted with hardware keys; data is lost when the instance stops
Not a place for data you must keep
Older material says S3 replication does not copy SSE-C objects and never copies objects that existed before the rule. Today SSE-C objects replicate, and existing objects can be copied with S3 Batch Replication. Still true: SSE-KMS objects need you to opt in (SseKmsEncryptedObjects) and give the role the source and destination keys; deletes of a specific version are never replicated.
Think of it like · entry rules for an office building
Several guards check you, and any one of them can say no.
AWS concept
Familiar thing
Default deny
≈
Nobody gets in without a pass
Explicit deny
≈
Your name is on the banned list at any desk: you are out
IAM policy
≈
The pass your employer gave you
Bucket policy
≈
The guest list kept by the building owner
Cross-account
≈
Visitors from another company need their own pass and to be on the guest list
Public object
≈
A poster in the street window: anyone can read it without entering
Real AWS example · a deny that beats every allow
A bucket policy that blocks everyone except one role, whatever their IAM policies say.
An administrator with s3:* in IAM is still denied. Use aws:PrincipalArn (not NotPrincipal) so role sessions match.
Exam-style scenario
A user’s IAM policy has an explicit Deny for s3:GetObject on all buckets. The user can still download a file from a company bucket by pasting its S3 URL into a browser, without signing in. Why?
A. Bucket policies always override IAM policies.
B. The object is publicly readable, so the browser request is anonymous and the user’s IAM policy isn’t evaluated.
C. S3 caches the old permissions for 24 hours.
D. The object ACL is more specific than the IAM policy.
Show the worked answer
Answer: B
An unsigned request comes from the anonymous principal. The user’s IAM Deny only applies to requests signed with the user’s credentials. Turn on Block Public Access.
Why not the others
A: An explicit deny in any policy wins for the same principal.
C: No such cache.
D: “More specific” doesn’t matter in AWS policy evaluation.
How the exam tests this
“IAM allows, bucket policy denies”→ Denied.
“Grant another account access”→ Bucket policy and their IAM policy.
“Stop ACLs from granting access”→ Object Ownership bucket owner enforced.
“Encrypt Lambda env vars so console users can’t read them”→ Encryption helpers + customer managed key.
“Replicate objects that already exist”→ S3 Batch Replication.
Must remember
Default deny → explicit deny wins → need an allow.
Cross-account S3 = two allows.
New buckets: ACLs disabled (bucket owner enforced).
Encryption decides who can read, locks decide who can delete, and isolated copies decide whether you can recover, so a good answer usually needs all three.
10
Must-remember cheat sheet
1. S3 default since Jan 2023: SSE-S3.
2. SSE-KMS read = s3:GetObject + kms:Decrypt.
3. Bucket Key: up to 99% fewer KMS calls; context = bucket ARN.
4. SSE-C: off for new buckets (Apr 2026), HTTPS only.
5. New default ≠ re-encrypt; use Batch Operations.
16. CRR + SSE-KMS: opt in, destination-Region key.
17. S3 conflicts: explicit deny wins; cross-account needs two allows; public objects bypass IAM denies.
18. New buckets: ACLs disabled; existing objects replicate with Batch Replication.
11
Core quiz
Check the basics first. Pick an answer, then press Check.
12
Hard quiz
Harder than most real exam questions on purpose, with one “choose two” and one matching question. Aim for 9 out of 12 before Day 4.
13
Practice test questions (from your mock exams)
These 10 questions match today’s topics. 8 come from your own mock exams (the “practice tests” folder); the wording was tidied, and where a mock answer was out of date or wrong, the explanation says so, with the mock and question number at the end. The last 2 are new exam-style questions (marked “New question”) written in October 2026 from the SCS-C03 exam guide and current AWS documentation, to cover recent changes.
14
Hands-on lab (30 minutes, low cost)
Create a bucket with default SSE-KMS (a customer managed key) and a Bucket Key. Upload a file, then check head-object for ServerSideEncryption and BucketKeyEnabled.
Create a second bucket with Object Lock, set default retention to 1 day in governance mode (never compliance in a personal account). Try to delete a version, then delete it with --bypass-governance-retention.
Put a legal hold on another version and see that bypass doesn’t help until you remove the hold.
Run aws ec2 get-ebs-encryption-by-default in two Regions and turn it on where it is off.
In AWS Backup, create a vault, back up a small DynamoDB table on demand, and add a governance-mode Vault Lock with min retention 1 day. Remove the lock afterwards.
If your trail has log file validation, run aws cloudtrail validate-logs for the last day.
Clean up: delete test objects after retention ends, the backup, the vault and the buckets.