SaveMyCert
Log in
5 of 5 free questions left today·for 30 a day
Security and Compliance

Data Protection on AWS: KMS, ACM, Secrets, and Security Services (SOA-C03)

26 min readSOA-C03 · Security and ComplianceUpdated

Data and infrastructure protection is the operational discipline of classifying what you store, encrypting it at rest and in transit, keeping secrets out of code, and remediating the findings your security services raise. Task 4.2 of the SOA-C03 exam tests all of it from the operator's seat: enforcing a tag-based classification scheme, enabling default EBS encryption per Region, working the snapshot-copy-restore sequence for an unencrypted RDS instance, diagnosing KMS access and key-state errors, rotating keys, keeping ACM certificates renewing and monitored, enforcing TLS to S3, load balancers and databases, choosing between Secrets Manager and Parameter Store, and telling GuardDuty, Inspector, Macie, Config, AWS Security Agent and Security Hub CSPM apart. It closes with automated remediation across accounts and containing a compromised instance without losing evidence. This lesson covers skills 4.2.1 through 4.2.5.

What you’ll learn
  • Implement a data classification scheme with tag policies and tag-scoped Config rules, and verify it in S3 with Macie automated discovery and discovery jobs.
  • Configure encryption at rest with KMS — default EBS encryption per Region, key policies, cross-account access, rotation and key states — and troubleshoot KMS errors.
  • Encrypt existing EBS volumes and RDS instances with the snapshot, encrypted-copy, restore sequence, and choose between SSE-S3, aws/s3 and customer managed keys.
  • Keep ACM certificates renewing and monitored, and enforce TLS on S3, Application Load Balancers and RDS.
  • Select Secrets Manager or Parameter Store (and its tier), and share secrets across accounts correctly.
  • Distinguish GuardDuty, Inspector, Macie, Config, AWS Security Agent and Security Hub CSPM, and wire findings into automated remediation and evidence-preserving containment.

Classify first, then protect

A data classification scheme decides how much protection each dataset gets, and every control in this lesson hangs off it. A typical three-tier scheme — public, internal, and confidential — maps directly to controls: public data needs integrity but not secrecy; internal data gets baseline encryption and private access; confidential data (PII, credentials, financial records) gets customer managed KMS keys, tight resource policies, access logging, and active monitoring.

Classification lives in tags

Operationally, classification is a tag. A consistent tag such as DataClassification=confidential on buckets, volumes, and databases is something machines can act on: IAM policies can condition on it, automation can filter on it, and AWS Config rules can be scoped to it. A spreadsheet of classifications drives no control at all. Three mechanisms turn the tag into an enforced scheme:

  • Tag policies (AWS Organizations) define the standard: the exact capitalization of the tag key and its allowed values. Attached to the organization root or an OU, a tag policy is inherited by every account beneath it, and its compliance report lists resources whose tags break the standard (for example confidential versus Confidential versus CONF). You can also turn on enforcement for chosen resource types so noncompliant tagging operations are refused. Tag policies standardize tags; they do not add missing ones or protect the data.
  • Tag-scoped AWS Config rules apply the tier's controls. A Config rule's scope can be limited to resources carrying a tag key, or a key and value, so a rule such as "EBS volumes must be encrypted" evaluates only DataClassification=confidential resources and reports their compliance continuously.
  • Organization Config rules deploy that rule to every member account in one action, from the management account or from a Config delegated administrator account (typically the security account), which then sees compliance across the organization. That is the organization-native alternative to pushing per-account rules with CloudFormation StackSets.

Amazon Macie: checking that the labels are true

Amazon Macie is the discovery tool that keeps the scheme honest for S3. Macie uses machine learning and pattern matching to find sensitive data — names, credentials, card numbers, and other PII — inside S3 objects, and it reports where your classification is wrong: the "internal" bucket that actually holds customer PII. Macie also evaluates bucket-level posture, flagging buckets that are publicly accessible or unencrypted. When a requirement says "identify sensitive data stored in S3," the answer is Macie — not GuardDuty, which watches for threats, and not Inspector, which scans for vulnerabilities. Macie runs in two complementary modes:

