initial commit
This commit is contained in:
		
							
								
								
									
										251
									
								
								modules/eks/aws-load-balancer-controller-iam-policy.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								modules/eks/aws-load-balancer-controller-iam-policy.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,251 @@
 | 
			
		||||
{
 | 
			
		||||
    "Version": "2012-10-17",
 | 
			
		||||
    "Statement": [
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "iam:CreateServiceLinkedRole"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "StringEquals": {
 | 
			
		||||
                    "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:DescribeAccountAttributes",
 | 
			
		||||
                "ec2:DescribeAddresses",
 | 
			
		||||
                "ec2:DescribeAvailabilityZones",
 | 
			
		||||
                "ec2:DescribeInternetGateways",
 | 
			
		||||
                "ec2:DescribeVpcs",
 | 
			
		||||
                "ec2:DescribeVpcPeeringConnections",
 | 
			
		||||
                "ec2:DescribeSubnets",
 | 
			
		||||
                "ec2:DescribeSecurityGroups",
 | 
			
		||||
                "ec2:DescribeInstances",
 | 
			
		||||
                "ec2:DescribeNetworkInterfaces",
 | 
			
		||||
                "ec2:DescribeTags",
 | 
			
		||||
                "ec2:GetCoipPoolUsage",
 | 
			
		||||
                "ec2:DescribeCoipPools",
 | 
			
		||||
                "ec2:GetSecurityGroupsForVpc",
 | 
			
		||||
                "ec2:DescribeIpamPools",
 | 
			
		||||
                "ec2:DescribeRouteTables",
 | 
			
		||||
                "elasticloadbalancing:DescribeLoadBalancers",
 | 
			
		||||
                "elasticloadbalancing:DescribeLoadBalancerAttributes",
 | 
			
		||||
                "elasticloadbalancing:DescribeListeners",
 | 
			
		||||
                "elasticloadbalancing:DescribeListenerCertificates",
 | 
			
		||||
                "elasticloadbalancing:DescribeSSLPolicies",
 | 
			
		||||
                "elasticloadbalancing:DescribeRules",
 | 
			
		||||
                "elasticloadbalancing:DescribeTargetGroups",
 | 
			
		||||
                "elasticloadbalancing:DescribeTargetGroupAttributes",
 | 
			
		||||
                "elasticloadbalancing:DescribeTargetHealth",
 | 
			
		||||
                "elasticloadbalancing:DescribeTags",
 | 
			
		||||
                "elasticloadbalancing:DescribeTrustStores",
 | 
			
		||||
                "elasticloadbalancing:DescribeListenerAttributes",
 | 
			
		||||
                "elasticloadbalancing:DescribeCapacityReservation"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "cognito-idp:DescribeUserPoolClient",
 | 
			
		||||
                "acm:ListCertificates",
 | 
			
		||||
                "acm:DescribeCertificate",
 | 
			
		||||
                "iam:ListServerCertificates",
 | 
			
		||||
                "iam:GetServerCertificate",
 | 
			
		||||
                "waf-regional:GetWebACL",
 | 
			
		||||
                "waf-regional:GetWebACLForResource",
 | 
			
		||||
                "waf-regional:AssociateWebACL",
 | 
			
		||||
                "waf-regional:DisassociateWebACL",
 | 
			
		||||
                "wafv2:GetWebACL",
 | 
			
		||||
                "wafv2:GetWebACLForResource",
 | 
			
		||||
                "wafv2:AssociateWebACL",
 | 
			
		||||
                "wafv2:DisassociateWebACL",
 | 
			
		||||
                "shield:GetSubscriptionState",
 | 
			
		||||
                "shield:DescribeProtection",
 | 
			
		||||
                "shield:CreateProtection",
 | 
			
		||||
                "shield:DeleteProtection"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:AuthorizeSecurityGroupIngress",
 | 
			
		||||
                "ec2:RevokeSecurityGroupIngress"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:CreateSecurityGroup"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:CreateTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "arn:aws:ec2:*:*:security-group/*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "StringEquals": {
 | 
			
		||||
                    "ec2:CreateAction": "CreateSecurityGroup"
 | 
			
		||||
                },
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:CreateTags",
 | 
			
		||||
                "ec2:DeleteTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "arn:aws:ec2:*:*:security-group/*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "true",
 | 
			
		||||
                    "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:AuthorizeSecurityGroupIngress",
 | 
			
		||||
                "ec2:RevokeSecurityGroupIngress",
 | 
			
		||||
                "ec2:DeleteSecurityGroup"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:CreateLoadBalancer",
 | 
			
		||||
                "elasticloadbalancing:CreateTargetGroup"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:CreateListener",
 | 
			
		||||
                "elasticloadbalancing:DeleteListener",
 | 
			
		||||
                "elasticloadbalancing:CreateRule",
 | 
			
		||||
                "elasticloadbalancing:DeleteRule"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:AddTags",
 | 
			
		||||
                "elasticloadbalancing:RemoveTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": [
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
 | 
			
		||||
            ],
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "true",
 | 
			
		||||
                    "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:AddTags",
 | 
			
		||||
                "elasticloadbalancing:RemoveTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": [
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:listener/net/*/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:listener/app/*/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:listener-rule/net/*/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:listener-rule/app/*/*/*"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:ModifyLoadBalancerAttributes",
 | 
			
		||||
                "elasticloadbalancing:SetIpAddressType",
 | 
			
		||||
                "elasticloadbalancing:SetSecurityGroups",
 | 
			
		||||
                "elasticloadbalancing:SetSubnets",
 | 
			
		||||
                "elasticloadbalancing:DeleteLoadBalancer",
 | 
			
		||||
                "elasticloadbalancing:ModifyTargetGroup",
 | 
			
		||||
                "elasticloadbalancing:ModifyTargetGroupAttributes",
 | 
			
		||||
                "elasticloadbalancing:DeleteTargetGroup",
 | 
			
		||||
                "elasticloadbalancing:ModifyListenerAttributes",
 | 
			
		||||
                "elasticloadbalancing:ModifyCapacityReservation",
 | 
			
		||||
                "elasticloadbalancing:ModifyIpPools"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:AddTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": [
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
 | 
			
		||||
            ],
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "StringEquals": {
 | 
			
		||||
                    "elasticloadbalancing:CreateAction": [
 | 
			
		||||
                        "CreateTargetGroup",
 | 
			
		||||
                        "CreateLoadBalancer"
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:RegisterTargets",
 | 
			
		||||
                "elasticloadbalancing:DeregisterTargets"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:SetWebAcl",
 | 
			
		||||
                "elasticloadbalancing:ModifyListener",
 | 
			
		||||
                "elasticloadbalancing:AddListenerCertificates",
 | 
			
		||||
                "elasticloadbalancing:RemoveListenerCertificates",
 | 
			
		||||
                "elasticloadbalancing:ModifyRule",
 | 
			
		||||
                "elasticloadbalancing:SetRulePriorities"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										408
									
								
								modules/eks/iam.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										408
									
								
								modules/eks/iam.tf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,408 @@
 | 
			
		||||
// AWS Load Balancer Controller
 | 
			
		||||
resource "aws_iam_role" "aws-load-balancer-controller" {
 | 
			
		||||
  name = "aws-load-balancer-controller"
 | 
			
		||||
 | 
			
		||||
  assume_role_policy = jsonencode({
 | 
			
		||||
    Version = "2012-10-17",
 | 
			
		||||
    Statement = [{
 | 
			
		||||
      Sid    = ""
 | 
			
		||||
      Effect = "Allow",
 | 
			
		||||
      Principal = {
 | 
			
		||||
        Federated = module.eks.oidc_provider_arn
 | 
			
		||||
      },
 | 
			
		||||
      Action = "sts:AssumeRoleWithWebIdentity",
 | 
			
		||||
      Condition = {
 | 
			
		||||
        StringEquals = {
 | 
			
		||||
          "${module.eks.oidc_provider}:sub" = "system:serviceaccount:kube-system:aws-load-balancer-controller"
 | 
			
		||||
          "${module.eks.oidc_provider}:aud" = "sts.amazonaws.com"
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }]
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_iam_policy" "AWSLoadBalancerControllerIAMPolicy" {
 | 
			
		||||
  name = "AWSLoadBalancerControllerIAMPolicy"
 | 
			
		||||
 | 
			
		||||
  // policy =
 | 
			
		||||
  // file("${path.module}/aws-load-balancer-controller-iam-policy.json")
 | 
			
		||||
 | 
			
		||||
  policy = <<POLICY
 | 
			
		||||
{
 | 
			
		||||
    "Version": "2012-10-17",
 | 
			
		||||
    "Statement": [
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "iam:CreateServiceLinkedRole"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "StringEquals": {
 | 
			
		||||
                    "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:DescribeAccountAttributes",
 | 
			
		||||
                "ec2:DescribeAddresses",
 | 
			
		||||
                "ec2:DescribeAvailabilityZones",
 | 
			
		||||
                "ec2:DescribeInternetGateways",
 | 
			
		||||
                "ec2:DescribeVpcs",
 | 
			
		||||
                "ec2:DescribeVpcPeeringConnections",
 | 
			
		||||
                "ec2:DescribeSubnets",
 | 
			
		||||
                "ec2:DescribeSecurityGroups",
 | 
			
		||||
                "ec2:DescribeInstances",
 | 
			
		||||
                "ec2:DescribeNetworkInterfaces",
 | 
			
		||||
                "ec2:DescribeTags",
 | 
			
		||||
                "ec2:GetCoipPoolUsage",
 | 
			
		||||
                "ec2:DescribeCoipPools",
 | 
			
		||||
                "ec2:GetSecurityGroupsForVpc",
 | 
			
		||||
                "ec2:DescribeIpamPools",
 | 
			
		||||
                "ec2:DescribeRouteTables",
 | 
			
		||||
                "elasticloadbalancing:DescribeLoadBalancers",
 | 
			
		||||
                "elasticloadbalancing:DescribeLoadBalancerAttributes",
 | 
			
		||||
                "elasticloadbalancing:DescribeListeners",
 | 
			
		||||
                "elasticloadbalancing:DescribeListenerCertificates",
 | 
			
		||||
                "elasticloadbalancing:DescribeSSLPolicies",
 | 
			
		||||
                "elasticloadbalancing:DescribeRules",
 | 
			
		||||
                "elasticloadbalancing:DescribeTargetGroups",
 | 
			
		||||
                "elasticloadbalancing:DescribeTargetGroupAttributes",
 | 
			
		||||
                "elasticloadbalancing:DescribeTargetHealth",
 | 
			
		||||
                "elasticloadbalancing:DescribeTags",
 | 
			
		||||
                "elasticloadbalancing:DescribeTrustStores",
 | 
			
		||||
                "elasticloadbalancing:DescribeListenerAttributes",
 | 
			
		||||
                "elasticloadbalancing:DescribeCapacityReservation"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "cognito-idp:DescribeUserPoolClient",
 | 
			
		||||
                "acm:ListCertificates",
 | 
			
		||||
                "acm:DescribeCertificate",
 | 
			
		||||
                "iam:ListServerCertificates",
 | 
			
		||||
                "iam:GetServerCertificate",
 | 
			
		||||
                "waf-regional:GetWebACL",
 | 
			
		||||
                "waf-regional:GetWebACLForResource",
 | 
			
		||||
                "waf-regional:AssociateWebACL",
 | 
			
		||||
                "waf-regional:DisassociateWebACL",
 | 
			
		||||
                "wafv2:GetWebACL",
 | 
			
		||||
                "wafv2:GetWebACLForResource",
 | 
			
		||||
                "wafv2:AssociateWebACL",
 | 
			
		||||
                "wafv2:DisassociateWebACL",
 | 
			
		||||
                "shield:GetSubscriptionState",
 | 
			
		||||
                "shield:DescribeProtection",
 | 
			
		||||
                "shield:CreateProtection",
 | 
			
		||||
                "shield:DeleteProtection"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:AuthorizeSecurityGroupIngress",
 | 
			
		||||
                "ec2:RevokeSecurityGroupIngress"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:CreateSecurityGroup"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:CreateTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "arn:aws:ec2:*:*:security-group/*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "StringEquals": {
 | 
			
		||||
                    "ec2:CreateAction": "CreateSecurityGroup"
 | 
			
		||||
                },
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:CreateTags",
 | 
			
		||||
                "ec2:DeleteTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "arn:aws:ec2:*:*:security-group/*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "true",
 | 
			
		||||
                    "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "ec2:AuthorizeSecurityGroupIngress",
 | 
			
		||||
                "ec2:RevokeSecurityGroupIngress",
 | 
			
		||||
                "ec2:DeleteSecurityGroup"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:CreateLoadBalancer",
 | 
			
		||||
                "elasticloadbalancing:CreateTargetGroup"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:CreateListener",
 | 
			
		||||
                "elasticloadbalancing:DeleteListener",
 | 
			
		||||
                "elasticloadbalancing:CreateRule",
 | 
			
		||||
                "elasticloadbalancing:DeleteRule"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:AddTags",
 | 
			
		||||
                "elasticloadbalancing:RemoveTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": [
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
 | 
			
		||||
            ],
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "true",
 | 
			
		||||
                    "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:AddTags",
 | 
			
		||||
                "elasticloadbalancing:RemoveTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": [
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:listener/net/*/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:listener/app/*/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:listener-rule/net/*/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:listener-rule/app/*/*/*"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:ModifyLoadBalancerAttributes",
 | 
			
		||||
                "elasticloadbalancing:SetIpAddressType",
 | 
			
		||||
                "elasticloadbalancing:SetSecurityGroups",
 | 
			
		||||
                "elasticloadbalancing:SetSubnets",
 | 
			
		||||
                "elasticloadbalancing:DeleteLoadBalancer",
 | 
			
		||||
                "elasticloadbalancing:ModifyTargetGroup",
 | 
			
		||||
                "elasticloadbalancing:ModifyTargetGroupAttributes",
 | 
			
		||||
                "elasticloadbalancing:DeleteTargetGroup",
 | 
			
		||||
                "elasticloadbalancing:ModifyListenerAttributes",
 | 
			
		||||
                "elasticloadbalancing:ModifyCapacityReservation",
 | 
			
		||||
                "elasticloadbalancing:ModifyIpPools"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*",
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:AddTags"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": [
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
 | 
			
		||||
                "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
 | 
			
		||||
            ],
 | 
			
		||||
            "Condition": {
 | 
			
		||||
                "StringEquals": {
 | 
			
		||||
                    "elasticloadbalancing:CreateAction": [
 | 
			
		||||
                        "CreateTargetGroup",
 | 
			
		||||
                        "CreateLoadBalancer"
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
                "Null": {
 | 
			
		||||
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:RegisterTargets",
 | 
			
		||||
                "elasticloadbalancing:DeregisterTargets"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "elasticloadbalancing:SetWebAcl",
 | 
			
		||||
                "elasticloadbalancing:ModifyListener",
 | 
			
		||||
                "elasticloadbalancing:AddListenerCertificates",
 | 
			
		||||
                "elasticloadbalancing:RemoveListenerCertificates",
 | 
			
		||||
                "elasticloadbalancing:ModifyRule",
 | 
			
		||||
                "elasticloadbalancing:SetRulePriorities"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": "*"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
POLICY
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_iam_role_policy_attachment" "aws-load-balancer-controller" {
 | 
			
		||||
  role       = aws_iam_role.aws-load-balancer-controller.name
 | 
			
		||||
  policy_arn = aws_iam_policy.AWSLoadBalancerControllerIAMPolicy.arn
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Cluster Autoscaler
 | 
			
		||||
resource "aws_iam_role" "cluster-autoscaler" {
 | 
			
		||||
  name = "aws-cluster-autoscaler"
 | 
			
		||||
 | 
			
		||||
  assume_role_policy = jsonencode({
 | 
			
		||||
    Version = "2012-10-17",
 | 
			
		||||
    Statement = [{
 | 
			
		||||
      Sid    = ""
 | 
			
		||||
      Effect = "Allow",
 | 
			
		||||
      Principal = {
 | 
			
		||||
        Federated = module.eks.oidc_provider_arn
 | 
			
		||||
      },
 | 
			
		||||
      Action = "sts:AssumeRoleWithWebIdentity",
 | 
			
		||||
      Condition = {
 | 
			
		||||
        StringEquals = {
 | 
			
		||||
          "${module.eks.oidc_provider}:sub" = "system:serviceaccount:kube-system:cluster-autoscaler"
 | 
			
		||||
          "${module.eks.oidc_provider}:aud" = "sts.amazonaws.com"
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }]
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_iam_policy" "ClusterAutoscalerIAMPolicy" {
 | 
			
		||||
  name = "ClusterAutoscalerIAMPolicy"
 | 
			
		||||
 | 
			
		||||
  policy = <<POLICY
 | 
			
		||||
{
 | 
			
		||||
    "Version": "2012-10-17",
 | 
			
		||||
    "Statement": [
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "autoscaling:DescribeAutoScalingGroups",
 | 
			
		||||
                "autoscaling:DescribeAutoScalingInstances",
 | 
			
		||||
                "autoscaling:DescribeLaunchConfigurations",
 | 
			
		||||
                "autoscaling:DescribeScalingActivities",
 | 
			
		||||
                "ec2:DescribeInstanceTypes",
 | 
			
		||||
                "ec2:DescribeLaunchTemplateVersions"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": ["*"]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "Effect": "Allow",
 | 
			
		||||
            "Action": [
 | 
			
		||||
                "autoscaling:SetDesiredCapacity",
 | 
			
		||||
                "autoscaling:TerminateInstanceInAutoScalingGroup"
 | 
			
		||||
            ],
 | 
			
		||||
            "Resource": ["*"]
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
POLICY
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_iam_role_policy_attachment" "cluster-autoscaler" {
 | 
			
		||||
  role       = aws_iam_role.cluster-autoscaler.name
 | 
			
		||||
  policy_arn = aws_iam_policy.ClusterAutoscalerIAMPolicy.arn
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// External DNS
 | 
			
		||||
resource "aws_iam_role" "external-dns" {
 | 
			
		||||
  name = "external-dns"
 | 
			
		||||
 | 
			
		||||
  assume_role_policy = jsonencode({
 | 
			
		||||
    Version = "2012-10-17",
 | 
			
		||||
    Statement = [{
 | 
			
		||||
      Sid    = ""
 | 
			
		||||
      Effect = "Allow",
 | 
			
		||||
      Principal = {
 | 
			
		||||
        Federated = module.eks.oidc_provider_arn
 | 
			
		||||
      },
 | 
			
		||||
      Action = "sts:AssumeRoleWithWebIdentity",
 | 
			
		||||
      Condition = {
 | 
			
		||||
        StringEquals = {
 | 
			
		||||
          "${module.eks.oidc_provider}:sub" = "system:serviceaccount:default:external-dns"
 | 
			
		||||
          "${module.eks.oidc_provider}:aud" = "sts.amazonaws.com"
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }]
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_iam_policy" "AllowExternalDNSUpdates" {
 | 
			
		||||
  name = "AllowExternalDNSUpdates"
 | 
			
		||||
 | 
			
		||||
  policy = <<POLICY
 | 
			
		||||
{
 | 
			
		||||
  "Version": "2012-10-17",
 | 
			
		||||
  "Statement": [
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": [
 | 
			
		||||
        "route53:ChangeResourceRecordSets"
 | 
			
		||||
      ],
 | 
			
		||||
      "Resource": [
 | 
			
		||||
        "arn:aws:route53:::hostedzone/*"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "Effect": "Allow",
 | 
			
		||||
      "Action": [
 | 
			
		||||
        "route53:ListHostedZones",
 | 
			
		||||
        "route53:ListResourceRecordSets",
 | 
			
		||||
        "route53:ListTagsForResource"
 | 
			
		||||
      ],
 | 
			
		||||
      "Resource": [
 | 
			
		||||
        "*"
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
POLICY
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_iam_role_policy_attachment" "external-dns" {
 | 
			
		||||
  role       = aws_iam_role.external-dns.name
 | 
			
		||||
  policy_arn = aws_iam_policy.AllowExternalDNSUpdates.arn
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								modules/eks/main.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								modules/eks/main.tf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
module "eks" {
 | 
			
		||||
  source = "terraform-aws-modules/eks/aws"
 | 
			
		||||
 | 
			
		||||
  cluster_name    = var.cluster_name
 | 
			
		||||
  cluster_version = var.cluster_version
 | 
			
		||||
 | 
			
		||||
  cluster_addons = {
 | 
			
		||||
    coredns                = {}
 | 
			
		||||
    eks-pod-identity-agent = {}
 | 
			
		||||
    kube-proxy             = {}
 | 
			
		||||
    vpc-cni                = {}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  vpc_id     = var.vpc_id
 | 
			
		||||
  subnet_ids = var.subnet_ids
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
  eks_managed_node_groups = { for az in var.azs : "ng-${az}" => {
 | 
			
		||||
    instance_types     = var.instance_types
 | 
			
		||||
    ami_type           = var.ami_type
 | 
			
		||||
    min_size           = var.min_size
 | 
			
		||||
    max_size           = var.max_size
 | 
			
		||||
    desired_size       = var.desired_size
 | 
			
		||||
    placement_group_az = az
 | 
			
		||||
  } }
 | 
			
		||||
  */
 | 
			
		||||
  eks_managed_node_groups = {
 | 
			
		||||
    ng = {
 | 
			
		||||
      instance_types = var.instance_types
 | 
			
		||||
      ami_type       = var.ami_type
 | 
			
		||||
      min_size       = var.min_size
 | 
			
		||||
      max_size       = var.max_size
 | 
			
		||||
      desired_size   = var.desired_size
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  cluster_endpoint_public_access           = true
 | 
			
		||||
  cluster_endpoint_private_access          = true
 | 
			
		||||
  enable_cluster_creator_admin_permissions = true
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										51
									
								
								modules/eks/variables.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								modules/eks/variables.tf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
variable "vpc_id" {
 | 
			
		||||
  description = "VPC ID"
 | 
			
		||||
  type        = string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "subnet_ids" {
 | 
			
		||||
  description = "EKS subnet IDs"
 | 
			
		||||
  type        = list(string)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "instance_types" {
 | 
			
		||||
  description = "EC2 instance types"
 | 
			
		||||
  default     = ["m5.large"]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "ami_type" {
 | 
			
		||||
  description = "EC2 AMI type"
 | 
			
		||||
  default     = "AL2023_x86_64_STANDARD"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "cluster_name" {
 | 
			
		||||
  description = "Cluster name"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "cluster_version" {
 | 
			
		||||
  description = "Cluster Kubernetes version"
 | 
			
		||||
  default     = "1.33"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "azs" {
 | 
			
		||||
  description = "Availability zones"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "min_size" {
 | 
			
		||||
  description = "EKS managed node group minimum size"
 | 
			
		||||
  type        = number
 | 
			
		||||
  default     = 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "max_size" {
 | 
			
		||||
  description = "EKS managed node group maximum size"
 | 
			
		||||
  type        = number
 | 
			
		||||
  default     = 10
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "desired_size" {
 | 
			
		||||
  description = "EKS managed node group desired size"
 | 
			
		||||
  type        = number
 | 
			
		||||
  default     = 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								modules/network/data.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								modules/network/data.tf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
data "aws_availability_zones" "available" {
 | 
			
		||||
  filter {
 | 
			
		||||
    name   = "opt-in-status"
 | 
			
		||||
    values = ["opt-in-not-required"]
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  exclude_zone_ids = ["use1-az3", "usw1-az2", "cac1-az3"]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
data "aws_vpc" "selected" {
 | 
			
		||||
  id = var.vpc_id
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
data "aws_internet_gateway" "default" {
 | 
			
		||||
  filter {
 | 
			
		||||
    name   = "attachment.vpc-id"
 | 
			
		||||
    values = [data.aws_vpc.selected.id]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								modules/network/locals.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								modules/network/locals.tf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
locals {
 | 
			
		||||
  azs = slice(data.aws_availability_zones.available.names, 0, 3)
 | 
			
		||||
 | 
			
		||||
  az_private_subnets = zipmap(local.azs, var.private_subnets)
 | 
			
		||||
 | 
			
		||||
  az_public_subnets = zipmap(local.azs, var.public_subnets)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										74
									
								
								modules/network/main.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								modules/network/main.tf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
// Private subnet
 | 
			
		||||
resource "aws_subnet" "private" {
 | 
			
		||||
  for_each          = local.az_private_subnets
 | 
			
		||||
  vpc_id            = data.aws_vpc.selected.id
 | 
			
		||||
  cidr_block        = each.value
 | 
			
		||||
  availability_zone = each.key
 | 
			
		||||
  tags = {
 | 
			
		||||
    Name                              = "EKS (${var.cluster_name}) private subnet (${each.key})",
 | 
			
		||||
    "kubernetes.io/role/internal-elb" = 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_route_table" "private" {
 | 
			
		||||
  for_each = local.az_private_subnets
 | 
			
		||||
  vpc_id   = data.aws_vpc.selected.id
 | 
			
		||||
  tags = {
 | 
			
		||||
    Name = "EKS (${var.cluster_name}) private subnet (${each.key})"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_route_table_association" "private" {
 | 
			
		||||
  for_each       = local.az_private_subnets
 | 
			
		||||
  subnet_id      = aws_subnet.private[each.key].id
 | 
			
		||||
  route_table_id = aws_route_table.private[each.key].id
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Public subnet
 | 
			
		||||
resource "aws_subnet" "public" {
 | 
			
		||||
  for_each          = local.az_public_subnets
 | 
			
		||||
  vpc_id            = data.aws_vpc.selected.id
 | 
			
		||||
  cidr_block        = each.value
 | 
			
		||||
  availability_zone = each.key
 | 
			
		||||
  tags = {
 | 
			
		||||
    Name                     = "EKS (${var.cluster_name}) public subnet (${each.key})"
 | 
			
		||||
    "kubernetes.io/role/elb" = 1
 | 
			
		||||
  }
 | 
			
		||||
  map_public_ip_on_launch = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_route_table" "public" {
 | 
			
		||||
  vpc_id = data.aws_vpc.selected.id
 | 
			
		||||
  tags = {
 | 
			
		||||
    Name = "EKS (${var.cluster_name}) public subnet"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_route_table_association" "public" {
 | 
			
		||||
  for_each       = local.az_public_subnets
 | 
			
		||||
  subnet_id      = aws_subnet.public[each.key].id
 | 
			
		||||
  route_table_id = aws_route_table.public.id
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_route" "public_internet_gateway" {
 | 
			
		||||
  route_table_id         = aws_route_table.public.id
 | 
			
		||||
  destination_cidr_block = "0.0.0.0/0"
 | 
			
		||||
  gateway_id             = data.aws_internet_gateway.default.id
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NAT gateway
 | 
			
		||||
resource "aws_eip" "nat" {
 | 
			
		||||
  domain = "vpc"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_nat_gateway" "nat_gateway" {
 | 
			
		||||
  allocation_id = aws_eip.nat.id
 | 
			
		||||
  subnet_id     = aws_subnet.public[local.azs[0]].id
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "aws_route" "nat_gateway" {
 | 
			
		||||
  for_each               = local.az_private_subnets
 | 
			
		||||
  route_table_id         = aws_route_table.private[each.key].id
 | 
			
		||||
  destination_cidr_block = "0.0.0.0/0"
 | 
			
		||||
  nat_gateway_id         = aws_nat_gateway.nat_gateway.id
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								modules/network/outputs.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								modules/network/outputs.tf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
output "azs" {
 | 
			
		||||
  value = local.azs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
output "vpc" {
 | 
			
		||||
  value = data.aws_vpc.selected
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
output "private_subnet_ids" {
 | 
			
		||||
  value = [for k in aws_subnet.private : k.id]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
output "public_subnet_ids" {
 | 
			
		||||
  value = [for k in aws_subnet.public : k.id]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								modules/network/variables.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								modules/network/variables.tf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
variable "vpc_id" {
 | 
			
		||||
  description = "VPC ID"
 | 
			
		||||
  type        = string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "cluster_name" {
 | 
			
		||||
  description = "The name of the cluster"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "private_subnets" {
 | 
			
		||||
  description = "Private subnets}"
 | 
			
		||||
  type        = list(string)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "public_subnets" {
 | 
			
		||||
  description = "Public subnets}"
 | 
			
		||||
  type        = list(string)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user