First, let’s create the RDS security group (RDS_SG). It will be used by the Amazon RDS instance to control network access.
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).
# 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.
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 to the RDS_SG security group:
# 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}