Encryption at Rest protects data stored on disk (S3 objects, EBS volumes, RDS databases, DynamoDB tables) by encrypting it with a cryptographic key. Even if someone gains physical access to the storage hardware, the data is unreadable without the key. It is a foundational control and a compliance staple, but it is worth being precise about the threat it addresses: stolen or decommissioned storage media and out-of-band access to raw disks, not an attacker holding valid credentials to your account.
S3 (SSE-S3 default since January 2023), EBS (AES-256, opt-in per region), RDS (optional, must be enabled at creation), DynamoDB (AWS owned key by default), and most newer services encrypt by default.
Every server-side option decrypts transparently for any caller that IAM authorizes. If an attacker steals an access key with s3:GetObject permission, the bucket's encryption does not slow them down for one second: S3 decrypts the object and hands it over, exactly as it does for your application. This is the most misunderstood point in cloud data protection. Where encryption at rest earns real security value beyond the physical-media scenario is with SSE-KMS and customer managed keys: the caller then needs permission on both the object and the key, key policies give you an independent control plane (including a kill switch, since disabling a key blocks all decryption under it), and every decrypt lands in CloudTrail as auditable KMS usage. Under the hood these services use envelope encryption: each object or volume is encrypted with a unique data key, and the KMS key encrypts those data keys rather than the data itself.
The recurring pattern is checkbox encryption: a team confirms every bucket shows "encryption enabled" (which, since January 2023, all S3 buckets do by default), reports the data protection item closed, and stops thinking. Meanwhile the actual exposure paths remain wide open: a bucket policy or misconfigured access grants read access too broadly, credentials with blanket s3:* circulate in CI systems, and nothing about SSE-S3 stops any of it, because authorization, not cryptography, is the gate. The breaches that make headlines out of "encrypted" buckets are almost never cryptographic failures; they are IAM and policy failures that encryption at rest was never designed to catch. A second practical trap is RDS: encryption there can only be chosen at instance creation. Discovering during an audit that a three-year-old production database is unencrypted means a migration project, snapshot, encrypted copy, restore, cutover, not a checkbox.
To see a bucket's server-side encryption configuration:
aws s3api get-bucket-encryption --bucket my-data-bucket
The response shows the default encryption rule, with SSEAlgorithm values of AES256 (SSE-S3), aws:kms, or aws:kms:dsse, plus the KMS key ID where applicable and whether S3 Bucket Keys are enabled to reduce KMS request costs. For RDS, the equivalent check is aws rds describe-db-instances and reading the StorageEncrypted field per instance.
Does encryption at rest protect me if my credentials are stolen?
No. Server-side encryption decrypts transparently for any authorized caller, so an attacker using stolen credentials reads data as easily as your application does. Stolen-credential risk is addressed by least privilege, MFA, short-lived credentials, and, with SSE-KMS, the additional requirement that the caller also holds permission on the key.
When should I use SSE-KMS instead of the default SSE-S3?
When you need control and evidence: a key policy you own, the ability to revoke or disable the key, CloudTrail records of every decrypt, and cross-account access governed at the key level. SSE-S3 satisfies "data is encrypted on disk"; SSE-KMS turns encryption into an access control and audit mechanism.
Can I enable encryption on an existing RDS instance?
Not in place. RDS encryption is only set at creation. The documented path for existing data is: snapshot the unencrypted instance, copy the snapshot with encryption enabled, then restore a new instance from the encrypted copy and switch your application over.
Protecting data as it moves between systems by encrypting the communication channel, typically using TLS/SSL to prevent interception or tampering.
A cryptographic key managed by AWS Key Management Service used to encrypt and decrypt data across AWS services, with centralized key policies and automatic rotation.
A two-tier encryption strategy where data is encrypted with a data key, and the data key itself is encrypted with a master key (KMS key), combining performance with security.
Encryption performed by AWS on data after it is received by the service, protecting it at rest without requiring client-side encryption logic.
Toc Consulting: AWS Security & Cloud Architecture
Our team helps engineering teams secure and architect AWS the right way: assessment in week one, a prioritized action plan in week two.