Dernière révision : mai 2026
Configurez les services AWS figurant à l'examen AZ-500 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 labo, vous aurez provisionné, avec du Terraform simple, la ligne de base d'un ingénieur en sécurité Azure — un Key Vault hébergeant une clé de chiffrement gérée par le client, un compte de stockage chiffré avec cette clé, un groupe de sécurité réseau avec des logs de flux vers Log Analytics, et le plan Cloud Security Posture Management de Microsoft Defender pour le Cloud activé au niveau de l'abonnement. Cinq blocs ; la posture de référence AZ-500.
Déposez 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).Principalement gratuit ou quasi gratuit :
Environ 1 $US/mois à l'arrêt. Les plans avancés de Defender pour le Cloud entraînent des coûts supplémentaires si vous les activez.
Introduction standard d'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" {}
data "azurerm_subscription" "current" {}
locals {
tags = {
Project = "certlabpro-az-500"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-500-rg"
location = "eastus"
tags = local.tags
}Les clés gérées par le client (CMK) sont la primitive de Sécurité des données de l'AZ-500 : vous fournissez et faites pivoter la clé de chiffrement, et le stockage Azure/SQL/etc. l'utilise pour le chiffrement d'enveloppe. Comparez aux clés gérées par Microsoft (MMK) — plus facile mais Microsoft détient la clé.
Nous créons un Key Vault avec l'autorisation RBAC, puis créons une clé RSA de 2048 bits à l'intérieur. Le compte de stockage de l'étape 3 fera référence à cette clé pour le chiffrement au repos. Les domaines Implémenter la protection de la plateforme et Gérer les opérations de sécurité de l'AZ-500 s'appuient tous deux sur ce modèle CMK comme réponse au chiffrement au repos lorsque la question mentionne "l'organisation contrôle les clés".
resource "azurerm_key_vault" "main" {
name = "kv-az500-${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
purge_protection_enabled = false # set true in production
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_key_vault_key" "cmk" {
name = "storage-cmk"
key_vault_id = azurerm_key_vault.main.id
key_type = "RSA"
key_size = 2048
key_opts = ["unwrapKey", "wrapKey"]
depends_on = [azurerm_role_assignment.kv_admin_self]
rotation_policy {
automatic {
time_before_expiry = "P30D"
}
expire_after = "P365D"
notify_before_expiry = "P30D"
}
}Les comptes de stockage utilisant des clés gérées par le client nécessitent une identité affectée par l'utilisateur pour lire la clé depuis Key Vault. Nous créons cette identité, lui accordons le rôle Utilisateur du chiffrement du service de chiffrement de Key Vault sur le Key Vault, puis la lions au compte de stockage via le bloc customer_managed_key.
Le mode key_versionless (utilisant customer_managed_key.key_vault_key_id = key_vault_key.cmk.versionless_id) est la meilleure pratique AZ-500 pour la rotation automatique des clés : lorsque la clé pivote, le stockage récupère automatiquement la nouvelle version sans reconfiguration manuelle.
resource "azurerm_user_assigned_identity" "storage_cmk" {
name = "uami-az500-storage"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
tags = local.tags
}
resource "azurerm_role_assignment" "storage_kv_user" {
scope = azurerm_key_vault.main.id
role_definition_name = "Key Vault Crypto Service Encryption User"
principal_id = azurerm_user_assigned_identity.storage_cmk.principal_id
}
resource "azurerm_storage_account" "data" {
name = "az500data${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
identity {
type = "UserAssigned"
identity_ids = [azurerm_user_assigned_identity.storage_cmk.id]
}
customer_managed_key {
key_vault_key_id = azurerm_key_vault_key.cmk.versionless_id
user_assigned_identity_id = azurerm_user_assigned_identity.storage_cmk.id
}
tags = local.tags
depends_on = [azurerm_role_assignment.storage_kv_user]
}Les logs de flux NSG sont la primitive de Gestion des opérations de sécurité de l'AZ-500 pour la visibilité du trafic réseau — ils enregistrent chaque flux accepté ou refusé par une règle NSG (tuple de 5 éléments + octets + paquets + résultat), persistés dans un compte de stockage et interrogeables via Traffic Analytics sur Log Analytics.
Nous provisionnons le NSG, un Network Watcher (le service géré par Azure régional qui possède le point de terminaison des logs de flux) et une ressource de log de flux avec Traffic Analytics activé. Les logs de flux sont stockés dans un compte de stockage (séparé de notre stockage de données) et sont traités dans Log Analytics pour les requêtes KQL.
resource "azurerm_network_security_group" "main" {
name = "nsg-az500"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
tags = local.tags
}
resource "azurerm_network_watcher" "main" {
name = "nw-az500"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
tags = local.tags
}
resource "azurerm_storage_account" "flow_logs" {
name = "az500flow${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
tags = local.tags
}
resource "azurerm_log_analytics_workspace" "main" {
name = "log-az500"
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_network_watcher_flow_log" "main" {
name = "nsg-az500-flow"
network_watcher_name = azurerm_network_watcher.main.name
resource_group_name = azurerm_resource_group.main.name
target_resource_id = azurerm_network_security_group.main.id
storage_account_id = azurerm_storage_account.flow_logs.id
enabled = true
version = 2
retention_policy {
enabled = true
days = 30
}
traffic_analytics {
enabled = true
workspace_id = azurerm_log_analytics_workspace.main.workspace_id
workspace_region = azurerm_log_analytics_workspace.main.location
workspace_resource_id = azurerm_log_analytics_workspace.main.id
interval_in_minutes = 10
}
}Defender pour le Cloud est le service CSPM (Cloud Security Posture Management) et CWP (Cloud Workload Protection) d'Azure. Le niveau CSPM Fondamental est gratuit et inclut l'évaluation Microsoft Cloud Security Benchmark — l'adaptation par Azure des contrôles CIS / NIST en vérifications automatisées. Le domaine Gérer les opérations de sécurité de l'AZ-500 teste cette ligne de base comme primitive de visibilité de sécurité dès le premier jour.
Nous activons le plan tarifaire fondamental au niveau de l'abonnement (gratuit) et un auto_provisioning_setting qui installe automatiquement l'agent Log Analytics sur les nouvelles VM — ce qui signifie que toute nouvelle ressource de calcul dans cet abonnement obtient l'observabilité sans installation manuelle. Les plans Defender payants (Defender for Servers, Defender for Storage, Defender for SQL, etc.) activent chacun la détection par type de ressource ; nous les laissons désactivés ici pour des raisons de coût, mais les mentionnons comme question de suivi.
Avec cette dernière pièce en place, la ligne de base AZ-500 est formée : chiffrement CMK au repos, visibilité des flux réseau, gestion de la posture. Chaque modèle AZ-500 supplémentaire (Sentinel, Accès conditionnel, Points de terminaison privés, Pare-feu Azure) s'attache à cette base.
resource "azurerm_security_center_subscription_pricing" "cspm" {
tier = "Free" # Foundational CSPM
resource_type = "CloudPosture"
}
# Optional uncomment to enable paid Defender plans (each charges per resource).
# resource "azurerm_security_center_subscription_pricing" "servers" {
# tier = "Standard"
# resource_type = "VirtualMachines"
# subplan = "P2"
# }terraform destroy supprime tout. Remarques :
purge_soft_delete_on_destroy = true dans les fonctionnalités du fournisseur permet à la destruction de purger réellement.L'AZ-500 couvre une vaste surface de sécurité que ce labo ne peut pas inclure — Microsoft Sentinel (le SIEM complet, couvert par SC-200), les politiques d'accès conditionnel de Microsoft Entra, la gestion des identités privilégiées (PIM), la protection des identités, Azure Firewall + Politique de pare-feu + IDPS Premium, Azure Bastion, DDoS Protection Standard, Web Application Firewall sur Front Door / App Gateway, groupes de sécurité d'application, Points de terminaison privés + Private Link Service, customer-lockbox, Azure Disk Encryption avec KEK, initiatives Azure Policy pour la conformité, et les plans de protection des charges de travail de Defender pour le Cloud (Defender for Servers / Storage / SQL / Containers / Kubernetes).
Nous nous en tenons à la triade CMK + logs de flux réseau + CSPM car ils constituent le substrat sur lequel tous les modèles AZ-500 plus avancés se composent. Sentinel lit les espaces de travail Log Analytics comme le nôtre. L'accès conditionnel protège les identités accédant au stockage chiffré par CMK. Les points de terminaison privés remplacent l'accès réseau public sur le compte de stockage.
Pour les surfaces mentionnées ci-dessus, consultez les sections Parcourir, Guide et Editorial de cette page de certification.