From de3c0de3099b449703db2c168edd6110b774eaf9 Mon Sep 17 00:00:00 2001
From: Diego Lagos <92735530+diegolagospagopa@users.noreply.github.com>
Date: Wed, 14 Aug 2024 17:18:11 +0200
Subject: [PATCH] feat: Cert-mounter added workload identity option (#340)
* added configuration for workload identity
* minor fix
* fix path for template
* pre-commit fixs
---
cert_mounter/README.md | 4 +++
...tpl => cert-mounter-pod-identity.yaml.tpl} | 0
.../cert-mounter-workload-identity.yaml.tpl | 17 +++++++++++
cert_mounter/main.tf | 14 +++++++--
cert_mounter/variables.tf | 29 +++++++++++++++++++
5 files changed, 61 insertions(+), 3 deletions(-)
rename cert_mounter/helm/{cert-mounter-yaml.tpl => cert-mounter-pod-identity.yaml.tpl} (100%)
create mode 100644 cert_mounter/helm/cert-mounter-workload-identity.yaml.tpl
diff --git a/cert_mounter/README.md b/cert_mounter/README.md
index a2af5993..de42516d 100644
--- a/cert_mounter/README.md
+++ b/cert_mounter/README.md
@@ -40,10 +40,14 @@ No modules.
| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
+| [cert\_mounter\_chart\_version](#input\_cert\_mounter\_chart\_version) | (Optional) Cert mounter chart version | `string` | `"1.0.4"` | no |
| [certificate\_name](#input\_certificate\_name) | (Required) Name of the certificate stored in the keyvault, that will be installed as a secret in aks | `string` | n/a | yes |
| [kv\_name](#input\_kv\_name) | (Required) Key vault name where to retrieve the certificate | `string` | n/a | yes |
| [namespace](#input\_namespace) | (Required) Namespace where the cert secret will be created | `string` | n/a | yes |
| [tenant\_id](#input\_tenant\_id) | (Required) Tenant identifier | `string` | n/a | yes |
+| [workload\_identity\_client\_id](#input\_workload\_identity\_client\_id) | ClientID in form of 'qwerty123-a1aa-1234-xyza-qwerty123' linked to workload identity | `string` | `null` | no |
+| [workload\_identity\_enabled](#input\_workload\_identity\_enabled) | Enable workload identity chart | `bool` | `false` | no |
+| [workload\_identity\_service\_account\_name](#input\_workload\_identity\_service\_account\_name) | Service account name linked to workload identity | `string` | `null` | no |
## Outputs
diff --git a/cert_mounter/helm/cert-mounter-yaml.tpl b/cert_mounter/helm/cert-mounter-pod-identity.yaml.tpl
similarity index 100%
rename from cert_mounter/helm/cert-mounter-yaml.tpl
rename to cert_mounter/helm/cert-mounter-pod-identity.yaml.tpl
diff --git a/cert_mounter/helm/cert-mounter-workload-identity.yaml.tpl b/cert_mounter/helm/cert-mounter-workload-identity.yaml.tpl
new file mode 100644
index 00000000..d4288c7f
--- /dev/null
+++ b/cert_mounter/helm/cert-mounter-workload-identity.yaml.tpl
@@ -0,0 +1,17 @@
+namespace: ${NAMESPACE}
+
+deployment:
+ create: true
+
+kvCertificatesName:
+ - ${CERTIFICATE_NAME}
+
+keyvault:
+ name: ${KEY_VAULT_NAME}
+ tenantId: ${TENANT_ID}
+
+serviceAccount:
+ name: ${SERVICE_ACCOUNT_NAME}
+
+azure:
+ workloadIdentityClientId: ${WORKLOAD_IDENTITY_CLIENT_ID}
diff --git a/cert_mounter/main.tf b/cert_mounter/main.tf
index b04b67db..8ec21663 100644
--- a/cert_mounter/main.tf
+++ b/cert_mounter/main.tf
@@ -2,18 +2,26 @@ resource "helm_release" "cert_mounter" {
name = "cert-mounter-blueprint"
repository = "https://pagopa.github.io/aks-helm-cert-mounter-blueprint"
chart = "cert-mounter-blueprint"
- version = "1.0.4"
+ version = local.chart_version
namespace = var.namespace
timeout = 120
force_update = true
values = [
- templatefile("${path.module}/helm/cert-mounter-yaml.tpl", {
+ var.workload_identity_enabled ?
+ templatefile("${path.module}/helm/cert-mounter-workload-identity.yaml.tpl", {
+ NAMESPACE = var.namespace,
+ CERTIFICATE_NAME = var.certificate_name,
+ KEY_VAULT_NAME = var.kv_name
+ TENANT_ID = var.tenant_id
+ SERVICE_ACCOUNT_NAME = var.workload_identity_service_account_name
+ WORKLOAD_IDENTITY_CLIENT_ID = var.workload_identity_client_id
+ }) :
+ templatefile("${path.module}/helm/cert-mounter-pod-identity.yaml.tpl", {
NAMESPACE = var.namespace,
CERTIFICATE_NAME = var.certificate_name,
KEY_VAULT_NAME = var.kv_name
TENANT_ID = var.tenant_id
})
-
]
}
diff --git a/cert_mounter/variables.tf b/cert_mounter/variables.tf
index ad885c94..831598e8 100644
--- a/cert_mounter/variables.tf
+++ b/cert_mounter/variables.tf
@@ -1,3 +1,7 @@
+locals {
+ chart_version = var.workload_identity_enabled ? "2.0.0" : "1.0.4"
+}
+
variable "namespace" {
type = string
description = "(Required) Namespace where the cert secret will be created"
@@ -18,3 +22,28 @@ variable "tenant_id" {
description = "(Required) Tenant identifier"
}
+variable "cert_mounter_chart_version" {
+ type = string
+ description = "(Optional) Cert mounter chart version"
+ default = "1.0.4"
+}
+
+variable "workload_identity_enabled" {
+ type = bool
+ description = "Enable workload identity chart"
+ default = false
+}
+
+variable "workload_identity_service_account_name" {
+ type = string
+ description = "Service account name linked to workload identity"
+ default = null
+}
+
+variable "workload_identity_client_id" {
+ type = string
+ description = "ClientID in form of 'qwerty123-a1aa-1234-xyza-qwerty123' linked to workload identity"
+ default = null
+}
+
+