Automated sensitive data discoverySensitive data discovery job
ScopeYour whole S3 estate (with exclusions)Buckets or criteria you select
How much it readsDaily, a representative sample of objectsEvery eligible object when sampling depth is 100%
When it runsContinuously, once enabledOne-time, or scheduled daily, weekly, or monthly
OutputSensitivity scores per bucket and findingsFindings for each affected object
Use it forBroad, low-cost visibility and prioritizingComplete coverage of specific data, such as before sharing it

A scheduled job is incremental: its first run analyzes the objects that already exist only if you select include existing objects, and each later run analyzes objects created or changed since the previous run. Set the sampling depth to 100% when every object must be inspected.

Encryption decides what Macie can read. Objects under SSE-S3 or the AWS managed key aws/s3 are analyzed normally. Objects under a customer managed KMS key are analyzed only if that key's policy allows the Macie service-linked role to call kms:Decrypt; otherwise they are reported as not analyzed. Objects encrypted with SSE-C (customer-provided keys) or encrypted client-side cannot be analyzed at all. Macie findings flow to EventBridge and Security Hub, so a discovery can trigger the same remediation loop as any other finding.

Encryption at rest with AWS KMS

KMS underpins encryption at rest across AWS, and operations work focuses on configuration and access, not cryptography. Services use envelope encryption: your KMS key encrypts data keys, and data keys encrypt the actual data.

Default EBS encryption

Your first account-level move is enabling EBS encryption by default. It is a setting per account and per Region: turning it on in one Region does nothing in another, and the default key you choose must be a KMS key in that same Region (the AWS managed key aws/ebs unless you pick a customer managed key). Once it is on, every new volume and snapshot copy in that Region is encrypted and unencrypted volumes can no longer be created there, with no application changes required. It does not touch volumes that already exist — those need the walkthrough below.

Choosing a customer managed key as the default has one well-known trap. Instances launched by Amazon EC2 Auto Scaling create their volumes through the Auto Scaling service-linked role, so the key policy must allow that role to use the key — including kms:CreateGrant. Without it, instances that administrators launch by hand work fine while every Auto Scaling launch terminates immediately with Client.InternalError.

Key policies, IAM, grants, and cross-account use

Every KMS key has a resource-based key policy, and it is the primary authority: if the key policy does not permit an action — directly, or by delegating to IAM with the standard "enable IAM policies" statement — no IAM policy can grant it. Grants provide temporary, programmatic access and are commonly created by AWS services on your behalf (EBS and Auto Scaling use them).

Cross-account key use requires both sides: the key policy in the owning account must allow the external account or role, and the caller's IAM policy must allow the KMS actions on the key's full key ARN. An alias ARN in an IAM policy's Resource element does not authorize use of the key behind it. Because both sides are needed, AWS managed keys (aws/s3, aws/ebs, aws/secretsmanager and the like) can never be used cross-account: their key policies are owned by AWS and cannot be edited. Anything shared across accounts must be encrypted with a customer managed key.

Key rotation

Rotation replaces the key material behind a key while keeping the same key ID and ARN; KMS keeps old material so existing ciphertext still decrypts, and nothing needs to be re-encrypted.

Key typeHow rotation works
Customer managed key, KMS-generated materialTurn on automatic rotation with a rotation period from 90 to 2,560 days (365 by default). You can also rotate on demand at any time.
Customer managed key with imported material (origin EXTERNAL)No automatic rotation. Import new key material into the same key, then rotate it on demand (RotateKeyOnDemand). The key ARN does not change.
Asymmetric, HMAC, or custom key store keysNot rotatable in KMS: create a new key and repoint the alias (callers must use the alias, not the key ARN).
AWS managed keysAWS rotates them every year on its own schedule; you cannot change or disable it.

Key states

A key must be Enabled to be used. A Disabled key fails cryptographic calls with DisabledException; a key in Pending deletion (the 7–30 day waiting period after ScheduleKeyDeletion) fails them with KMSInvalidStateException. Neither is an AccessDenied error. During the waiting period you can call CancelKeyDeletion, which returns the key to the Disabled state, so you must also call EnableKey before workloads can use it again. After the waiting period ends the key and anything encrypted only under it are unrecoverable.

Troubleshooting a KMS failure

When a workload throws a KMS error, triage in order: the key state (DisabledException or KMSInvalidStateException is a key-state problem, not a permissions problem), the key policy (does it allow this principal, or delegate to IAM?), the caller's IAM policy (does it allow kms:Decrypt or kms:GenerateDataKey on this key ARN?), then grants. An EC2 instance failing to use an encrypted volume is almost always missing KMS permissions on the volume's key, not EBS permissions.

