Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена AZ-500 с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы развернете с помощью чистого Terraform базовую конфигурацию Azure для инженера по безопасности: хранилище ключей (Key Vault), содержащее ключ шифрования, управляемый клиентом; учетную запись хранения (Storage Account), зашифрованную этим ключом; группу сетевой безопасности (Network Security Group) с журналами потоков, поступающими в Log Analytics; и план управления состоянием безопасности облака (Cloud Security Posture Management) Microsoft Defender для облака, включенный на уровне подписки. Пять блоков; эталонная конфигурация AZ-500.
Поместите фрагменты кода в один файл main.tf, запустите terraform init, затем terraform apply пошагово.
>= 1.5 или OpenTofu >= 1.6.az login).В основном бесплатно или почти бесплатно:
Примерно $1/месяц в режиме простоя. Расширенные планы Defender для облака стоят дополнительно, если вы их включите.
Стандартное начало работы с 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
}Ключи, управляемые клиентом (CMK), являются примитивом безопасности данных AZ-500: вы предоставляете и ротируете ключ шифрования, а хранилище Azure/SQL/и т.д. использует его для шифрования конвертов. Сравните с ключами, управляемыми Microsoft (MMK) — проще, но Microsoft владеет ключом.
Мы создаем Key Vault с авторизацией на основе RBAC, затем создаем внутри него 2048-битный ключ RSA. Учетная запись хранения в шаге 3 будет ссылаться на этот ключ для шифрования неактивных данных. Области Реализация защиты платформы и Управление операциями безопасности AZ-500 обе опираются на этот шаблон CMK как на ответ для шифрования неактивных данных, когда вопрос упоминает «организация контролирует ключи».
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"
}
}Учетным записям хранения, использующим ключи, управляемые клиентом, требуется удостоверение, назначаемое пользователем, для чтения ключа из Key Vault. Мы создаем это удостоверение, предоставляем ему роль Key Vault Crypto Service Encryption User в Key Vault, затем привязываем его к учетной записи хранения через блок customer_managed_key.
Режим key_versionless (использование customer_managed_key.key_vault_key_id = key_vault_key.cmk.versionless_id) — это ответ AZ-500 на передовую практику автоматической ротации ключей: когда ключ ротируется, хранилище автоматически подхватывает новую версию без ручной перенастройки.
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]
}Журналы потоков NSG являются примитивом управления операциями безопасности AZ-500 для обеспечения видимости сетевого трафика — они записывают каждый поток, принятый или отклоненный правилом NSG (5-кортеж + байты + пакеты + результат), сохраняются в учетной записи хранения и доступны для запросов через Traffic Analytics в Log Analytics.
Мы выделяем NSG, Network Watcher (региональная управляемая Azure служба, владеющая конечной точкой журналов потоков) и ресурс журналов потоков с включенным Traffic Analytics. Журналы потоков попадают в учетную запись хранения (отдельную от нашего хранилища данных) и обрабатываются в Log Analytics для 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 для облака — это служба Azure для управления состоянием безопасности облака (CSPM) и защиты облачных рабочих нагрузок (CWP). Уровень Foundational CSPM бесплатен и включает оценку Microsoft Cloud Security Benchmark — это адаптация Azure элементов управления CIS / NIST в автоматизированные проверки. Домен Управление операциями безопасности AZ-500 проверяет эту базовую конфигурацию как примитив обеспечения видимости безопасности «первого дня».
Мы включаем базовый тарифный план на уровне подписки (бесплатно) и параметр auto_provisioning_setting, который автоматически подключает агент Log Analytics к новым виртуальным машинам, что означает, что новые вычислительные ресурсы в этой подписке получают наблюдаемость без ручной установки. Платные планы Defender (Defender for Servers, Defender for Storage, Defender for SQL и т. д.) каждый включает обнаружение по типу ресурса; мы отключаем их здесь для экономии, но упоминаем как последующий вопрос.
С этим последним компонентом базовая конфигурация AZ-500 сформирована: шифрование CMK неактивных данных, видимость сетевого потока, управление состоянием. Каждый дополнительный шаблон AZ-500 (Sentinel, Conditional Access, Private Endpoints, Azure Firewall) прикрепляется к этой основе.
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 удаляет все. Примечания:
purge_soft_delete_on_destroy = true в функциях провайдера обеспечивает фактическую очистку при уничтожении.AZ-500 охватывает широкую область безопасности, которую эта лабораторная работа не может полностью вместить — Microsoft Sentinel (полная SIEM, рассматриваемая в SC-200), политики условного доступа Microsoft Entra, управление привилегированными удостоверениями (PIM), защита удостоверений, Azure Firewall + Политика брандмауэра + Premium IDPS, Azure Bastion, Standard DDoS Protection, брандмауэр веб-приложений (WAF) на Front Door / App Gateway, группы безопасности приложений, частные конечные точки + Private Link Service, клиентский сейф (customer-lockbox), шифрование дисков Azure с помощью KEK, инициативы Azure Policy для соответствия требованиям и планы защиты рабочих нагрузок Defender для облака (Defender for Servers / Storage / SQL / Containers / Kubernetes).
Мы придерживаемся триады CMK + журналы потоков сети + CSPM, потому что они являются основой, на которой строятся все более продвинутые шаблоны AZ-500. Sentinel читает данные из рабочих областей Log Analytics, подобных нашей. Условный доступ защищает удостоверения, обращающиеся к хранилищу, зашифрованному CMK. Частные конечные точки заменяют доступ к общедоступной сети для учетной записи хранения.
Для вышеупомянутых тем см. разделы Просмотр, Справочник и Editorial этой страницы сертификации.