Última revisão: maio de 2026
Construa os serviços da AWS do exame AZ-500 com Terraform puro — um bloco de cada vez, cada um vinculado a um domínio do exame. O mesmo código funciona no OpenTofu.
Ao final deste laboratório, você terá provisionado, com Terraform puro, o ambiente base de engenheiro de segurança do Azure — um Key Vault hospedando uma chave de criptografia gerenciada pelo cliente, uma Storage Account criptografada com essa chave, um Network Security Group com logs de fluxo para o Log Analytics e o plano de Gerenciamento de Postura de Segurança na Nuvem (CSPM) do Microsoft Defender for Cloud habilitado no escopo da assinatura. Cinco blocos; a postura de referência AZ-500.
Solte os trechos em um único main.tf, execute terraform init e, em seguida, terraform apply passo a passo.
>= 1.5 ou OpenTofu >= 1.6.az login).Principalmente gratuito ou quase gratuito:
~$1/mês inativo. Os planos avançados do Defender for Cloud custam extra se você os habilitar.
Abertura padrão do 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
}Chaves gerenciadas pelo cliente (CMK) são a primitiva de Segurança de Dados do AZ-500: você fornece e rotaciona a chave de criptografia, e o armazenamento/SQL do Azure, etc., a usa para criptografia de envelope. Compare com as chaves gerenciadas pela Microsoft (MMK) — mais fácil, mas a Microsoft detém a chave.
Criamos um Key Vault com autorização RBAC e, em seguida, criamos uma chave RSA de 2048 bits dentro dele. A Storage Account na Etapa 3 fará referência a essa chave para criptografia em repouso. Os domínios Implementar proteção de plataforma e Gerenciar operações de segurança do AZ-500 ambos dependem desse padrão CMK como a resposta para a criptografia em repouso quando a questão menciona "a organização controla as chaves".
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"
}
}Contas de armazenamento que usam chaves gerenciadas pelo cliente precisam de uma identidade atribuída pelo usuário para ler a chave do Key Vault. Criamos essa identidade, concedemos a ela Key Vault Crypto Service Encryption User no Key Vault e, em seguida, a vinculamos à conta de armazenamento através do bloco customer_managed_key.
O modo key_versionless (usando customer_managed_key.key_vault_key_id = key_vault_key.cmk.versionless_id) é a resposta de melhor prática do AZ-500 para rotação automática de chaves: quando a chave é rotacionada, o armazenamento seleciona automaticamente a nova versão sem reconfiguração 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]
}Logs de fluxo do NSG são a primitiva de Gerenciamento de operações de segurança do AZ-500 para visibilidade do tráfego de rede — eles registram cada fluxo aceito ou negado por uma regra NSG (5-tupla + bytes + pacotes + resultado), persistidos em uma conta de armazenamento e consultáveis via Traffic Analytics no Log Analytics.
Provisionamos o NSG, um Network Watcher (o serviço gerenciado pelo Azure regional que possui o endpoint de log de fluxo) e um recurso de log de fluxo com o Traffic Analytics habilitado. Os logs de fluxo chegam a uma conta de armazenamento (separada do nosso armazenamento de dados) e são processados no 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
}
}O Defender for Cloud é o serviço CSPM (Gerenciamento de Postura de Segurança na Nuvem) e CWP (Proteção de Carga de Trabalho na Nuvem) do Azure. A camada CSPM Básico é gratuita e inclui a avaliação do Microsoft Cloud Security Benchmark — a adaptação do Azure dos controles CIS / NIST em verificações automatizadas. O domínio Gerenciar operações de segurança do AZ-500 testa essa linha de base como a primitiva de visibilidade de segurança do dia um.
Habilitamos o plano de preços básico no escopo da assinatura (gratuito) e uma auto_provisioning_setting que conecta o agente do Log Analytics em novas VMs automaticamente — o que significa que novas computações nesta assinatura obtêm observabilidade sem instalação manual. Os planos pagos do Defender (Defender for Servers, Defender for Storage, Defender for SQL, etc.) cada um habilita a detecção por tipo de recurso; nós os deixamos desabilitados aqui por custo, mas os mencionamos como a pergunta de acompanhamento.
Com esta peça final em vigor, a linha de base AZ-500 está formada: criptografia CMK em repouso, visibilidade de fluxo de rede, gerenciamento de postura. Cada padrão AZ-500 adicional (Sentinel, Acesso Condicional, Private Endpoints, Azure Firewall) se conecta 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 derruba tudo. Observações:
purge_soft_delete_on_destroy = true nos recursos do provedor faz com que o destroy realmente purgue.O AZ-500 abrange uma vasta superfície de segurança que este laboratório não pode incluir — Microsoft Sentinel (o SIEM completo, coberto no SC-200), políticas de Acesso Condicional do Microsoft Entra, Gerenciamento de Identidade Privilegiada (PIM), Proteção de Identidade, Azure Firewall + Política de Firewall + IDPS Premium, Azure Bastion, Proteção contra DDoS Standard, Web Application Firewall no Front Door / App Gateway, Grupos de Segurança de Aplicativo, Private Endpoints + Private Link Service, customer-lockbox, Azure Disk Encryption com KEK, iniciativas do Azure Policy para conformidade e os planos de Proteção de Carga de Trabalho do Defender for Cloud (Defender for Servers / Storage / SQL / Containers / Kubernetes).
Nós nos limitamos à tríade CMK + logs de fluxo de rede + CSPM porque eles são o substrato sobre o qual cada padrão AZ-500 mais avançado se compõe. O Sentinel lê de workspaces do Log Analytics como o nosso. O Acesso Condicional protege as identidades que acessam o armazenamento criptografado por CMK. Os Private Endpoints substituem o acesso à rede pública na conta de armazenamento.
Para as superfícies acima, consulte as seções Navegar, Guia e Editorial desta página de certificação.