Utiliser plusieurs souscriptions Azure dans vos déploiements Terraform

Utiliser plusieurs souscriptions Azure dans vos déploiements Terraform

Selon la configuration de vos ressources, il se peut que votre solution, de scripts IaC Terraform, puisse accéder à plusieurs souscriptions. Voici un article vous expliquant comment référencer plusieurs souscriptions et bien sûr comment l'exploiter dans vos scripts Terraform.

Par exemple, imaginez que vous avez une ressource mutualisée: un Azure Key Vault contenant un certificat que vous devez récupérer pour pouvoir ajouter sa référence lors de votre déploiement d'infrastructure d'une Application Gateway.

Ce Key Vault est présent dans une souscription externe à celle qui va contenir votre infrastructure cible, ici notre Application Gateway.

Dans votre fichier de configuration où l'on retrouve la définition du provider Azure, vous devez alors déclarer deux souscriptions, voici un exemple :

terraform {
  required_version = "1.4.4"
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=3.51.0"
    }
  }
}

# Souscription de la solution Application Gateway
provider "azurerm" {
  alias           = "app-gateway-sub"
  subscription_id = "f60a5f39-23cf-4fb0-aa30-3153d9e61745"
  tenant_id       = "e4242215-2f5b-4901-9f26-666438c4ad3e"
  client_id       = "84c31249-c270-4e7d-b5a9-48807c9b4bec"
  client_secret   = "AXCTYRAadfvASDDFvb4234EWR$3"
  features {}
}

# Souscription du Key Vault
provider "azurerm" {
  alias           = "common-sub" 
  subscription_id = "b2b31f9e-1ae6-46de-a9eb-8f3783e0ded0"
  tenant_id       = "e4242215-2f5b-4901-9f26-666438c4ad3e"
  client_id       = "677006af-9b38-4c16-96a0-96607e9d3787"
  client_secret   = "BACHTR3235FEiadfb%#$W%weF#@a"
  features {}
}

Note: les éléments de connections ci-dessus y sont à titre d'exemple, il faudra bien sûr mettre en place un mécanisme de sécurisation pour vos usages.

Comme vous pouvez le voir le mot clé à retenir est "alias" et c'est grâce à celui-ci que nous allons pouvoir spécifier l'une ou l'autre souscription dans nos ressources Azure via Terraform.

Par exemple; pour lire un certificat présent dans la souscription "common-sub" :

data "azurerm_key_vault" "kv" {
  provider            = azurerm.common-sub
  name                = "certificats"
  resource_group_name = "Common"
}

data "azurerm_key_vault_certificate" "appGateway" {
  name         = "appGatewaySSL"
  key_vault_id = data.azurerm_key_vault.kv.id
}

output "certificate_thumbprint" {
  value = data.azurerm_key_vault_certificate.appGateway.thumbprint
}

Et pour déployer l'Azure Application Gateway sur la souscription "app-gateway-sub":

resource "azurerm_resource_group" "app_gateway" {
  provider = azurerm.app-gateway-sub
  name     = "AppGateway"
  location = "West Europe"
}

resource "azurerm_application_gateway" "app_gateway" {
  name                = "AppGateway"
  resource_group_name = azurerm_resource_group.app_gateway.name
  location            = azurerm_resource_group.app_gateway.location
  sku                 = "Standard_v2"

  ssl_certificate {
    name     = data.azurerm_key_vault_certificate.appGateway.name
    data     = data.azurerm_key_vault_certificate.appGateway.certificate_data
    password = var.password
  }
}

Ici le mot clé à retenir est "provider" qui va nous permettre de spécifier la souscription cible associée à vos ressources Azure.

Pour aller plus loin, dans cette possibilité proposée par l'outil Terraform, je vous propose de vous dirigez vers la documentation officielle de l'éditeur HashiCorp:
Provider Configuration - Configuration Language | Terraform | HashiCorp Developer

Did you find this article valuable?

Support Antoine LOIZEAU by becoming a sponsor. Any amount is appreciated!