Check if Redshift Clusters Have In-Transit Encryption Enabled
Overview
This check verifies that your Amazon Redshift clusters require SSL/TLS encryption for all client connections. When enabled, this setting forces all data transmitted between your applications and the Redshift cluster to be encrypted, protecting it from interception.
Risk
Without in-transit encryption, data traveling between clients and your Redshift cluster is sent in plain text. This creates several serious risks:
- Data exposure: Credentials, queries, and query results can be intercepted by attackers
- Data tampering: SQL statements or returned data could be modified in transit
- Session hijacking: Attackers could take over database sessions, disrupting workloads
This is a high severity finding that affects compliance with CIS, GDPR, HIPAA, PCI-DSS, SOC2, and other frameworks.
Remediation Steps
Prerequisites
- Access to the AWS Console with permissions to modify Redshift parameter groups, or
- AWS CLI configured with appropriate credentials
AWS Console Method
- Open the Amazon Redshift console
- In the left navigation, click Configurations, then Parameter groups
- Select the parameter group associated with your cluster
- Click Edit parameters
- Find the parameter named
require_ssl - Change its value to
true - Click Save
- Important: Reboot your cluster for the change to take effect (this parameter requires a restart)
To reboot the cluster:
- Go to Clusters in the left navigation
- Select your cluster
- From the Actions dropdown, choose Reboot
AWS CLI (optional)
Step 1: Identify the parameter group used by your cluster
aws redshift describe-clusters \
--region us-east-1 \
--query "Clusters[*].[ClusterIdentifier,ClusterParameterGroups[0].ParameterGroupName]" \
--output table
Step 2: Enable require_ssl in the parameter group
Replace <your-parameter-group-name> with the actual parameter group name:
aws redshift modify-cluster-parameter-group \
--region us-east-1 \
--parameter-group-name <your-parameter-group-name> \
--parameters "ParameterName=require_ssl,ParameterValue=true"
Step 3: Reboot the cluster to apply the change
Replace <your-cluster-identifier> with your cluster name:
aws redshift reboot-cluster \
--region us-east-1 \
--cluster-identifier <your-cluster-identifier>
CloudFormation (optional)
Create or update a parameter group with SSL required:
AWSTemplateFormatVersion: '2010-09-09'
Description: Redshift Parameter Group with SSL Required
Parameters:
ParameterGroupName:
Type: String
Description: Name for the Redshift parameter group
Default: redshift-ssl-required
Resources:
RedshiftSSLParameterGroup:
Type: AWS::Redshift::ClusterParameterGroup
Properties:
Description: Parameter group enforcing SSL connections
ParameterGroupFamily: redshift-1.0
ParameterGroupName: !Ref ParameterGroupName
Parameters:
- ParameterName: require_ssl
ParameterValue: 'true'
Outputs:
ParameterGroupNameOutput:
Description: The name of the parameter group
Value: !Ref RedshiftSSLParameterGroup
After deploying, associate this parameter group with your cluster and reboot it.
Terraform (optional)
variable "parameter_group_name" {
description = "Name for the Redshift parameter group"
type = string
default = "redshift-ssl-required"
}
resource "aws_redshift_parameter_group" "ssl_required" {
name = var.parameter_group_name
family = "redshift-1.0"
parameter {
name = "require_ssl"
value = "true"
}
tags = {
Purpose = "Enforce SSL connections"
}
}
# Reference this parameter group in your cluster configuration:
# cluster_parameter_group_name = aws_redshift_parameter_group.ssl_required.name
After applying, associate this parameter group with your cluster and reboot it.
Verification
After making changes and rebooting your cluster:
- In the Redshift console, go to Configurations > Parameter groups
- Click on your parameter group
- Search for
require_ssland confirm it showstrue
CLI verification
aws redshift describe-cluster-parameters \
--region us-east-1 \
--parameter-group-name <your-parameter-group-name> \
--query "Parameters[?ParameterName=='require_ssl'].ParameterValue" \
--output text
This should return true.
You can also test the connection by attempting to connect without SSL - it should be rejected.
Additional Resources
- Amazon Redshift Database Encryption
- Configuring Security Options for Connections
- Amazon Redshift Parameter Groups
- Prowler Check Documentation
Notes
- The
require_sslparameter is a static parameter, meaning a cluster reboot is required for changes to take effect - After enabling SSL, ensure your client applications are configured to use SSL connections
- If you are using the default parameter group, you cannot modify it directly - create a custom parameter group instead, then associate it with your cluster
- Consider also enabling encryption at rest for complete data protection