Dernière révision : mai 2026
Configurez les services AWS figurant à l'examen AZ-400 avec Terraform simple — un bloc à la fois, chacun étant lié à un domaine de l'examen. Le même code fonctionne sur OpenTofu.
À la fin de ce laboratoire, vous aurez provisionné, avec du Terraform pur, l'infrastructure côté AZ-400 d'un pipeline CI/CD — un Azure Container Registry pour y publier des images, un cluster AKS comme cible de déploiement avec identité gérée et intégration Log Analytics, un Key Vault pour les secrets du pipeline, et les attributions de rôle connectant tout à l'identité kubelet d'AKS afin qu'il puisse extraire des images et lire des secrets sans identifiants dans le YAML du pipeline.
Insérez les extraits dans un seul fichier main.tf, exécutez terraform init, puis terraform apply étape par étape.
>= 1.5 ou OpenTofu >= 1.6.az login).AKS représente le coût principal ici :
~75 $/mois au total en fonctionnement. L'anti-pattern de coût AZ-400 le plus fréquemment testé est de laisser un cluster AKS inutilisé en cours d'exécution — détruisez ou arrêtez le cluster lorsqu'il n'est pas utilisé.
Début standard Azure.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
random = { source = "hashicorp/random", version = "~> 3.6" }
}
}
provider "azurerm" {
features {
key_vault {
purge_soft_delete_on_destroy = true
}
}
}
resource "random_id" "suffix" {
byte_length = 3
}
data "azurerm_client_config" "current" {}
locals {
tags = {
Project = "certlabpro-az-400"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-400-rg"
location = "eastus"
tags = local.tags
}ACR est l'endroit où le pipeline CI pousse les images conteneurs que le pipeline CD tire. AZ-400 teste cette frontière push/pull comme un modèle de sécurité : le pipeline de build obtient AcrPush, la cible de déploiement obtient AcrPull, et jamais les deux ne se rencontrent.
Nous utilisons le niveau Basique — le moins cher, avec une seule cible de réplication. Le niveau Premium ajoute la géo-réplication et la fonction Content Trust (signature d'images) ; les deux sont des sujets d'examen AZ-400 mais sont trop coûteux pour le laboratoire.
resource "azurerm_container_registry" "main" {
name = "acrcertlabpro${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
sku = "Basic"
admin_enabled = false # admin user disabled — Entra-only access
tags = local.tags
}AKS est la cible de déploiement de choix pour les charges de travail conteneurisées dans AZ-400. Nous utilisons une identité gérée attribuée par le système (la valeur par défaut moderne ; l'authentification par principal de service est en cours d'abandon), un seul petit pool de nœuds système, et azure_policy_enabled = true (la réponse AZ-400 Implémenter la conformité pour l'application de politiques au niveau du cluster via l'extension Azure Policy).
L'intégration de l'espace de travail Log Analytics + de l'agent OMS est la réponse AZ-400 Implémenter l'instrumentation pour l'observabilité au niveau du cluster — chaque journal de pod, chaque métrique de nœud, chaque événement d'audit Kubernetes atterrit dans Log Analytics pour les requêtes KQL.
resource "azurerm_log_analytics_workspace" "main" {
name = "log-az400"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
sku = "PerGB2018"
retention_in_days = 30
tags = local.tags
}
resource "azurerm_kubernetes_cluster" "main" {
name = "aks-az400"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
dns_prefix = "azaks${random_id.suffix.hex}"
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_D2s_v3"
}
identity {
type = "SystemAssigned"
}
oms_agent {
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
}
azure_policy_enabled = true
tags = local.tags
}
# Grant the AKS kubelet identity AcrPull on the registry from Step 2.
# This is the AZ-400 password-less image-pull pattern.
resource "azurerm_role_assignment" "aks_acr_pull" {
scope = azurerm_container_registry.main.id
role_definition_name = "AcrPull"
principal_id = azurerm_kubernetes_cluster.main.kubelet_identity[0].object_id
}Les secrets du pipeline — clés API, identifiants de déploiement, jetons tiers — ne devraient jamais se trouver dans le YAML du pipeline. Le domaine Implémenter la sécurité et valider les bases de code pour la conformité d'AZ-400 teste ce modèle Key-Vault-Reference-in-pipeline-task : les pipelines référencent les secrets par leur nom depuis Key Vault au moment de l'exécution.
Nous accordons à l'identité kubelet d'AKS le rôle d'utilisateur de secrets Key Vault afin que les pods déployés puissent également lire les secrets via le pilote CSI Secrets Store (le mécanisme de montage intra-cluster pour les secrets sauvegardés par Key Vault). Avec ce rôle en place, chaque pod qui a besoin d'un mot de passe de base de données le lit via le pilote CSI, et non à partir d'une variable d'environnement intégrée à l'image.
resource "azurerm_key_vault" "main" {
name = "kv-az400-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
enable_rbac_authorization = true
soft_delete_retention_days = 7
tags = local.tags
}
resource "azurerm_role_assignment" "kv_admin_self" {
scope = azurerm_key_vault.main.id
role_definition_name = "Key Vault Administrator"
principal_id = data.azurerm_client_config.current.object_id
}
resource "azurerm_role_assignment" "aks_kv_reader" {
scope = azurerm_key_vault.main.id
role_definition_name = "Key Vault Secrets User"
principal_id = azurerm_kubernetes_cluster.main.kubelet_identity[0].object_id
}Log Analytics gère les signaux au niveau du cluster (métriques de nœud, journaux de pod) ; App Insights gère les signaux au niveau de l'application (suivi des requêtes, télémétrie des exceptions, suivi des dépendances, traces distribuées). AZ-400 Implémenter l'instrumentation teste les deux couches — l'examen attend que vous les connectiez par paires, avec App Insights en mode basé sur l'espace de travail utilisant l'espace de travail Log Analytics de l'Étape 3.
Avec cette dernière pièce en place, la forme cible CI/CD d'AZ-400 est complète : ACR reçoit les images de build, AKS les déploie, Key Vault fournit les secrets, Log Analytics + App Insights observent le résultat. Le YAML du pipeline (Azure DevOps ou GitHub Actions) pilote le tout — il réside dans le dépôt source, pas dans Terraform.
resource "azurerm_application_insights" "main" {
name = "appi-az400"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
workspace_id = azurerm_log_analytics_workspace.main.id
application_type = "web"
tags = local.tags
}terraform destroy déconstruit tout. AKS est l'élément de facturation de 70 $/mois pour le nœud système — détruisez-le rapidement. ACR Basique coûte 5 $/mois. L'espace de travail Log Analytics conserve les données pendant la période de rétention (30 jours ici) même après la destruction des consommateurs ; l'espace de travail lui-même se détruit proprement.
AZ-400 couvre les surfaces d'Azure DevOps Services et de GitHub sur Azure qui ne résident pas dans le fournisseur azurerm — organisations Azure DevOps, projets, dépôts, pipelines, pools d'agents, environnements, groupes de variables, connexions de service (tous dans le fournisseur azuredevops distinct), GitHub Advanced Security pour Azure DevOps, et les règles Application Insights Live Metrics + Smart Detection.
Nous nous en tenons à l'infrastructure cible de déploiement car c'est le substrat sur lequel les pipelines AZ-400 déploient réellement. Une fois qu'ACR + AKS + Key Vault + l'observabilité sont en place, le YAML du pipeline (dans votre dépôt source, et non dans Terraform) effectue le travail de build-push-deploy via les tâches standard d'Azure CLI.
Pour une couverture des modèles Azure DevOps Services + GitHub Actions, consultez les sections Parcourir, Guide et Editorial de cette page de certification.