נבדק לאחרונה: מאי 2026
בנו את שירותי AWS של בחינת AZ-500 עם Terraform פשוט — בלוק אחד בכל פעם, כאשר כל אחד מהם מקושר בחזרה לתחום במבחן. אותו הקוד עובד גם ב-OpenTofu.
בסיום מעבדה זו תצרו, באמצעות Terraform פשוט, את בסיס האבטחה המינימלי למהנדס אבטחה ב-Azure — Key Vault המארח מפתח הצפנה בניהול לקוח, חשבון אחסון מוצפן עם מפתח זה, קבוצת אבטחת רשת (NSG) עם יומני זרימה ל-Log Analytics, ותוכנית Cloud Security Posture Management (CSPM) של Microsoft Defender for Cloud מופעלת בהיקף המנוי. חמישה בלוקים; תצורת הייחוס של AZ-500.
שחררו את קטעי הקוד לקובץ main.tf יחיד, הפעילו terraform init, ואז terraform apply צעד אחר צעד.
>= 1.5 או OpenTofu >= 1.6.az login).בעיקר חינם או כמעט חינם:
כ-1 דולר לחודש במצב סרק. תוכניות מתקדמות של Defender for Cloud כרוכות בעלות נוספת אם תפעילו אותן.
פתיחה סטנדרטית של 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/וכו' משתמשים בו להצפנת מעטפות. השוו למפתחות בניהול מיקרוסופט (MMK) — קל יותר אך מיקרוסופט מחזיקה במפתח.
אנו יוצרים Key Vault עם הרשאת RBAC, ואז יוצרים מפתח RSA בגודל 2048 ביט בתוכו. חשבון האחסון בשלב 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-tuple + בתים + חבילות + תוצאה), נשמרים בחשבון אחסון וניתנים לשאילתה באמצעות 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 for Cloud הוא שירות ה-CSPM (Cloud Security Posture Management) וה-CWP (Cloud Workload Protection) של Azure. שכבת 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 + Firewall Policy + Premium IDPS, Azure Bastion, DDoS Protection Standard, Web Application Firewall ב-Front Door / App Gateway, קבוצות אבטחה של יישומים, נקודות קצה פרטיות + Private Link Service, customer-lockbox, הצפנת דיסקים של Azure עם KEK, יוזמות מדיניות של Azure לציות, ותוכניות הגנת עומסי עבודה של Defender for Cloud (Defender for Servers / Storage / SQL / Containers / Kubernetes).
אנו נצמדים לשילוש של CMK + יומני זרימת רשת + CSPM מכיוון שהם המצע שכל תבנית AZ-500 מתקדמת יותר נבנית עליו. Sentinel קורא מסביבות עבודה של Log Analytics כמו שלנו. גישה מותנית מגנה על זהויות הניגשות לאחסון המוצפן ב-CMK. נקודות קצה פרטיות מחליפות גישת רשת ציבורית בחשבון האחסון.
עבור התחומים הנ"ל, עיינו בקטעי עיון, מדריך ו-Editorial בדף אישור זה.