@@ -206,3 +206,71 @@ resource "aws_iam_openid_connect_provider" "oidc_provider" {
206206 var. tags
207207 )
208208}
209+
210+ # IAM role for EBS CSI driver using IRSA
211+ resource "aws_iam_role" "ebs_csi_driver" {
212+ name = " ${ var . name } -ebs-csi-driver"
213+
214+ # Trust policy - allows the Kubernetes service account to assume this role via OIDC
215+ assume_role_policy = jsonencode ({
216+ Version = " 2012-10-17"
217+ Statement = [{
218+ Effect = " Allow"
219+ Principal = {
220+ Federated = aws_iam_openid_connect_provider.oidc_provider.arn
221+ }
222+ Action = " sts:AssumeRoleWithWebIdentity"
223+ Condition = {
224+ StringEquals = {
225+ " ${replace(aws_eks_cluster.main.identity[0].oidc[0].issuer, "https://", "")}:sub" = " system:serviceaccount:kube-system:ebs-csi-controller-sa"
226+ " ${replace(aws_eks_cluster.main.identity[0].oidc[0].issuer, "https://", "")}:aud" = " sts.amazonaws.com"
227+ }
228+ }
229+ }]
230+ })
231+
232+ tags = merge (
233+ { Name = " ${ var . name } -ebs-csi-driver" },
234+ var. tags
235+ )
236+ }
237+
238+ # Attach the AWS managed policy for EBS CSI driver
239+ resource "aws_iam_role_policy_attachment" "ebs_csi_driver" {
240+ role = aws_iam_role. ebs_csi_driver . name
241+ policy_arn = " arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy"
242+ }
243+
244+ # IAM role for Cluster Autoscaler using IRSA
245+ resource "aws_iam_role" "cluster_autoscaler" {
246+ name = " ${ var . name } -cluster-autoscaler"
247+
248+ # Trust policy - allows the Kubernetes service account to assume this role via OIDC
249+ assume_role_policy = jsonencode ({
250+ Version = " 2012-10-17"
251+ Statement = [{
252+ Effect = " Allow"
253+ Principal = {
254+ Federated = aws_iam_openid_connect_provider.oidc_provider.arn
255+ }
256+ Action = " sts:AssumeRoleWithWebIdentity"
257+ Condition = {
258+ StringEquals = {
259+ " ${replace(aws_eks_cluster.main.identity[0].oidc[0].issuer, "https://", "")}:sub" = " system:serviceaccount:${ var . environment } :cluster-autoscaler"
260+ " ${replace(aws_eks_cluster.main.identity[0].oidc[0].issuer, "https://", "")}:aud" = " sts.amazonaws.com"
261+ }
262+ }
263+ }]
264+ })
265+
266+ tags = merge (
267+ { Name = " ${ var . name } -cluster-autoscaler" },
268+ var. tags
269+ )
270+ }
271+
272+ # Attach the autoscaling policy to Cluster Autoscaler role
273+ resource "aws_iam_role_policy_attachment" "cluster_autoscaler" {
274+ role = aws_iam_role. cluster_autoscaler . name
275+ policy_arn = aws_iam_policy. worker_autoscaling . arn
276+ }
0 commit comments