Walkthrough: encrypting resources that already exist

You cannot switch on encryption in place for an existing EBS volume or RDS instance. The fix is always the same shape: snapshot, copy with encryption, restore.

Scenario: a production RDS MySQL instance is unencrypted and a new compliance requirement says every database must be encrypted with a customer managed key. The sequence:

  1. Take a snapshot of the unencrypted instance.
  2. Copy the snapshot, enabling encryption on the copy and selecting the KMS key. The encrypted copy is the pivot.
  3. Restore a new DB instance from the encrypted snapshot copy.
  4. Cut the application over — update the connection endpoint or rename the instances — during a maintenance window, because writes made after the snapshot will not carry over unless you re-sync them (for example with replication from the old instance until cutover).
  5. Verify the new instance, then delete the old one.

RDS rules out the shortcuts. It does not allow:

  • turning on encryption for an existing unencrypted DB instance;
  • restoring an unencrypted snapshot directly to an encrypted DB instance — only the encrypted copy works;
  • creating an encrypted read replica of an unencrypted DB instance (or an unencrypted replica of an encrypted one).

EBS follows the same pattern, with a little more flexibility: snapshot the volume, copy the snapshot with encryption enabled (CopySnapshot with Encrypted and a KmsKeyId) — or create an encrypted volume straight from the unencrypted snapshot — then stop the instance and swap the volumes. Enable default EBS encryption first so nothing new is ever created unencrypted again.

S3: choosing the key

S3 is gentler: every new object is encrypted at rest automatically, with SSE-S3 as the baseline even when the bucket has no encryption configured and the upload sends no encryption headers. Changing a bucket's default encryption only affects new writes — existing objects keep their original encryption until you copy them over themselves. The real decision is which key controls decryption:

SSE-S3SSE-KMS, AWS managed key aws/s3SSE-KMS, customer managed key
Who controls the key policyNo key policy (S3 owns the keys)AWS — fixed, cannot be editedYou
Restrict decryption to chosen principalsNo — S3 permissions alone decideNo — any principal in the account allowed by S3 and IAM can use itYes, in the key policy
CloudTrail record of each key useNoYesYes
Cross-account readersYes, via bucket policyNoYes, when the key policy allows them

S3 Bucket Keys reduce SSE-KMS cost and request volume by deriving a short-lived bucket-level key from your KMS key instead of calling KMS for every object. They change cost, not authority: access is still governed by the underlying KMS key's policy, so enabling a Bucket Key does not make aws/s3-encrypted objects readable from another account.

Encryption in transit with ACM

AWS Certificate Manager issues free public TLS certificates and deploys them to the services that terminate TLS for you: Elastic Load Balancing, CloudFront, and API Gateway. You never handle the private key; ACM manages storage, deployment, and renewal, which is exactly what makes it operationally safe.

Renewal

Request certificates with DNS validation: ACM gives you a CNAME record, you publish it in Route 53 (one click when the hosted zone is in the same account), and the certificate validates and then renews automatically for as long as the record stays in place. Email validation requires a human to respond at renewal time — avoid it. ACM's managed renewal keeps the same certificate ARN and redeploys the renewed certificate to the integrated services that use it, so no listener or distribution needs to be touched.

Which certificates renew themselves:

  • ACM-issued public certificates — yes, while DNS validation still succeeds. The classic expired-certificate incident is a deleted validation CNAME.
  • Private certificates issued through AWS Private CA and requested in ACM — yes, ACM renews them without validation.
  • Imported certificates (from any outside CA) — never. You must obtain a new certificate and re-import it into the same ARN before expiry.
  • Certificates in the IAM certificate store — never; IAM only stores them, and nothing monitors or renews them.

Monitoring expiry

ACM publishes the DaysToExpiry CloudWatch metric per certificate, issued and imported alike, so a CloudWatch alarm can page before a certificate lapses. ACM also sends events to EventBridge:

