Profile Applicability:
- Level 1
Description:
Ensure that encryption at rest is enabled to protect sensitive data stored in AWS-managed database services. AWS offers encryption using AWS managed keys or customer-managed keys (CMKs) through the AWS Key Management Service (KMS).
Rationale:
Encryption at rest protects data stored on disk from unauthorized access. Even if physical security is compromised, encrypted data cannot be read without access to the decryption keys.
Impact:
If an unauthorized user gains access to the storage medium, the data remains unreadable without the corresponding decryption keys, reducing the risk of data breaches.
Default Value:
Encryption at rest is not enabled by default for all database services. The setting must be explicitly enabled during database creation or by restoring from an encrypted snapshot.
Pre-requisites:
• Access to the AWS Management Console or AWS CLI
• Permissions to create and manage KMS keys
• Permissions to create or modify database instances or clusters
Remediation:
Test Plan
Using AWS Console:
Sign in to the AWS Management Console
Navigate to the respective service console (e.g., Amazon RDS, Neptune, DocumentDB, QLDB)
Select the instance or cluster
In the configuration or encryption section, verify if encryption at rest is enabled
Using AWS CLI:
Run the appropriate describe command for your service (example for RDS):
aws rds describe-db-instances
Check the value of StorageEncrypted and the presence of KmsKeyId
Implementation Plan
Using AWS Console:
Navigate to the AWS Management Console
Open the service (e.g., RDS, Neptune, DocumentDB, etc.)
Select or create a database instance
In the encryption settings, enable encryption at rest
Choose either an AWS-managed KMS key or a customer-managed KMS key
Save or launch the instance
Using AWS CLI:
Create a new DB instance with encryption:
aws rds create-db-instance --db-instance-identifier mydb --allocated-storage 20 --db-instance-class db.t3.micro --engine mysql --storage-encrypted --kms-key-id <your-kms-key-id>
If modifying an existing instance:
Create a snapshot
Copy the snapshot with encryption enabled:
aws rds copy-db-snapshot --source-db-snapshot-identifier mydb-snapshot --target-db-snapshot-identifier mydb-snapshot-encrypted --kms-key-id <your-kms-key-id>
Restore a new DB instance from the encrypted snapshot
Backout Plan
Using AWS Console:
If using a new encrypted instance, delete it and re-create the original non-encrypted instance using unencrypted snapshots
Remove associated KMS keys if no longer required
Using AWS CLI:
Delete the encrypted instance:
aws rds delete-db-instance --db-instance-identifier encrypted-db
Restore from the original unencrypted snapshot:
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier original-db --db-snapshot-identifier unencrypted-snapshot
References:
• AWS Cloud Databases
• CIS AWS Database Services Benchmark v1.0.0