Skip to content

Commit 50348dd

Browse files
abrabahbryantbiggs
andauthored
feat: Add instance profile permissions to Karpenter IRSA policy (#434)
* fix: add instance profile permissions to karpenter policy fixes #433 Signed-off-by: Abraham Bah <[email protected]> * fix; use dynamic block instead of repeating StringEquals condition for iam:CreateInstanceProfile statement in karpenter policy * fixup! remove unnecessary whitespace Signed-off-by: Abraham Bah <[email protected]> * fix: Make instance profile creation an opt-in * fix: Update docs --------- Signed-off-by: Abraham Bah <[email protected]> Co-authored-by: Bryant Biggs <[email protected]>
1 parent 0e7201f commit 50348dd

File tree

5 files changed

+25
-2
lines changed

5 files changed

+25
-2
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
22
- repo: https://github.com/antonbabenko/pre-commit-terraform
3-
rev: v1.83.5
3+
rev: v1.83.6
44
hooks:
55
- id: terraform_fmt
66
- id: terraform_wrapper_module_for_each

modules/iam-role-for-service-accounts-eks/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ No modules.
208208
| <a name="input_cluster_autoscaler_cluster_names"></a> [cluster\_autoscaler\_cluster\_names](#input\_cluster\_autoscaler\_cluster\_names) | List of cluster names to appropriately scope permissions within the Cluster Autoscaler IAM policy | `list(string)` | `[]` | no |
209209
| <a name="input_create_role"></a> [create\_role](#input\_create\_role) | Whether to create a role | `bool` | `true` | no |
210210
| <a name="input_ebs_csi_kms_cmk_ids"></a> [ebs\_csi\_kms\_cmk\_ids](#input\_ebs\_csi\_kms\_cmk\_ids) | KMS CMK IDs to allow EBS CSI to manage encrypted volumes | `list(string)` | `[]` | no |
211+
| <a name="input_enable_karpenter_instance_profile_creation"></a> [enable\_karpenter\_instance\_profile\_creation](#input\_enable\_karpenter\_instance\_profile\_creation) | Determines whether Karpenter will be allowed to create the IAM instance profile (v1beta1/v0.32+) | `bool` | `false` | no |
211212
| <a name="input_external_dns_hosted_zone_arns"></a> [external\_dns\_hosted\_zone\_arns](#input\_external\_dns\_hosted\_zone\_arns) | Route53 hosted zone ARNs to allow External DNS to manage records | `list(string)` | <pre>[<br> "arn:aws:route53:::hostedzone/*"<br>]</pre> | no |
212213
| <a name="input_external_secrets_kms_key_arns"></a> [external\_secrets\_kms\_key\_arns](#input\_external\_secrets\_kms\_key\_arns) | List of KMS Key ARNs that are used by Secrets Manager that contain secrets to mount using External Secrets | `list(string)` | <pre>[<br> "arn:aws:kms:*:*:key/*"<br>]</pre> | no |
213214
| <a name="input_external_secrets_secrets_manager_arns"></a> [external\_secrets\_secrets\_manager\_arns](#input\_external\_secrets\_secrets\_manager\_arns) | List of Secrets Manager ARNs that contain secrets to mount using External Secrets | `list(string)` | <pre>[<br> "arn:aws:secretsmanager:*:*:secret:*"<br>]</pre> | no |

modules/iam-role-for-service-accounts-eks/policies.tf

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,6 @@ data "aws_iam_policy_document" "karpenter_controller" {
645645
"ec2:TerminateInstances",
646646
"ec2:DeleteLaunchTemplate",
647647
]
648-
649648
resources = ["*"]
650649

651650
condition {
@@ -691,6 +690,22 @@ data "aws_iam_policy_document" "karpenter_controller" {
691690
resources = var.karpenter_controller_node_iam_role_arns
692691
}
693692

693+
dynamic "statement" {
694+
for_each = var.enable_karpenter_instance_profile_creation ? [1] : []
695+
696+
content {
697+
actions = [
698+
"iam:AddRoleToInstanceProfile",
699+
"iam:CreateInstanceProfile",
700+
"iam:DeleteInstanceProfile",
701+
"iam:GetInstanceProfile",
702+
"iam:RemoveRoleFromInstanceProfile",
703+
"iam:TagInstanceProfile",
704+
]
705+
resources = ["*"]
706+
}
707+
}
708+
694709
statement {
695710
actions = ["eks:DescribeCluster"]
696711
resources = ["arn:${local.partition}:eks:${local.region}:${local.account_id}:cluster/${local.karpenter_controller_cluster_name}"]

modules/iam-role-for-service-accounts-eks/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,12 @@ variable "karpenter_sqs_queue_arn" {
252252
default = null
253253
}
254254

255+
variable "enable_karpenter_instance_profile_creation" {
256+
description = "Determines whether Karpenter will be allowed to create the IAM instance profile (v1beta1/v0.32+)"
257+
type = bool
258+
default = false
259+
}
260+
255261
# AWS Load Balancer Controller
256262
variable "attach_load_balancer_controller_policy" {
257263
description = "Determines whether to attach the Load Balancer Controller policy to the role"

wrappers/iam-role-for-service-accounts-eks/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ module "wrapper" {
2828
cluster_autoscaler_cluster_names = try(each.value.cluster_autoscaler_cluster_names, var.defaults.cluster_autoscaler_cluster_names, [])
2929
create_role = try(each.value.create_role, var.defaults.create_role, true)
3030
ebs_csi_kms_cmk_ids = try(each.value.ebs_csi_kms_cmk_ids, var.defaults.ebs_csi_kms_cmk_ids, [])
31+
enable_karpenter_instance_profile_creation = try(each.value.enable_karpenter_instance_profile_creation, var.defaults.enable_karpenter_instance_profile_creation, false)
3132
external_dns_hosted_zone_arns = try(each.value.external_dns_hosted_zone_arns, var.defaults.external_dns_hosted_zone_arns, ["arn:aws:route53:::hostedzone/*"])
3233
external_secrets_kms_key_arns = try(each.value.external_secrets_kms_key_arns, var.defaults.external_secrets_kms_key_arns, ["arn:aws:kms:*:*:key/*"])
3334
external_secrets_secrets_manager_arns = try(each.value.external_secrets_secrets_manager_arns, var.defaults.external_secrets_secrets_manager_arns, ["arn:aws:secretsmanager:*:*:secret:*"])

0 commit comments

Comments
 (0)