EventWhenImported certificates?
ACM Certificate Approaching ExpirationDaily, starting a configurable number of days before expiry (the account's DaysBeforeExpiry setting, changed with PutAccountConfiguration)Yes
ACM Certificate ExpiredWhen a certificate expiresNo
ACM Certificate Renewal Action RequiredWhen managed renewal needs you to act (for example, fix validation)No

One EventBridge rule on Approaching Expiration that targets SNS therefore covers every certificate in the account and Region — including ones added later — without per-certificate alarms. The AWS Config managed rule acm-certificate-expiration-check is another account-wide option.

Enforcing TLS

On S3, add a bucket policy that denies all actions when aws:SecureTransport is false — plain HTTP requests are rejected outright, whatever else allows them. On an Application Load Balancer, keep port 80 open but configure its listener as a redirect to HTTPS, so clients are upgraded rather than stranded.

On Amazon RDS, the server enforces TLS through a parameter in a custom DB parameter group (the default group cannot be edited): require_secure_transport = ON for MySQL and MariaDB, and rds.force_ssl = 1 for PostgreSQL and SQL Server (newer PostgreSQL versions already default to 1). Enforcement only guarantees encryption; to prove the client reached the genuine endpoint, the client must verify the server certificate against the RDS certificate bundle — ssl-mode=VERIFY_IDENTITY for MySQL clients, sslmode=verify-full for PostgreSQL clients.

Finally, know the trade-off between terminating TLS at the load balancer — simpler certificate management and offloaded crypto, but plaintext between the load balancer and targets — and end-to-end encryption, where the ALB re-encrypts to HTTPS targets. A requirement that traffic be "encrypted in transit at every hop" is pointing you at end-to-end.

Storing secrets: Secrets Manager versus Parameter Store

Secrets never belong in code, user data scripts, AMIs, or plaintext environment files — you cannot protect what has already leaked into an artifact. Workloads fetch them at runtime, over an IAM-authorized API call using their instance profile or task role, from one of two services.

AWS Secrets Manager is purpose-built for secrets: KMS-encrypted storage, fine-grained IAM and resource-policy control, and — its defining feature — automatic rotation. For Amazon RDS, Aurora, Redshift, and DocumentDB there are managed rotation templates; other secrets rotate through a custom Lambda rotation function (or, for onboarded SaaS partners, managed external secrets that need no Lambda). It charges per secret per month.

For a new RDS or Aurora database, the least-effort option is RDS-managed master user passwords: turn on the option to manage the master password in Secrets Manager and RDS generates the password, stores it in a secret it owns, and rotates it on a schedule (every seven days by default) without any rotation function for you to maintain.

Systems Manager Parameter Store stores configuration, and its SecureString type is a KMS-encrypted parameter — a perfectly good home for a static secret. It has two tiers:

Standard tierAdvanced tier
CostNo additional chargeCharged per parameter per month (plus higher-throughput API charges)
Value sizeUp to 4 KBUp to 8 KB
Parameter policiesNoYes — Expiration, ExpirationNotification, NoChangeNotification

Parameter policies only delete or notify: an expiration policy removes the parameter at a time you set, and the notification policies send EventBridge events. None of them changes the underlying credential, so they are not rotation. Parameter Store has no native rotation at all.

The selection logic: credentials that must rotate automatically — database passwords, API keys under a rotation policy — go to Secrets Manager; static secrets where cost matters and rotation is not required go to a standard-tier SecureString parameter. Both integrate with IAM for least-privilege reads and encrypt with KMS keys.

Sharing a secret with another account

Cross-account access to a Secrets Manager secret needs three things: a resource-based policy on the secret that allows the other account's role secretsmanager:GetSecretValue; a customer managed KMS key for the secret whose key policy lets that role decrypt (a secret under the default aws/secretsmanager key cannot be read from another account, because that key policy cannot be changed); and the role's own IAM permissions for both. Secret replication does not solve this — it copies a secret to other Regions of the same account, not to other accounts.

The findings services: GuardDuty, Inspector, Config, and Security Hub

Skill 4.2.5 is about configuring reports and remediating findings, so know exactly what each service finds.

Amazon GuardDuty is threat detection. It continuously analyzes CloudTrail events, VPC Flow Logs, and DNS query logs — no agents, no traffic interception — and raises findings for active threats: an EC2 instance communicating with a cryptocurrency-mining pool, credentials used from an anomalous location, port scanning, or data exfiltration patterns. GuardDuty detects; it does not prevent or block — remediation is a separate step you automate.

Amazon Inspector is vulnerability management. It continuously scans EC2 instances (via the Systems Manager agent or agentless snapshot scanning), ECR container images, and Lambda functions for known CVEs and unintended network reachability, prioritizing findings by severity. Inspector tells you what could be exploited; GuardDuty tells you what is being attacked.

AWS Config contributes configuration compliance: rule evaluations — unencrypted volumes, security groups open to SSH from anywhere, drifted settings — plus a configuration timeline that records how each resource changed over time.

AWS Security Agent, named in the exam guide alongside these services, works on applications rather than account telemetry: it performs on-demand penetration testing of applications, with security code scanning and threat modeling of designs offered in preview, reporting the security issues it finds so they can be fixed. It does not monitor logs for live threats (GuardDuty) or inventory CVEs across a fleet (Inspector).

Security Hub CSPM and the new Security Hub

Since December 2025 there are two services with the Security Hub name. AWS Security Hub CSPM is the original service under a new name: it runs security standards (such as AWS Foundational Security Best Practices) made of controls, computes a security score, aggregates findings from GuardDuty, Inspector, Macie, Config, and partner tools in the AWS Security Finding Format (ASFF), and supports a delegated administrator for the organization. The new AWS Security Hub correlates findings from those security services into prioritized exposures, using the Open Cybersecurity Schema Framework (OCSF). When a requirement is about standards, controls, a security score, or ASFF findings aggregation, it is Security Hub CSPM.

Operating Security Hub CSPM across an estate involves three features:

  • Delegated administrator: one account (usually the security account) manages Security Hub CSPM for every member account in the organization and sees their findings.
  • Cross-Region aggregation: designate a home Region and link other Regions to it; findings, updates, and insights from the linked Regions then appear in the home Region. Security Hub CSPM must still be enabled in each linked Region — aggregation centralizes viewing, it does not replace the Regional service.
  • Automation rules: created by the administrator account, Regional, they match findings on criteria such as resource tags, control, or account, and update fields such as severity or set the workflow status to SUPPRESSED. Use one to silence findings on resources that are deliberately exempt (for example, tagged as an approved exception) while the control keeps reporting every other resource. Disabling the control instead stops the check for every resource in that account and Region.

Choosing the right security service

Most Task 4.2 questions reduce to picking the service whose job matches the symptom. Anchor on what each one examines and what it produces:

Question you are answeringServiceWhat it produces
Is something attacking or abusing my account right now?Amazon GuardDutyThreat findings from CloudTrail, VPC Flow Logs, and DNS logs
Do my instances, images, or functions carry known vulnerabilities?Amazon InspectorCVE and network-reachability findings for EC2, ECR images, and Lambda
Is sensitive data sitting in my S3 buckets?Amazon MacieSensitive-data findings (PII, credentials) for S3 objects
Are my resources configured the way policy requires, and how did they change?AWS ConfigCompliance evaluations against managed or custom rules, plus configuration history
Does my application have exploitable weaknesses in its code or design?AWS Security AgentPenetration-test, code-scanning, and threat-model results for an application
Where do I see all of it in one place, scored against a standard?AWS Security Hub CSPMAggregated findings, security standards, and scores across accounts and Regions

The services overlap in vocabulary, not in function. GuardDuty and Inspector both mention EC2, but only Inspector reports CVEs and only GuardDuty reports active compromise. Macie and GuardDuty both produce "findings," but Macie only ever examines data in S3. Security Hub CSPM generates standards findings of its own, yet it is never the primary detector — if a requirement describes one specific symptom, pick the specialist; if it asks for one consolidated view, a security score, or cross-account aggregation, pick Security Hub CSPM.

From finding to fix: the automated remediation loop

A finding that sits unread in a console is not remediation. Every service in this lesson — GuardDuty, Inspector, Macie, Config, and Security Hub — publishes its findings as events to Amazon EventBridge, which makes the operational pattern uniform:

  1. Match: an EventBridge rule filters findings by source, type, and severity — for example, GuardDuty findings above a severity threshold.
  2. Notify: route matched findings to an SNS topic so the on-call engineer always hears about it, whatever else happens.
  3. Remediate: invoke a Lambda function or a Systems Manager Automation runbook that performs the fix — isolate a compromised instance, revoke an open security group rule, or enable a bucket's Block Public Access.

Multi-account remediation

In a GuardDuty organization, findings from member accounts are also delivered to the administrator account, in the same Region where they were generated. Central automation therefore lives in the administrator account, with one EventBridge rule in each Region GuardDuty runs in (EventBridge rules are Regional), and a runbook or function that assumes a remediation role in the affected member account to act on its resources. Nothing has to be deployed per member account except that role.

Config remediation and Security Hub custom actions

AWS Config remediation is attached to a Config rule: when the rule marks a resource noncompliant, the associated SSM Automation runbook runs, automatically or on demand, with no EventBridge rule required. It is driven only by Config rule evaluations — a GuardDuty or Inspector finding cannot trigger it, so threat findings go through EventBridge instead. Security Hub CSPM adds custom actions, which let an analyst send selected findings to EventBridge with one click for semi-automated response.

Two operational judgments matter. First, automate reversible containment freely — isolation, disabling credentials, notifications — but keep a human approval step in front of destructive actions. Second, remediation without a record is a lost audit trail: have the runbook tag what it touched and feed your ticketing flow. Detection → EventBridge (or a Config rule) → runbook is the same loop whether the trigger is a threat, a vulnerability, sensitive data, or configuration drift.

Containing a compromised instance without destroying evidence

Containment means cutting a compromised instance off from the network while keeping everything an investigation needs. The standard sequence:

  1. Isolate it: replace its security groups with an isolation security group that has no rules (or only a rule for your forensics host), and detach it from load balancers and Auto Scaling (suspend processes or set it to standby) so it is not replaced or terminated.
  2. Preserve evidence: create EBS snapshots of every attached volume, tag the instance as under investigation, and capture memory if your tooling allows. Keep the instance running — stopping or terminating it destroys the contents of memory (and instance store volumes), which often hold the most useful evidence.
  3. Revoke the credentials it may have exposed, such as its role's active sessions or leaked access keys.

Security groups have one property that matters here: they are stateful, and a change to them does not interrupt connections that are already being tracked. Swapping in the isolation group blocks new connections, but an attacker's existing session can continue. Network ACLs are stateless and evaluate every packet, so to cut an in-progress session immediately, add NACL deny entries on the instance's subnet for the attacker's address (inbound and outbound) — knowing that a NACL affects every instance in that subnet.

Tip. Task 4.2 scenarios map symptoms to services and sequences. Classification: tag policies standardize the tag, tag-scoped (organization) Config rules enforce and report, Macie automated discovery versus a 100%-depth job for full coverage. Encryption at rest: default EBS encryption per Region and the Auto Scaling service-linked role on a customer managed default key; the snapshot → encrypted copy → restore sequence and what RDS refuses; SSE-KMS with a customer managed key when decryption must be restricted or shared cross-account; KMS AccessDenied (key policy first, key ARN not alias) versus key-state errors (DisabledException for a disabled key; KMSInvalidStateException for pending deletion: cancel, then enable); rotation periods, imported material and AWS managed keys. In transit: DNS validation, imported certificates, DaysToExpiry and ACM EventBridge events, aws:SecureTransport, ALB redirects, RDS TLS parameters with certificate verification. Secrets: Secrets Manager rotation and RDS-managed passwords, Parameter Store tiers, cross-account secrets. Findings: GuardDuty, Inspector, Macie, Config, AWS Security Agent, Security Hub CSPM aggregation and automation rules, EventBridge remediation in the administrator account, Config remediation from rules, and containment with snapshots and NACLs.

Key takeaways
  • Classification is a tag: tag policies standardize it, tag-scoped (organization) Config rules enforce and report on it, and Macie checks that S3 data matches its label.
  • Macie automated discovery samples daily for broad coverage; a discovery job with 100% sampling depth inspects every object in the buckets you choose. Customer managed keys must let the Macie role decrypt.
  • Default EBS encryption is per account and Region; a customer managed default key must allow the Auto Scaling service-linked role, including kms:CreateGrant.
  • The KMS key policy is the primary authority; cross-account use needs the key policy and the caller's IAM policy on the key ARN, so AWS managed keys never work cross-account.
  • Automatic rotation runs every 90–2,560 days; imported material rotates on demand after importing new material into the same key; AWS managed keys rotate yearly on AWS's schedule.
  • You cannot encrypt an existing EBS volume or RDS instance in place, restore an unencrypted RDS snapshot to an encrypted instance, or create an encrypted replica of an unencrypted instance.
  • ACM renews issued and Private CA certificates under the same ARN; imported and IAM-stored certificates never renew — monitor DaysToExpiry or the Approaching Expiration event.
  • Enforce TLS with aws:SecureTransport on S3, an HTTP-to-HTTPS redirect on an ALB, and require_secure_transport or rds.force_ssl on RDS.
  • Secrets Manager for rotation (or RDS-managed master passwords); a standard-tier SecureString for static secrets. Parameter policies notify or expire, they never rotate.
  • Findings → EventBridge → SNS plus runbook; Config remediation runs only from Config rules. Security groups don't cut tracked connections — use a NACL deny, and never stop the instance before capturing evidence.

Frequently asked questions

How do I encrypt an existing unencrypted RDS instance?

You cannot enable encryption on an existing RDS instance, restore an unencrypted snapshot directly to an encrypted instance, or create an encrypted read replica of it. Take a snapshot, copy the snapshot with encryption enabled and your chosen KMS key, restore a new DB instance from the encrypted copy, then cut the application over to the new endpoint during a maintenance window and delete the old instance. Writes made after the snapshot must be re-synced, so plan the cutover carefully.

How does AWS KMS key rotation work?

Rotation changes a key's material but keeps its key ID and ARN, and KMS keeps the old material so existing ciphertext still decrypts. For customer managed keys with KMS-generated material you can turn on automatic rotation with a period of 90 to 2,560 days (365 by default) and also rotate on demand. Keys with imported material do not rotate automatically: you import new material into the same key and rotate on demand. AWS managed keys rotate every year on a schedule you cannot change.

Why can't another account decrypt data encrypted with an AWS managed KMS key?

Cross-account KMS use needs two permissions: the key policy in the owning account must allow the other account or role, and the caller's IAM policy must allow the KMS action on the key's ARN. The key policies of AWS managed keys such as aws/s3, aws/ebs and aws/secretsmanager are controlled by AWS and cannot be edited, so they can never allow another account. Re-encrypt shared data with a customer managed key whose key policy grants the other account access.

What is the difference between Amazon GuardDuty and Amazon Inspector?

GuardDuty is threat detection: it analyzes CloudTrail events, VPC Flow Logs, and DNS query logs to find active malicious behavior, such as a compromised instance mining cryptocurrency or credentials used anomalously. Inspector is vulnerability management: it scans EC2 instances, ECR container images, and Lambda functions for known CVEs and unintended network exposure. Inspector finds what could be exploited; GuardDuty finds what is being exploited. Neither one blocks traffic.

Should I use Secrets Manager or Parameter Store for secrets?

Use AWS Secrets Manager when a credential must rotate automatically: it has managed rotation for RDS and other databases, custom rotation for other secrets, and RDS can manage a database master password in it for you, at a per-secret monthly cost. Use a Systems Manager Parameter Store SecureString in the standard tier for static secrets: it is KMS-encrypted and free. The advanced tier adds larger values and parameter policies for a fee, but parameter policies only expire or notify; they never rotate the credential.

Why did my ACM certificate expire without renewing?

If ACM issued it with DNS validation, the validation CNAME record was probably deleted, so ACM could not revalidate; restore the record. If the certificate was imported into ACM, or uploaded to the IAM certificate store, nothing renews it: obtain a new certificate and re-import it before expiry. Monitor expiry with the DaysToExpiry CloudWatch metric or an EventBridge rule on the ACM Certificate Approaching Expiration event, both of which cover imported certificates.

What is the difference between AWS Security Hub CSPM and the new AWS Security Hub?

Since December 2025, AWS Security Hub CSPM is the name of the original Security Hub: it runs security standards and controls, computes a security score, aggregates findings in the AWS Security Finding Format across accounts through a delegated administrator and across Regions through a home Region, and offers automation rules. The new AWS Security Hub correlates findings from GuardDuty, Inspector, Macie and other services into prioritized exposures using the OCSF format.

How do I force all Amazon S3 traffic to use HTTPS?

Add a bucket policy statement with Effect Deny, Principal *, all S3 actions, and the condition that aws:SecureTransport is false. Any request arriving over plain HTTP is then rejected regardless of what other policies allow, because an explicit deny always wins. Clients must use the HTTPS endpoints.

Source

This lesson covers the "Security and Compliance" domain of the official SOA-C03 exam guide. Vendors revise their guides — check the source for the current version.

Test yourself on this topic
Practice now

Sign up free to mark lessons complete, bookmark topics and track your exam readiness.

Spotted a mistake in this lesson?