Última revisión: mayo de 2026
Crea los servicios de AWS del examen DP-300 con Terraform puro: bloque a bloque, cada uno vinculado a un dominio del examen. El mismo código funciona en OpenTofu.
Al final de este laboratorio, habrá aprovisionado, con Terraform puro, una Base de Datos SQL de Azure endurecida para producción — servidor con autenticación solo de Microsoft Entra, base de datos única en el nivel de pago más económico, auditoría canalizada a una cuenta de almacenamiento dedicada, Microsoft Defender para SQL con alertas de detección de amenazas, y Log Analytics recibiendo todos los diagnósticos del servidor. Esta es la línea de base de referencia de DP-300.
Pegue los fragmentos en un único main.tf, ejecute terraform init, luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.az login) — su identidad iniciada se convertirá en el administrador de Entra del Servidor SQL en el Paso 3.enabled = false en la política de alertas de seguridad y el recurso de protección contra amenazas no facturará.La pila completa cuesta aproximadamente $5–20/mes, dependiendo de si Defender está activado. Destruya rápidamente.
Apertura estándar de 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
}El dominio Implementar un entorno seguro de DP-300 prueba la separación entre los datos de la carga de trabajo y los datos de auditoría. Un patrón de producción común: una cuenta de almacenamiento dedicada solo para registros de auditoría, con una política de retención diferente (más larga) y controles de acceso más estrictos que el almacenamiento propio de la carga de trabajo.
Aprovisionamos la cuenta de auditoría aquí, establecemos una retención de blobs de 90 días (lo que coincide con el requisito de almacenamiento de auditoría de SQL para muchas industrias reguladas) y bloqueamos el acceso público. El Servidor SQL del Paso 3 escribirá su registro de auditoría aquí.
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
}La autenticación solo Entra (azuread_authentication_only = true) es la respuesta de mejores prácticas de producción de DP-300 — deshabilita completamente el inicio de sesión de administrador de autenticación SQL, forzando cada conexión a través de Entra ID. El examen prueba este patrón repetidamente.
El bloque de administrador de Entra nombra al principal actual de Terraform — lo que significa que después de terraform apply, puede conectarse a través de sqlcmd -G usando su identidad de az login, sin ninguna contraseña SQL. La base de datos subyacente es del nivel Básico más pequeño; cambie a Propósito General sin servidor para cargas de trabajo de producción con carga intermitente (pausa automática después de la inactividad).
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
}La auditoría a nivel de Servidor SQL captura cada comando DBCC, cambio de esquema, intento de inicio de sesión y concesión/revocación. Lo conectamos a la cuenta de almacenamiento del Paso 2 con una retención de 90 días. A la identidad administrada del Servidor SQL del Paso 3 se le otorga el rol Storage Blob Data Contributor en la cuenta de auditoría — el patrón de autenticación basado en identidad que DP-300 prefiere sobre el basado en clave de cuenta de almacenamiento.
La auditoría a nivel de servidor se aplica a todas las bases de datos bajo el servidor. El examen prueba la distinción entre auditoría a nivel de servidor (esta) y auditoría a nivel de base de datos (anulación por base de datos). El nivel de servidor es la respuesta correcta para las preguntas de todas las bases de datos deben ser auditadas.
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 para SQL es la respuesta de DP-300 para Monitorear y optimizar la detección de amenazas — escanea intentos de inyección SQL, ubicaciones de inicio de sesión anómalas, sondeos de fuerza bruta y escaladas de privilegios inusuales. El recurso de protección avanzada contra amenazas se habilita por servidor; la política de alertas de seguridad configura a quién se envía un correo electrónico cuando se detectan amenazas.
También conectamos un espacio de trabajo de Log Analytics y canalizamos los diagnósticos de la base de datos (SQL insights, métricas de Query Store, errores) a él. Con esta pieza final en su lugar, la línea de base SQL endurecida de DP-300 toma forma: autenticación solo Entra, auditoría de servidor, detección de amenazas, observabilidad con Log Analytics. Cada pregunta de Administrar y configurar de DP-300 recae en una de estas primitivas.
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 derriba todo. Notas:
terraform destroy detiene el cargo de ~$15/mes/servidor.DP-300 cubre más superficies de SQL en Azure que este laboratorio no puede abarcar — Azure SQL Managed Instance (forma de aprovisionamiento separada, facturación mensual), SQL Server en Azure VMs (IaaS), Azure Database for PostgreSQL Flexible Server, Azure Database for MySQL Flexible Server, MariaDB (en desuso), grupos elásticos, replicación geográfica / grupos de conmutación por error, cifrado transparente de bases de datos con claves administradas por el cliente, Always Encrypted (a nivel de columna), enmascaramiento dinámico de datos, seguridad a nivel de fila y toda la superficie de ajuste de rendimiento de Query Store.
Nos centramos en la única Base de Datos SQL de Azure endurecida porque es el escenario DP-300 más común y el sustrato que extienden todas las demás variantes (MI, replicación geográfica, grupos de conmutación por error). Una vez que pueda aprovisionar un servidor + BD con autenticación solo Entra + auditoría + Defender + Log Analytics de una sola vez, las variantes seguirán la misma forma con diferentes tipos de recursos.
Para una cobertura servicio por servicio, consulte las secciones Buscar, Manual y Editorial de esta página de certificación.