Última revisão: maio de 2026
Construa os serviços da AWS do exame DP-300 com Terraform puro — um bloco de cada vez, cada um vinculado a um domínio do exame. O mesmo código funciona no OpenTofu.
Ao final deste laboratório, você terá provisionado, com Terraform simples, um Banco de Dados SQL do Azure endurecido para produção — servidor com autenticação apenas do Microsoft Entra, banco de dados único na camada paga mais barata, auditoria direcionada para uma conta de armazenamento dedicada, Microsoft Defender para SQL com alertas de detecção de ameaças e Log Analytics recebendo todos os diagnósticos do servidor. Esta é a linha de base de referência DP-300.
Solte os trechos em um único main.tf, execute terraform init, depois terraform apply passo a passo.
>= 1.5 ou OpenTofu >= 1.6.az login) — sua identidade conectada se tornará o administrador Entra do SQL Server na Etapa 3.enabled = false na política de alerta de segurança e o recurso de proteção contra ameaças não será cobrado.Custo total da pilha ~$5–20/mês dependendo se o Defender estiver ativado. Destrua prontamente.
Abertura padrão do 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
}O domínio Implementar um ambiente seguro do DP-300 testa a separação entre dados de carga de trabalho e dados de auditoria. Um padrão de produção comum: uma conta de armazenamento dedicada apenas para logs de auditoria, com uma política de retenção diferente (mais longa) e controles de acesso mais rigorosos do que o armazenamento da própria carga de trabalho.
Aqui, provisionamos a conta de auditoria, definimos a retenção de blobs em 90 dias (o que atende ao requisito de armazenamento de auditoria SQL para muitas indústrias regulamentadas) e bloqueamos o acesso público. O SQL Server na Etapa 3 escreverá seu log de auditoria aqui.
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
}A autenticação somente Entra (azuread_authentication_only = true) é a resposta de melhor prática de produção do DP-300 — ela desabilita completamente o login de administrador de autenticação SQL, forçando toda conexão através do Entra ID. O exame testa este padrão repetidamente.
O bloco de administração Entra nomeia o principal atual do Terraform — o que significa que, após terraform apply, você pode se conectar via sqlcmd -G usando sua identidade de az login, sem senha SQL em nenhum lugar. O banco de dados subjacente é da menor camada Básica; mude para General Purpose Serverless para cargas de trabalho de produção com carga intermitente (pausa automática após inatividade).
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
}A auditoria em nível de SQL Server captura cada comando DBCC, alteração de esquema, tentativa de login e concessão/revogação. Nós a conectamos à conta de armazenamento da Etapa 2 com retenção de 90 dias. A identidade gerenciada do SQL Server da Etapa 3 recebe a função Storage Blob Data Contributor na conta de auditoria — o padrão de autenticação baseado em identidade que o DP-300 prefere em relação ao baseado em chave de conta de armazenamento.
A auditoria em nível de servidor se aplica a cada banco de dados sob o servidor. O exame testa a distinção entre auditoria em nível de servidor (esta) e auditoria em nível de banco de dados (substituição por banco de dados). O nível de servidor é a resposta correta para perguntas sobre todos os bancos de dados devem ser auditados.
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]
}O Microsoft Defender para SQL é a resposta do DP-300 para Monitoramento e otimização na detecção de ameaças — ele verifica tentativas de injeção SQL, locais de login anômalos, sondagens de força bruta e escaladas de privilégio incomuns. O recurso de proteção avançada contra ameaças é a habilitação por servidor; a política de alerta de segurança configura quem recebe e-mails quando ameaças são detectadas.
Também conectamos um workspace do Log Analytics e enviamos os diagnósticos do banco de dados (insights SQL, métricas do Query Store, erros) para ele. Com esta peça final em vigor, a linha de base SQL endurecida do DP-300 é moldada: autenticação somente Entra, auditoria de servidor, detecção de ameaças, observabilidade do Log Analytics. Toda pergunta do DP-300 sobre Gerenciar e configurar aborda uma dessas 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 derruba tudo. Observações:
terraform destroy interrompe a cobrança de ~$15/mês/servidor.O DP-300 abrange mais superfícies de SQL no Azure que este laboratório não pode incluir — Azure SQL Managed Instance (forma de provisionamento separada, cobrança mensal), SQL Server em VMs do Azure (IaaS), Azure Database for PostgreSQL Flexible Server, Azure Database for MySQL Flexible Server, MariaDB (em desuso), pools elásticos, replicação geográfica / grupos de failover, criptografia transparente de banco de dados com chaves gerenciadas pelo cliente, Always Encrypted (nível de coluna), mascaramento dinâmico de dados, segurança em nível de linha e toda a superfície de ajuste de desempenho do Query Store.
Nós nos concentramos no único Banco de Dados SQL do Azure endurecido porque é o cenário DP-300 mais comum e o substrato que todas as outras variantes (MI, replicação geográfica, grupos de failover) estendem. Uma vez que você pode provisionar um servidor + DB com autenticação somente Entra + auditoria + Defender + Log Analytics de uma vez, as variantes seguem a mesma forma com diferentes tipos de recursos.
Para cobertura serviço a serviço, consulte as seções Navegar, Guia e Editorial desta página de certificação.