נבדק לאחרונה: מאי 2026
בנו את שירותי AWS של בחינת DP-300 עם Terraform פשוט — בלוק אחד בכל פעם, כאשר כל אחד מהם מקושר בחזרה לתחום במבחן. אותו הקוד עובד גם ב-OpenTofu.
עד סוף מעבדה זו תצייד, באמצעות Terraform רגיל, מסד נתונים Azure SQL מוקשח לייצור – שרת עם אימות Microsoft Entra בלבד, מסד נתונים יחיד בשכבה בתשלום הזולה ביותר, ביקורת המנותבת לחשבון אחסון ייעודי, Microsoft Defender עבור SQL עם התראות זיהוי איומים, ו-Log Analytics המקבל את כל אבחוני השרת. זהו בסיס הייחוס של DP-300.
גרור את קטעי הקוד לקובץ main.tf יחיד, הפעל terraform init, ולאחר מכן terraform apply שלב אחר שלב.
>= 1.5 או OpenTofu >= 1.6.az login) – הזהות המחוברת שלך תהפוך למנהל Entra של SQL Server בשלב 3.enabled = false במדיניות התראות האבטחה ומשאב הגנת האיומים לא יחויב.הערימה כולה כ-5–20$ לחודש, תלוי אם 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 {}
}
resource "random_id" "suffix" {
byte_length = 3
}
data "azurerm_client_config" "current" {}
locals {
tags = {
Project = "certlabpro-dp-300"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-dp-300-rg"
location = "eastus"
tags = local.tags
}תחום הטמעת סביבה מאובטחת של DP-300 בודק את ההפרדה בין נתוני עומס עבודה לנתוני ביקורת. דפוס ייצור נפוץ: חשבון אחסון ייעודי רק ליומני ביקורת, עם מדיניות שמירה שונה (ארוכה יותר) ובקרות גישה מחמירות יותר מאשר האחסון של עומס העבודה עצמו.
אנו מספקים כאן את חשבון הביקורת, מגדירים שמירת בלובים למשך 90 יום (תואם את דרישת אחסון ביקורת SQL עבור תעשיות רבות הנתונות לרגולציה), ונועלים גישה ציבורית. ה-SQL Server בשלב 3 יכתוב את יומן הביקורת שלו לכאן.
resource "azurerm_storage_account" "audit" {
name = "dp300audit${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
blob_properties {
delete_retention_policy {
days = 90
}
}
tags = local.tags
}אימות Entra בלבד (azuread_authentication_only = true) הוא התשובה המומלצת ביותר בייצור ב-DP-300 – הוא משבית לחלוטין את כניסת מנהל SQL-auth, ומכריח כל חיבור לעבור דרך Entra ID. הבחינה בודקת דפוס זה שוב ושוב.
בלוק מנהל Entra נותן שם ל-principal הנוכחי של Terraform – כלומר, לאחר terraform apply, תוכל להתחבר באמצעות sqlcmd -G תוך שימוש בזהות ה-az login שלך, ללא סיסמת SQL בשום מקום. מסד הנתונים שמתחת הוא שכבת Basic הקטנה ביותר; עבור ל-General Purpose Serverless עבור עומסי עבודה בייצור עם עומס לסירוגין (השהיה אוטומטית לאחר חוסר פעילות).
resource "azurerm_mssql_server" "main" {
name = "sql-dp300-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
version = "12.0"
minimum_tls_version = "1.2"
public_network_access_enabled = true
# Entra-only mode: no SQL admin login created.
azuread_administrator {
login_username = "sqladmins"
object_id = data.azurerm_client_config.current.object_id
azuread_authentication_only = true
}
identity {
type = "SystemAssigned"
}
tags = local.tags
}
resource "azurerm_mssql_database" "main" {
name = "app"
server_id = azurerm_mssql_server.main.id
sku_name = "Basic"
max_size_gb = 2
tags = local.tags
}ביקורת ברמת SQL Server לוכדת כל פקודת DBCC, שינוי סכימה, ניסיון כניסה, והענקה/ביטול. אנו מחברים אותה לחשבון האחסון משלב 2 עם שמירה למשך 90 יום. הזהות המנוהלת של SQL Server משלב 3 מקבלת הרשאת Storage Blob Data Contributor על חשבון הביקורת – דפוס האימות מבוסס הזהויות ש-DP-300 מעדיף על פני אימות מבוסס מפתח חשבון אחסון.
ביקורת ברמת השרת חלה על כל מסד נתונים תחת השרת. הבחינה בודקת את ההבחנה בין ביקורת ברמת השרת (זו) וביקורת ברמת מסד הנתונים (ביטול לפי מסד נתונים). רמת השרת היא התשובה הנכונה לשאלות מסוג כל מסדי הנתונים חייבים לעבור ביקורת.
resource "azurerm_role_assignment" "sql_audit_writer" {
scope = azurerm_storage_account.audit.id
role_definition_name = "Storage Blob Data Contributor"
principal_id = azurerm_mssql_server.main.identity[0].principal_id
}
resource "azurerm_mssql_server_extended_auditing_policy" "main" {
server_id = azurerm_mssql_server.main.id
storage_endpoint = azurerm_storage_account.audit.primary_blob_endpoint
retention_in_days = 90
log_monitoring_enabled = true
depends_on = [azurerm_role_assignment.sql_audit_writer]
}Microsoft Defender עבור SQL הוא התשובה של DP-300 בגיזרת ניטור ואופטימיזציה לזיהוי איומים – הוא סורק אחר ניסיונות הזרקת SQL, מיקומי כניסה חריגים, ניסיונות כוח brute-force והרחבות הרשאות חריגות. משאב הגנת האיומים המתקדמת הוא הפעלה לכל שרת; מדיניות התראות האבטחה מגדירה מי יקבל דוא"ל כאשר איומים מתגלים.
אנו גם מחברים סביבת עבודה של Log Analytics ומנתבים אליה את אבחוני מסד הנתונים (תובנות SQL, מדדי Query Store, שגיאות). עם החלק האחרון הזה במקום, בסיס ה-SQL המוקשח של DP-300 מעוצב: אימות Entra בלבד, ביקורת שרת, זיהוי איומים, נראות Log Analytics. כל שאלה של DP-300 בגיזרת ניהול והגדרה נוגעת באחד מהיסודות הללו.
resource "azurerm_log_analytics_workspace" "main" {
name = "log-dp300"
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_mssql_server_security_alert_policy" "main" {
resource_group_name = azurerm_resource_group.main.name
server_name = azurerm_mssql_server.main.name
state = "Enabled"
email_account_admins = true
email_addresses = ["dba@example.com"] # replace
retention_days = 30
disabled_alerts = [] # all alert types enabled
}
resource "azurerm_monitor_diagnostic_setting" "sql_db" {
name = "diag"
target_resource_id = azurerm_mssql_database.main.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
enabled_log {
category = "SQLInsights"
}
enabled_log {
category = "AutomaticTuning"
}
enabled_log {
category = "Errors"
}
metric {
category = "AllMetrics"
enabled = true
}
}terraform destroy מפרק הכל. הערות:
terraform destroy מפסיקה את החיוב של כ-15$ לחודש/לשרת.DP-300 מכסה יותר משטחי SQL ב-Azure שמעבדה זו אינה יכולה להכיל – Azure SQL Managed Instance (צורת הקצאה נפרדת, חיוב חודשי), SQL Server במכונות וירטואליות של Azure (IaaS), Azure Database for PostgreSQL Flexible Server, Azure Database for MySQL Flexible Server, MariaDB (יוצא משימוש), מאגרים גמישים, שכפול גאוגרפי / קבוצות מעבר כשל, הצפנת מסד נתונים שקופה עם מפתחות מנוהלים על ידי הלקוח, Always Encrypted (ברמת עמודה), מיסוך נתונים דינמי, אבטחת רמת שורה, וכל משטח כוונון ביצועי Query Store.
אנו נצמדים למסד נתונים יחיד מוקשח של Azure SQL מכיוון שזהו התרחיש הנפוץ ביותר ב-DP-300 והמצע שכל וריאנט אחר (MI, שכפול גאוגרפי, קבוצות מעבר כשל) מרחיב. ברגע שתוכל לספק שרת + DB עם אימות Entra בלבד + ביקורת + Defender + Log Analytics בפעם אחת, הווריאנטים ימשיכו באותה צורה עם סוגי משאבים שונים.
לכיסוי שירות-אחר-שירות, עיין בסעיפים עיון, מדריך ו-Editorial בדף אישור זה.