Back to Checks
Redshift cluster is encrypted at rest
redshift_cluster_encrypted_at_rest
Service: redshiftSeverity: critical
OfficialBuilt-inVerified
Categories:encryption
Resource Type:AwsRedshiftCluster
Amazon Redshift clusters use encryption at rest. The evaluation inspects the cluster's encryption setting to determine if on-disk data and snapshots are protected with a managed key.
Risk
Without encryption at rest, data blocks and snapshots can be read if storage media or backups are accessed by unauthorized parties. This compromises confidentiality, enabling bulk data exfiltration and exposure of sensitive analytics, which can facilitate further compromise.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks redshift_cluster_encrypted_at_restRecommendation
Enable encryption at rest for all clusters and prefer customer-managed keys (CMEK) for control and auditing. Apply least privilege to key usage, rotate keys, and restrict snapshot access and cross-Region copies. Monitor key health and access events as part of defense-in-depth.
Remediation
CLI
aws redshift modify-cluster --cluster-identifier <cluster-id> --encryptedTerraform
# Terraform: Enable at-rest encryption for a Redshift cluster
resource "aws_redshift_cluster" "<example_resource_name>" {
cluster_identifier = "<example_resource_id>"
node_type = "<NODE_TYPE>"
cluster_type = "<CLUSTER_TYPE>"
master_username = "<MASTER_USERNAME>"
master_password = "<MASTER_PASSWORD>"
encrypted = true # Critical: enables encryption at rest to pass the check
}NativeIaC
# CloudFormation: Enable at-rest encryption for a Redshift cluster
Resources:
<example_resource_name>:
Type: AWS::Redshift::Cluster
Properties:
ClusterIdentifier: "<example_resource_id>"
DBName: "<DB_NAME>"
MasterUsername: "<MASTER_USERNAME>"
MasterUserPassword: "<MASTER_PASSWORD>"
NodeType: "<NODE_TYPE>"
ClusterType: "<CLUSTER_TYPE>"
Encrypted: true # Critical: enables encryption at rest to pass the checkOther
1Open the AWS Management Console and go to Amazon Redshift
2Choose Clusters, then select your cluster
3Open the Properties tab > Database configurations > Edit > Edit encryption
4Select Enable encryption (use AWS-managed or a specific KMS key)
5Click Save changes
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.redshift.redshift_client import redshift_client
class redshift_cluster_encrypted_at_rest(Check):
def execute(self):
findings = []
for cluster in redshift_client.clusters:
report = Check_Report_AWS(metadata=self.metadata(), resource=cluster)
report.status = "FAIL"
report.status_extended = (
f"Redshift Cluster {cluster.id} is not encrypted at rest."
)
if cluster.encrypted:
report.status = "PASS"
report.status_extended = (
f"Redshift Cluster {cluster.id} is encrypted at rest."
)
findings.append(report)
return findings