Última revisión: mayo de 2026
Crea los servicios de AWS del examen AZ-500 con Terraform puro: bloque a bloque, cada uno vinculado a un dominio del examen. El mismo código funciona en OpenTofu.
Al final de este laboratorio, habrás aprovisionado, con Terraform plano, la línea base del ingeniero de seguridad de Azure: un Key Vault que aloja una clave de cifrado administrada por el cliente, una cuenta de almacenamiento cifrada con esa clave, un grupo de seguridad de red con registros de flujo en Log Analytics y el plan de Cloud Security Posture Management de Microsoft Defender for Cloud habilitado en el ámbito de la suscripción. Cinco bloques; la postura de referencia AZ-500.
Suelta los fragmentos en un único main.tf, ejecuta terraform init, luego terraform apply paso a paso.
>= 1.5 u OpenTofu >= 1.6.az login).En su mayoría gratis o casi gratis:
~$1/mes inactiva. Los planes avanzados de Defender for Cloud tienen un costo adicional si los habilitas.
Inicio estándar de 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
}Las claves administradas por el cliente (CMK) son la primitiva de Seguridad de datos de AZ-500: tú proporcionas y rotas la clave de cifrado, y el almacenamiento/SQL/etc. de Azure la utiliza para el cifrado de sobre. Compáralas con las claves administradas por Microsoft (MMK) — más fáciles, pero Microsoft posee la clave.
Creamos un Key Vault con autorización RBAC, luego creamos una clave RSA de 2048 bits dentro de él. La cuenta de almacenamiento en el Paso 3 hará referencia a esta clave para el cifrado en reposo. Los dominios Implementar protección de plataforma y Administrar operaciones de seguridad de AZ-500 se basan en este patrón CMK como la respuesta de cifrado en reposo cuando la pregunta menciona "la organización controla las claves".
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"
}
}Las cuentas de almacenamiento que utilizan claves administradas por el cliente necesitan una identidad asignada por el usuario para leer la clave de Key Vault. Creamos esa identidad, le otorgamos el rol Key Vault Crypto Service Encryption User en Key Vault, y luego la vinculamos a la cuenta de almacenamiento a través del bloque customer_managed_key.
El modo key_versionless (usando customer_managed_key.key_vault_key_id = key_vault_key.cmk.versionless_id) es la respuesta de mejores prácticas de AZ-500 para la rotación automática de claves: cuando la clave rota, el almacenamiento selecciona automáticamente la nueva versión sin reconfiguración manual.
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]
}Los registros de flujo de NSG son la primitiva de Administrar operaciones de seguridad de AZ-500 para la visibilidad del tráfico de red — registran cada flujo aceptado o denegado por una regla de NSG (tupla de 5 + bytes + paquetes + resultado), se mantienen en una cuenta de almacenamiento y se pueden consultar a través de Traffic Analytics en Log Analytics.
Aprovisionamos el NSG, un Network Watcher (el servicio regional administrado por Azure que posee el punto final del registro de flujo), y un recurso de registro de flujo con Traffic Analytics habilitado. Los registros de flujo se almacenan en una cuenta de almacenamiento (separada de nuestro almacenamiento de datos) y se procesan en Log Analytics para consultas 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 for Cloud es el servicio CSPM (Cloud Security Posture Management) y CWP (Cloud Workload Protection) de Azure. El nivel Foundational CSPM es gratuito e incluye la evaluación Microsoft Cloud Security Benchmark — la adaptación de Azure de los controles CIS/NIST en comprobaciones automatizadas. El dominio Administrar operaciones de seguridad de AZ-500 evalúa esta línea base como la primitiva de visibilidad de seguridad del primer día.
Habilitamos el plan de precios Foundational (gratuito) con alcance de suscripción y una auto_provisioning_setting que conecta automáticamente el agente de Log Analytics en nuevas VM — lo que significa que la nueva computación en esta suscripción obtiene observabilidad sin instalación manual. Los planes de pago de Defender (Defender for Servers, Defender for Storage, Defender for SQL, etc.) habilitan la detección por tipo de recurso; los desactivamos aquí por razones de costo, pero los mencionamos como la pregunta de seguimiento.
Con esta pieza final, la línea base de AZ-500 toma forma: cifrado CMK en reposo, visibilidad del flujo de red, gestión de la postura. Cada patrón adicional de AZ-500 (Sentinel, Conditional Access, Private Endpoints, Azure Firewall) se adjunta a esta 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 elimina todo. Notas:
purge_soft_delete_on_destroy = true en las características del proveedor hace que destroy purgue realmente.AZ-500 cubre una amplia superficie de seguridad que este laboratorio no puede abarcar — Microsoft Sentinel (el SIEM completo, cubierto en SC-200), las políticas de Acceso Condicional de Microsoft Entra, Privileged Identity Management (PIM), Identity Protection, Azure Firewall + Firewall Policy + Premium IDPS, Azure Bastion, DDoS Protection Standard, Web Application Firewall en Front Door / App Gateway, Application Security Groups, Private Endpoints + Private Link Service, customer-lockbox, Azure Disk Encryption con KEK, iniciativas de Azure Policy para el cumplimiento, y los planes de Defender for Cloud Workload Protection (Defender for Servers / Storage / SQL / Containers / Kubernetes).
Nos ceñimos a la tríada CMK + registros de flujo de red + CSPM porque son el sustrato sobre el que se componen todos los patrones más avanzados de AZ-500. Sentinel lee desde espacios de trabajo de Log Analytics como el nuestro. El Acceso Condicional protege las identidades que acceden al almacenamiento cifrado con CMK. Los Private Endpoints reemplazan el acceso a la red pública en la cuenta de almacenamiento.
Para las superficies anteriores, consulta las secciones Buscar, Manual y Editorial de esta página de certificación.