--- title: "Security groups creation" date: 2020-11-26T15:59:47-05:00 draft: false weight: 10 tags: - beginner --- ### Create and configure the security groups First, let's create the RDS security group (RDS_SG). It will be used by the Amazon RDS instance to control network access. ```bash export VPC_ID=$(aws eks describe-cluster \ --name eksworkshop-eksctl \ --query "cluster.resourcesVpcConfig.vpcId" \ --output text) # create RDS security group aws ec2 create-security-group \ --description 'RDS SG' \ --group-name 'RDS_SG' \ --vpc-id ${VPC_ID} # save the security group ID for future use export RDS_SG=$(aws ec2 describe-security-groups \ --filters Name=group-name,Values=RDS_SG Name=vpc-id,Values=${VPC_ID} \ --query "SecurityGroups[0].GroupId" --output text) echo "RDS security group ID: ${RDS_SG}" ``` Now, let's create the pod security group (POD_SG). ```bash # create the POD security group aws ec2 create-security-group \ --description 'POD SG' \ --group-name 'POD_SG' \ --vpc-id ${VPC_ID} # save the security group ID for future use export POD_SG=$(aws ec2 describe-security-groups \ --filters Name=group-name,Values=POD_SG Name=vpc-id,Values=${VPC_ID} \ --query "SecurityGroups[0].GroupId" --output text) echo "POD security group ID: ${POD_SG}" ``` The pod needs to communicate with its node for DNS resolution, so we will update the Node Group security group accordingly. ```bash export NODE_GROUP_SG=$(aws ec2 describe-security-groups \ --filters Name=tag:Name,Values=eks-cluster-sg-eksworkshop-eksctl-* Name=vpc-id,Values=${VPC_ID} \ --query "SecurityGroups[0].GroupId" \ --output text) echo "Node Group security group ID: ${NODE_GROUP_SG}" # allow POD_SG to connect to NODE_GROUP_SG using TCP 53 aws ec2 authorize-security-group-ingress \ --group-id ${NODE_GROUP_SG} \ --protocol tcp \ --port 53 \ --source-group ${POD_SG} # allow POD_SG to connect to NODE_GROUP_SG using UDP 53 aws ec2 authorize-security-group-ingress \ --group-id ${NODE_GROUP_SG} \ --protocol udp \ --port 53 \ --source-group ${POD_SG} ``` Finally, we will add two inbound traffic (ingress) [rules](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules) to the RDS_SG security group: * One for Cloud9 (to populate the database). * One to allow POD_SG security group to connect to the database. ```bash # Cloud9 IP export C9_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4) # allow Cloud9 to connect to RDS aws ec2 authorize-security-group-ingress \ --group-id ${RDS_SG} \ --protocol tcp \ --port 5432 \ --cidr ${C9_IP}/32 # Allow POD_SG to connect to the RDS aws ec2 authorize-security-group-ingress \ --group-id ${RDS_SG} \ --protocol tcp \ --port 5432 \ --source-group ${POD_SG} ```