@@ -11,6 +11,21 @@ terraform {
1111 }
1212}
1313
14+ locals {
15+ cluster_addons_iam = {
16+ for k , v in var . cluster_addons : k => {
17+ name = v.name
18+ addon_version = v.addon_version
19+ resolve_conflicts_on_create = v.resolve_conflicts_on_create
20+ resolve_conflicts_on_update = v.resolve_conflicts_on_update
21+ preserve = v.preserve
22+ timeouts = v.timeouts
23+ service_account_role_arn = (k == " aws-ebs-csi-driver" ? data.aws_iam_role.eks_csi_driver.arn : k == " vpc-cni" ? data.aws_iam_role.eks_cni_driver.arn : null )
24+ }
25+ }
26+ }
27+
28+
1429data "aws_eks_cluster" "cluster" {
1530 name = module. eks . cluster_id
1631}
@@ -19,6 +34,14 @@ data "aws_eks_cluster_auth" "cluster" {
1934 name = module. eks . cluster_id
2035}
2136
37+ data "aws_iam_role" "eks_csi_driver" {
38+ name = aws_iam_role. eks_ebs_csi_driver . name
39+ }
40+
41+ data "aws_iam_role" "eks_cni_driver" {
42+ name = aws_iam_role. eks_cni_driver . name
43+ }
44+
2245provider "kubernetes" {
2346 host = data. aws_eks_cluster . cluster . endpoint
2447 cluster_ca_certificate = base64decode (data. aws_eks_cluster . cluster . certificate_authority . 0 . data )
@@ -46,13 +69,7 @@ that it's using this module.
4669https://aws.amazon.com/blogs/containers/amazon-ebs-csi-driver-is-now-generally-available-in-amazon-eks-add-ons/
4770*/
4871
49- resource "aws_eks_addon" "csi_driver" {
50- cluster_name = module. eks . cluster_id
51- addon_name = " aws-ebs-csi-driver"
52- addon_version = " v1.11.4-eksbuild.1"
53- service_account_role_arn = aws_iam_role. eks_ebs_csi_driver . arn
54- }
55-
72+ # IAM CSI Role
5673data "aws_iam_policy_document" "csi" {
5774 statement {
5875 actions = [" sts:AssumeRoleWithWebIdentity" ]
@@ -81,6 +98,37 @@ resource "aws_iam_role_policy_attachment" "amazon_ebs_csi_driver" {
8198 policy_arn = " arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy"
8299}
83100
101+ # IAM CNI
102+ data "aws_iam_policy_document" "cni" {
103+ statement {
104+ actions = [" sts:AssumeRoleWithWebIdentity" ]
105+ effect = " Allow"
106+
107+ condition {
108+ test = " StringEquals"
109+ variable = " ${ replace (module. eks . oidc_provider , " https://" , " " )} :sub"
110+ values = [" system:serviceaccount:kube-system:aws-node" ]
111+ }
112+
113+ principals {
114+ identifiers = [module . eks . oidc_provider_arn ]
115+ type = " Federated"
116+ }
117+ }
118+ }
119+
120+ resource "aws_iam_role" "eks_cni_driver" {
121+ assume_role_policy = data. aws_iam_policy_document . cni . json
122+ name = " eks-cni-driver"
123+ }
124+
125+ resource "aws_iam_role_policy_attachment" "amazon_cni_driver" {
126+ role = aws_iam_role. eks_cni_driver . name
127+ policy_arn = " arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
128+ }
129+
130+
131+
84132
85133module "eks" {
86134 source = " terraform-aws-modules/eks/aws"
@@ -124,4 +172,6 @@ module "eks" {
124172 aws_auth_users = var. aws_auth_users
125173
126174 aws_auth_accounts = var. aws_auth_accounts
175+
176+ cluster_addons = local. cluster_addons_iam
127177}
0 commit comments