Explore Azure managed services to migrate Istio Gateway TLS certificates to Azure Key Vault while reducing manual effort and improving security.

To enable HTTPS in your service, you need to manage TLS certificates. Manual management has several issues; primarily, it increases the attack surface. This migration enabled certificate management from Azure Key Vault while keeping the Istio Ingress Gateway in place.

The Azure Key Vault Secrets Store CSI Driver and Azure Workload Identity connected Key Vault with Kubernetes. This solution reduced manual work, improved access control, and allowed certificates to be replaced without a service outage.

The Challenge: Manual TLS Certificate Management

The team was manually managing TLS certificates by storing them in Kubernetes secrets in the ingress namespace. While this setup supported HTTPS, it meant the team had to manage each certificate.

This also increased the attack surface area by making it difficult to implement access controls. More importantly, the team had to track certificate renewals; if certificates were renewed manually, external routing would become unavailable.

Secure Your TLS Certificates.

Chat animation


The Solution: Connect Azure Key Vault with Istio

Istio Gateways can use local Kubernetes TLS secrets via credentialName. Since Istio cannot retrieve certificates directly from Azure Key Vault, the team used the Secrets Store CSI Driver to sync certificate data from Key Vault to Kubernetes. The team also used Azure Workload Identity to connect a Kubernetes Service Account to an Azure Managed Identity through a federated OIDC credential.

The setup we were after was:

Azure Key Vault → CSI Driver → Kubernetes TLS Secret → Istio Gateway

This solution allowed us to manage certificates from Azure Key Vault while still using Istio.

Migrating Istio Gateway TLS Certificates to Azure Key Vault

Migration Process

The migration occurred in four phases.

Phase 1: Move the Certificate

The team exported the active certificate components and constructed an encrypted PKCS12 (.pfx) file. They imported the file to Azure Key Vault as a certificate asset.

Lastly, the team assigned the necessary Azure RBAC roles to the cluster’s Managed Identity.

Phase 2: Set Up Workload Identity

The team provisioned a dedicated Kubernetes Service Account and associated it with the Azure Client ID.

The team subsequently associated a federated credential with the Azure Managed Identity and the OIDC issuer URL for the AKS cluster. Now, the team doesn’t need to manage long-lived cloud credentials in the cluster.

Phase 3: Sync the Certificate

The team created a SecretProviderClass to associate the Key Vault certificate with a Kubernetes TLS secret.

As the CSI driver needs to mount a pod to perform the retrieval and synchronization, a temporary lightweight deployment performed the first synchronization and created the TLS secret.

Phase 4: Update the Istio Gateway

The team backed up the previous state of the Istio Gateway prior to the update.

The team then altered credentialName to point to the newly managed CSI secret. A rolling update of the ingress deployment installed the new certificate without disturbing active traffic.

Verification

The team executed the validation scripts and conducted external TLS handshake tests after completing the cross-over.

The verification checks confirmed the Kubernetes secret contained the certificate and private key. Additionally, live HTTPS communication used a new certificate with a valid future period before expiration.

Results

Area Before After
Source of truth Kubernetes TLS secrets Azure Key Vault
Access control Cluster-level access Azure RBAC
Renewal process Manual updates Rotation and background sync
Audit trails Limited Azure access logs

The migration improved certificate management and access control. Istio still needs to use the Kubernetes TLS secret for its Gateway configuration.

Conclusion

Azure Key Vault stores the secret. The Secrets Store CSI Driver runs the sync. Istio uses the secret for HTTPS traffic.

This design improved access control, reduced manual work, and added certificate migration for HTTPS traffic. Our Azure Consulting team is here to help if you are having trouble enabling HTTPS in your service.