Back to Checks
DynamoDB DAX cluster has encryption at rest enabled
dynamodb_accelerator_cluster_encryption_enabled
Service: dynamodbSeverity: medium
OfficialBuilt-inVerified
Categories:encryption
Resource Type:Other
Amazon DynamoDB Accelerator (DAX) clusters are evaluated for server-side encryption at rest. The finding indicates whether the cluster's on-disk cache, configuration, and logs are encrypted using service-managed keys.
Risk
Without encryption at rest, DAX on-disk cache and logs can be extracted from underlying storage by those with low-level access, compromising confidentiality and enabling offline data mining.
Threats:
- Compromised host or admin
- Lost/retired media
- Unauthorized backups or snapshots
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks dynamodb_accelerator_cluster_encryption_enabledRecommendation
Provision DAX clusters with encryption at rest enabled. Apply least privilege for DAX administration and data access, and monitor with logging.
Adopt defense in depth: enable encryption in transit, restrict network exposure, and avoid caching highly sensitive data. Re-create unencrypted clusters to enforce this setting.
Remediation
CLI
aws dax create-cluster --cluster-name <example_resource_name> --node-type <NODE_TYPE> --replication-factor 1 --iam-role-arn <example_resource_id> --sse-specification Enabled=trueTerraform
resource "aws_dax_cluster" "example" {
cluster_name = "<example_resource_name>"
node_type = "<NODE_TYPE>"
replication_factor = 1
iam_role_arn = "<example_resource_id>"
# Critical: enables encryption at rest
server_side_encryption {
enabled = true # Encrypts DAX cluster data at rest
}
}NativeIaC
Resources:
DaxCluster:
Type: AWS::DAX::Cluster
Properties:
ClusterName: <example_resource_name>
NodeType: <NODE_TYPE>
ReplicationFactor: 1
IAMRoleARN: <example_resource_id>
SSESpecification: # Critical: enables encryption at rest
SSEEnabled: true # Encrypts DAX cluster data at restOther
1In the AWS console, open **DynamoDB** > under **DAX**, choose **Clusters** > **Create cluster**
2Enter a name and choose a node type
3In **Encryption**, select **Enable encryption**
4Choose the IAM role and required networking, then click **Launch cluster**
5If replacing an existing unencrypted cluster: point your application to the new cluster endpoint, then delete the old cluster
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.dynamodb.dax_client import dax_client
class dynamodb_accelerator_cluster_encryption_enabled(Check):
def execute(self):
findings = []
for cluster in dax_client.clusters:
report = Check_Report_AWS(metadata=self.metadata(), resource=cluster)
report.status = "FAIL"
report.status_extended = (
f"DAX cluster {cluster.name} does not have encryption at rest enabled."
)
if cluster.encryption:
report.status = "PASS"
report.status_extended = (
f"DAX cluster {cluster.name} has encryption at rest enabled."
)
findings.append(report)
return findings