Zuletzt überprüft: Mai 2026
Erstellen Sie die AWS-Dienste der DP-300-Prüfung mit reinem Terraform — ein Block nach dem anderen, jeweils abgestimmt auf eine Prüfungsdomäne. Derselbe Code funktioniert auch mit OpenTofu.
Am Ende dieses Labs haben Sie mit einfachem Terraform eine für die Produktion gehärtete Azure SQL-Datenbank bereitgestellt – einen Server mit Microsoft Entra-Authentifizierung, eine einzelne Datenbank auf dem günstigsten kostenpflichtigen Tarif, Auditing, das an ein dediziertes Speicherkonto geleitet wird, Microsoft Defender for SQL mit Bedrohungsalarmen und Log Analytics, das alle Serverdiagnosen empfängt. Dies ist die DP-300-Referenzgrundlage.
Fügen Sie die Snippets in eine einzelne main.tf ein, führen Sie terraform init aus und anschließend terraform apply Schritt für Schritt.
>= 1.5 oder OpenTofu >= 1.6.az login) – Ihre angemeldete Identität wird in Schritt 3 zum Entra-Administrator des SQL Servers.enabled = false für die Sicherheitswarnungsrichtlinie setzen, und die Bedrohungsschutzressource wird nicht abgerechnet.Gesamter Stack ca. 5–20 $/Monat, je nachdem, ob Defender aktiviert ist. Zerstören Sie ihn umgehend.
Standard Azure-Eröffnung.
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
}Die Domäne Implementieren einer sicheren Umgebung von DP-300 testet die Trennung zwischen Workload-Daten und Audit-Daten. Ein gängiges Produktionsmuster: ein dediziertes Speicherkonto nur für Audit-Logs, mit einer anderen Aufbewahrungsrichtlinie (länger) und strengeren Zugriffssteuerungen als der Speicher der Workload selbst.
Hier stellen wir das Audit-Konto bereit, legen eine 90-tägige Blob-Aufbewahrung fest (entspricht den SQL-Audit-Speicheranforderungen vieler regulierter Branchen) und sperren den öffentlichen Zugriff. Der SQL Server in Schritt 3 wird seine Audit-Logs hierhin schreiben.
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-only-Authentifizierung (azuread_authentication_only = true) ist die bewährte DP-300-Praxisantwort für die Produktion – sie deaktiviert die SQL-Auth-Admin-Anmeldung vollständig und erzwingt jede Verbindung über Entra ID. Die Prüfung testet dieses Muster wiederholt.
Der Entra-Admin-Block benennt das aktuelle Terraform-Principal – das bedeutet, dass Sie nach terraform apply über sqlcmd -G mit Ihrer az login-Identität eine Verbindung herstellen können, ohne dass ein SQL-Passwort erforderlich ist. Die darunterliegende Datenbank ist der kleinste Basic-Tarif; wechseln Sie zu General Purpose Serverless für Produktions-Workloads mit intermittierender Last (automatische Pause nach Inaktivität).
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
}Das SQL Server-Auditing erfasst jeden DBCC-Befehl, Schemaänderung, Anmeldeversuch und Grant/Revoke. Wir verbinden es mit dem Speicherkonto aus Schritt 2 mit einer 90-tägigen Aufbewahrung. Der verwalteten Identität des SQL Servers aus Schritt 3 wird die Rolle Storage Blob Data Contributor für das Audit-Konto zugewiesen – das identitätsbasierte Authentifizierungsmuster, das DP-300 gegenüber schlüsselbasiertem Speicherkonto bevorzugt.
Das Server-Level-Auditing gilt für jede Datenbank unter dem Server. Die Prüfung testet den Unterschied zwischen Server-Level- (dies hier) und Datenbank-Level-Auditing (pro-DB-Überschreibung). Server-Level ist die richtige Antwort auf Fragen, die besagen: alle Datenbanken müssen auditiert werden.
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 for SQL ist die DP-300-Antwort im Bereich Überwachen und Optimieren für die Bedrohungserkennung – es scannt nach SQL-Injection-Versuchen, anomalen Anmeldeorten, Brute-Force-Angriffen und ungewöhnlichen Berechtigungseskalationen. Die Ressource für erweiterten Bedrohungsschutz aktiviert die Funktion pro Server; die Sicherheitswarnungsrichtlinie konfiguriert, wer per E-Mail benachrichtigt wird, wenn Bedrohungen erkannt werden.
Wir verbinden auch einen Log Analytics-Arbeitsbereich und leiten die Datenbankdiagnosen (SQL Insights, Query Store-Metriken, Fehler) dorthin. Mit diesem letzten Baustein ist die gehärtete SQL-Grundlage von DP-300 geformt: Entra-only-Authentifizierung, Server-Auditing, Bedrohungserkennung, Log Analytics-Observability. Jede DP-300-Frage zum Verwalten und Konfigurieren bezieht sich auf eines dieser Primitive.
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 reißt alles ab. Hinweise:
terraform destroy stoppt die Kosten von ca. 15 $/Monat/Server.DP-300 deckt mehr SQL-on-Azure-Oberflächen ab, als dieses Lab fassen kann – Azure SQL Managed Instance (separate Bereitstellungsform, monatliche Abrechnung), SQL Server auf Azure VMs (IaaS), Azure Database for PostgreSQL Flexible Server, Azure Database for MySQL Flexible Server, MariaDB (wird eingestellt), elastische Pools, Geo-Replikation / Failover-Gruppen, transparente Datenbankverschlüsselung mit kundenverwalteten Schlüsseln, Always Encrypted (spaltenbasiert), dynamische Datenmaskierung, Zeilen-Level-Sicherheit und die gesamte Oberfläche zur Leistungsoptimierung des Query Store.
Wir konzentrieren uns auf die einzelne gehärtete Azure SQL-Datenbank, da dies das häufigste DP-300-Szenario ist und das Substrat, das jede andere Variante (MI, Geo-Replikation, Failover-Gruppen) erweitert. Sobald Sie einen Server + eine DB mit Entra-only-Authentifizierung + Auditing + Defender + Log Analytics in einem Schritt bereitstellen können, folgen die Varianten derselben Form mit unterschiedlichen Ressourcentypen.
Für eine serviceübergreifende Abdeckung siehe die Abschnitte Durchsuchen, Handbuch und Editorial dieser Zertifizierungsseite.