最后审核时间:2026年5月
使用原生 Terraform 构建 SC-100 考试中的 AWS 服务——每次构建一个代码块,并紧扣考试领域。相同的代码可在 OpenTofu 上运行。
在本实验结束时,您将使用纯 Terraform 预置 SC-100 零信任框架 — 通过 azuread 提供程序创建条件访问策略存根,将 Microsoft Defender for Cloud + Sentinel 载入单个 Log Analytics 工作区,分配一个 Azure 策略以在订阅范围内强制执行“存储帐户必须要求 HTTPS”,以及为架构的机密层创建一个 Key Vault。这是 SC-100《设计零信任策略和架构》领域的五个模块。
将这些代码片段放入一个 main.tf 文件中,然后逐步运行 terraform init 和 terraform apply。
>= 1.5 或 OpenTofu >= 1.6。az login)。azuread Terraform 提供程序。Entra P1 许可证是主要费用 — 如果没有现有租户许可证,每月 $6/用户是实际费用。基础 CSPM 和实验 Sentinel 数据基本上是免费的。
标准的 Azure 入门配置 + 用于条件访问的 azuread 提供程序。
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
azuread = { source = "hashicorp/azuread", version = "~> 3.0" }
}
}
provider "azurerm" {
features {
key_vault {
purge_soft_delete_on_destroy = true
}
}
}
provider "azuread" {}
data "azurerm_client_config" "current" {}
data "azurerm_subscription" "current" {}
locals {
tags = {
Project = "certlabpro-sc-100"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-sc-100-rg"
location = "eastus"
tags = local.tags
}条件访问是 SC-100 零信任身份原语:显式验证 — 每个访问请求在授予之前都会根据上下文(用户、设备、位置、应用程序、风险)进行评估。我们以仅报告模式创建一项策略,该策略规定“所有用户访问所有云应用程序时,都需要 MFA”。仅报告模式意味着策略会记录如果强制执行会发生什么 — 这是在将 CA 策略切换到启用之前的 SC-100 推荐路径。
真正的零信任架构会堆叠许多 CA 策略 — 基于风险、基于位置、基于设备合规性、会话控制。此存根是其形式;SC-100 的《设计特权访问安全策略》领域测试了分层策略的组合。
resource "azuread_conditional_access_policy" "require_mfa_report" {
display_name = "certlabpro-sc-100-require-mfa-report-only"
state = "enabledForReportingButNotEnforced"
conditions {
client_app_types = ["all"]
users {
included_users = ["All"]
}
applications {
included_applications = ["All"]
}
}
grant_controls {
operator = "OR"
built_in_controls = ["mfa"]
}
}SC-100《评估治理、风险和合规性 (GRC) 技术策略》测试了这两种服务的双重目的:Defender for Cloud 是态势层(持续合规性评估、安全建议);Sentinel 是检测层(KQL 搜寻、事件响应)。它们共同构成了 Microsoft 对于“如何为零信任环境架构安全可观察性?”的答案。
我们将两者都载入到单个 Log Analytics 工作区 — 这是 SC-100 旨在提高成本效益的参考架构(数据一次写入,两个服务从同一个存储读取)。
resource "azurerm_log_analytics_workspace" "main" {
name = "log-sc100"
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_security_center_subscription_pricing" "cspm" {
tier = "Free" # Foundational CSPM
resource_type = "CloudPosture"
}
resource "azurerm_sentinel_log_analytics_workspace_onboarding" "main" {
workspace_id = azurerm_log_analytics_workspace.main.id
}Azure Policy 是 SC-100《设计治理和合规性策略》的原语 — 它在给定范围内的所有资源上强制执行规则。我们以 effect = Deny 在订阅范围内分配内置策略 Secure transfer to storage accounts should be enabled,这会阻止创建任何允许 HTTP 的新存储帐户。考试测试了 DenyAssignment 与 Audit 的区别:Deny 阻止不良配置的发生;Audit 仅在事后标记它。
此策略强制执行的零信任原则是默认情况下加密传输中数据 — 这是 SC-100 考试中反复出现的主题之一。实际的零信任部署使用 策略计划(策略组)来一次性强制执行数十项控制;这是最小的可演示形式。
# Look up the built-in policy definition by name.
data "azurerm_policy_definition" "storage_https" {
display_name = "Secure transfer to storage accounts should be enabled"
}
resource "azurerm_subscription_policy_assignment" "storage_https" {
name = "certlabpro-sc-100-storage-https"
display_name = "Storage accounts must require HTTPS"
description = "Enforces secure transfer (HTTPS-only) on all storage accounts in the subscription."
policy_definition_id = data.azurerm_policy_definition.storage_https.id
subscription_id = data.azurerm_subscription.current.id
# The built-in policy defaults to Audit; force Deny for Zero Trust enforcement.
parameters = jsonencode({
effect = {
value = "Deny"
}
})
}零信任架构将机密集中在强化保管库中 — 仅限 RBAC,没有管理员密钥快捷方式,并启用软删除 + 清除保护。为了便于实验室清理,我们预置保管库时将清除保护禁用;在生产环境中,每个 SC-100 推荐的保管库都启用了 purge_protection_enabled = true,以满足“需要不可恢复删除”的标准合规性要求。
随着这五个模块到位(用于身份验证的条件访问、用于态势和检测的 Defender + Sentinel、用于防护的 Azure 策略、用于机密的 Key Vault),SC-100 零信任框架已成形。每个额外的 SC-100 架构模式(用于即时提升的特权身份管理、用于数据分类的 Microsoft Purview、用于统一威胁防护的 Defender XDR)都基于此基础层。
resource "azurerm_key_vault" "main" {
name = "kv-sc100-${substr(replace(uuid(), "-", ""), 0, 6)}"
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 for compliance
tags = local.tags
lifecycle {
ignore_changes = [name]
}
}
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
}terraform destroy 会销毁所有内容。注意事项:
https_traffic_only_enabled 设置(策略强制执行创建;它不会重新配置现有资源)。purge_soft_delete_on_destroy = true 实际上会执行清除操作。SC-100 涵盖了本实验无法容纳的巨大架构范围 — 特权身份管理 (PIM)、Microsoft Entra 身份保护、Microsoft Defender XDR 的完整集成界面、Microsoft Purview(数据治理 + 风险 + 合规管理器 + 内部风险 + 电子数据展示 + 信息保护 / DLP)、Microsoft 365 合规中心、Azure 策略计划(策略组,SC-100 生产解决方案)、Defender for Cloud 的 CSPM-Plus 付费层(资产图查询、无代理扫描、攻击路径分析)、用于多租户管理的 Azure Lighthouse,以及整个多云 Defender for Cloud 体验(AWS / GCP 连接器)。
我们坚持使用条件访问 + Defender + Sentinel + Azure 策略 + Key Vault 原语,因为它们是所有更高级的 SC-100 架构构建的基础。PIM 提升了条件访问所基于的 Entra 组成员身份。Defender XDR 丰富了 Defender for Cloud 警报。Purview 对存储在 Key Vault 保护的存储帐户中的数据进行分类。策略计划将您在此处定义的控制措施捆绑到合规性包中。
有关按服务划分的覆盖范围,请参阅此认证页面的浏览、手册和Editorial部分。