Redshift Cluster Without VPC
- Query id: 40d5e9cd-5cfd-41f9-be60-b6cf4e907917
- Query name: Redshift Cluster Without VPC
- Platform: CloudFormation
- Severity: Low
- Category: Insecure Configurations
- CWE: 284
- Risk score: 1.0
- URL: Github
Description¶
Redshift Cluster should be configured in VPC (Virtual Private Cloud)
Documentation
Code samples¶
Code samples with security vulnerabilities¶
Positive test num. 1 - yaml file
AWSTemplateFormatVersion: "2010-09-09"
Resources:
RedshiftCluster:
Type: AWS::Redshift::Cluster
Properties:
ClusterIdentifier: tf-redshift-cluster
DBName: mydb
Positive test num. 2 - json file
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"RedshiftCluster": {
"Type": "AWS::Redshift::Cluster",
"Properties": {
"ClusterIdentifier": "tf-redshift-cluster",
"DBName": "mydb",
"ClusterSubnetGroupName": { "Ref": "RedshiftSubnetGroup" },
"VpcSecurityGroupIds": [
{ "Ref": "RedshiftSecurityGroup" }
]
}
}
}
}
Positive test num. 3 - json file
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"RedshiftSubnetGroup": {
"Type": "AWS::Redshift::ClusterSubnetGroup",
"Properties": {
"Description": "Subnet group for Redshift",
"SubnetIds": [
{ "Ref": "Subnet1" },
{ "Ref": "Subnet2" }
],
"Tags": [
{
"Key": "Name",
"Value": "RedshiftSubnetGroup"
}
]
}
},
"RedshiftCluster": {
"Type": "AWS::Redshift::Cluster",
"Properties": {
"ClusterIdentifier": "tf-redshift-cluster",
"DBName": "mydb",
"ClusterSubnetGroupName": { "Ref": "RedshiftSubnetGroup" },
"VpcSecurityGroupIds": [
{ "Ref": "RedshiftSecurityGroup" }
]
}
}
}
}
Positive test num. 4 - json file
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"RedshiftSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "Redshift access",
"VpcId": { "Ref": "MyVPC" },
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": 5439,
"ToPort": 5439,
"CidrIp": "0.0.0.0/0"
}
]
}
},
"RedshiftCluster": {
"Type": "AWS::Redshift::Cluster",
"Properties": {
"ClusterIdentifier": "tf-redshift-cluster",
"DBName": "mydb",
"ClusterSubnetGroupName": { "Ref": "RedshiftSubnetGroup" },
"VpcSecurityGroupIds": [
{ "Ref": "RedshiftSecurityGroup" }
]
}
}
}
}
Positive test num. 5 - yaml file
Positive test num. 6 - yaml file
Positive test num. 7 - yaml file
Positive test num. 8 - yaml file
AWSTemplateFormatVersion: "2010-09-09"
Resources:
RedshiftSubnetGroup:
Type: AWS::Redshift::ClusterSubnetGroup
Properties:
Description: Subnet group for Redshift
SubnetIds:
- !Ref Subnet1
- !Ref Subnet2
Tags:
- Key: Name
Value: RedshiftSubnetGroup
RedshiftCluster:
Type: AWS::Redshift::Cluster
Properties:
ClusterIdentifier: tf-redshift-cluster
DBName: mydb
ClusterSubnetGroupName: !Ref RedshiftSubnetGroup
VpcSecurityGroupIds:
- !Ref RedshiftSecurityGroup
Positive test num. 9 - yaml file
AWSTemplateFormatVersion: "2010-09-09"
Resources:
RedshiftSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Redshift access
VpcId: !Ref MyVPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 5439
ToPort: 5439
CidrIp: 0.0.0.0/0
RedshiftCluster:
Type: AWS::Redshift::Cluster
Properties:
ClusterIdentifier: tf-redshift-cluster
DBName: mydb
ClusterSubnetGroupName: !Ref RedshiftSubnetGroup
VpcSecurityGroupIds:
- !Ref RedshiftSecurityGroup
Positive test num. 10 - json file
Positive test num. 11 - json file
Positive test num. 12 - json file
Code samples without security vulnerabilities¶
Negative test num. 1 - yaml file
Resources:
RedshiftSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Redshift access
VpcId: !Ref MyVPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 5439
ToPort: 5439
CidrIp: 0.0.0.0/0
RedshiftSubnetGroup:
Type: AWS::Redshift::ClusterSubnetGroup
Properties:
Description: Subnet group for Redshift
SubnetIds:
- !Ref Subnet1
- !Ref Subnet2
Tags:
- Key: Name
Value: RedshiftSubnetGroup
RedshiftCluster:
Type: AWS::Redshift::Cluster
Properties:
ClusterIdentifier: tf-redshift-cluster
DBName: mydb
ClusterSubnetGroupName: !Ref RedshiftSubnetGroup
VpcSecurityGroupIds:
- !Ref RedshiftSecurityGroup
Negative test num. 2 - json file
{
"Resources": {
"RedshiftSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "Redshift access",
"VpcId": { "Ref": "MyVPC" },
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": 5439,
"ToPort": 5439,
"CidrIp": "0.0.0.0/0"
}
]
}
},
"RedshiftSubnetGroup": {
"Type": "AWS::Redshift::ClusterSubnetGroup",
"Properties": {
"Description": "Subnet group for Redshift",
"SubnetIds": [
{ "Ref": "Subnet1" },
{ "Ref": "Subnet2" }
],
"Tags": [
{
"Key": "Name",
"Value": "RedshiftSubnetGroup"
}
]
}
},
"RedshiftCluster": {
"Type": "AWS::Redshift::Cluster",
"Properties": {
"ClusterIdentifier": "tf-redshift-cluster",
"DBName": "mydb",
"ClusterSubnetGroupName": { "Ref": "RedshiftSubnetGroup" },
"VpcSecurityGroupIds": [
{ "Ref": "RedshiftSecurityGroup" }
]
}
}
}
}