Skip to content

Commit 8abfeeb

Browse files
kavclaudejosmo
authored
feat: add permissions boundary support for all IAM roles (#95)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Joachim Hill-Grannec <joachim.hill@gmail.com>
1 parent b8cdfe6 commit 8abfeeb

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

main.tf

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ terraform {
77
}
88
}
99
}
10-
data "aws_partition" "current" {} # Used for GovCloud/China partition-aware ARN construction
10+
data "aws_partition" "current" {}
11+
data "aws_caller_identity" "current" {}
1112

1213
locals {
13-
is_arm = can(regex("[a-zA-Z]+\\d+g[a-z]*\\..+", var.stack_pelotech_nat_instance_type))
14+
permissions_boundary_arn = var.permissions_boundary != "" ? "arn:${data.aws_partition.current.partition}:iam::${data.aws_caller_identity.current.account_id}:policy/${var.permissions_boundary}" : null
15+
is_arm = can(regex("[a-zA-Z]+\\d+g[a-z]*\\..+", var.stack_pelotech_nat_instance_type))
1416
admin_access_entries = {
1517
for index, item in var.stack_admin_arns : "admin_${index}" => {
1618
principal_arn = item
@@ -152,15 +154,16 @@ resource "aws_vpc_endpoint" "eks_vpc_endpoints" {
152154
}
153155

154156
module "eks" {
155-
source = "terraform-aws-modules/eks/aws"
156-
version = "21.15.1"
157-
name = var.stack_name
158-
kubernetes_version = var.eks_cluster_version
159-
create = var.stack_create
160-
create_node_security_group = var.create_node_security_group
161-
endpoint_private_access = true
162-
endpoint_public_access = var.cluster_endpoint_public_access
163-
enabled_log_types = var.cluster_enabled_log_types
157+
source = "terraform-aws-modules/eks/aws"
158+
version = "21.15.1"
159+
name = var.stack_name
160+
kubernetes_version = var.eks_cluster_version
161+
create = var.stack_create
162+
create_node_security_group = var.create_node_security_group
163+
iam_role_permissions_boundary = local.permissions_boundary_arn
164+
endpoint_private_access = true
165+
endpoint_public_access = var.cluster_endpoint_public_access
166+
enabled_log_types = var.cluster_enabled_log_types
164167

165168
vpc_id = var.stack_existing_vpc_config != null ? var.stack_existing_vpc_config.vpc_id : module.vpc.vpc_id
166169
subnet_ids = var.stack_existing_vpc_config != null ? var.stack_existing_vpc_config.subnet_ids : module.vpc.private_subnets
@@ -175,6 +178,7 @@ module "eks" {
175178
eks_managed_node_groups = var.stack_enable_default_eks_managed_node_group ? {
176179
"initial-${var.stack_name}" = {
177180
iam_role_use_name_prefix = false
181+
iam_role_permissions_boundary = local.permissions_boundary_arn
178182
instance_types = var.initial_instance_types
179183
min_size = var.initial_node_min_size
180184
max_size = var.initial_node_max_size
@@ -243,6 +247,8 @@ module "karpenter" {
243247
iam_role_use_name_prefix = false
244248
node_iam_role_use_name_prefix = false
245249
create_pod_identity_association = false
250+
iam_role_permissions_boundary_arn = local.permissions_boundary_arn
251+
node_iam_role_permissions_boundary = local.permissions_boundary_arn
246252
iam_role_source_assume_policy_documents = [data.aws_iam_policy_document.source.json]
247253
tags = merge(var.stack_tags, {
248254
})
@@ -265,6 +271,7 @@ module "load_balancer_controller_irsa_role" {
265271
namespace_service_accounts = ["alb:aws-load-balancer-controller"]
266272
}
267273
}
274+
permissions_boundary = local.permissions_boundary_arn
268275
tags = merge(var.stack_tags, {
269276
})
270277
}
@@ -285,6 +292,7 @@ module "ebs_csi_driver_irsa_role" {
285292
namespace_service_accounts = ["kube-system:ebs-csi-driver"]
286293
}
287294
}
295+
permissions_boundary = local.permissions_boundary_arn
288296
tags = merge(var.stack_tags, {
289297
})
290298
}
@@ -329,6 +337,7 @@ module "s3_driver_irsa_role" {
329337
namespace_service_accounts = ["kube-system:s3-csi-driver"]
330338
}
331339
}
340+
permissions_boundary = local.permissions_boundary_arn
332341
tags = merge(var.stack_tags, {
333342
})
334343
}
@@ -351,6 +360,7 @@ module "external_dns_irsa_role" {
351360
namespace_service_accounts = ["external-dns:external-dns-controller"]
352361
}
353362
}
363+
permissions_boundary = local.permissions_boundary_arn
354364
tags = merge(var.stack_tags, {
355365
})
356366
}
@@ -374,6 +384,7 @@ module "cert_manager_irsa_role" {
374384
namespace_service_accounts = ["cert-manager:cert-manager"]
375385
}
376386
}
387+
permissions_boundary = local.permissions_boundary_arn
377388
tags = merge(var.stack_tags, {
378389
})
379390
}

variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,3 +211,9 @@ variable "create_node_security_group" {
211211
default = false
212212
description = "Whether to create a dedicated security group for EKS managed node groups. When true, the node_security_group_id output is populated."
213213
}
214+
215+
variable "permissions_boundary" {
216+
type = string
217+
default = ""
218+
description = "IAM permissions boundary policy name applied to all IAM roles. When set, constructs full ARN from the current account and partition."
219+
}

0 commit comments

Comments
 (0)