Azure 美国账号 微软云 Azure 账号合规扫描工具
别等审计组敲你工位,先给自己云账号来次‘体检’
上周五下午三点,小王正摸鱼刷招聘App,邮箱弹出一封主题为【紧急:贵司Azure订阅存在高危合规项】的邮件——发件人是集团内审部。他点开附件PDF,第一页赫然写着:“Subscription ID: xxx-xxx-xxx 存在37项未修复策略违规,含4项Critical级:未启用MFA的全局管理员、存储账户未加密、NSG规则允许0.0.0.0/0入站SSH……”
小王手一抖,咖啡洒在键盘上。他赶紧登录Azure Portal,发现Security Center里红标像过年挂灯笼——不是“建议启用”,而是“已检测到风险”。他翻了三页文档,才搞懂:这不是黑客入侵,是自己亲手配的环境,被微软的合规扫描工具默默打了37个叉。
这故事不稀罕。太多团队把Azure当“高级U盘”用:建个VM跑测试、开个Storage存日志、顺手给开发配个Owner权限……直到某天法务甩来GDPR检查表,或者客户问“你们通过ISO 27001了吗?”,才猛然发现:云不是法外之地,合规不是PPT里的饼,而是每天自动运行的代码。
Azure合规扫描,不是选修课,是开机自启服务
微软没给你装个叫“合规扫描器”的独立APP。它早把扫描能力拆成四块积木,嵌进云平台的毛细血管里:
① Azure Policy:你的云上‘交规摄像头’
Policy不杀进程、不删资源,只干一件事:拍照片、贴罚单、记台账。比如你设一条规则“所有新创建的Storage Account必须启用HTTPS-only”,Policy就会每5分钟扫一遍资源,发现违规就打上“Non-compliant”标签,并在Portal首页弹黄框提醒。它甚至能自动修正——比如配个“DeployIfNotExists”效果,发现没开加密的Blob Storage,直接帮你补上Encryption选项。
⚠️ 老司机血泪提示:Policy默认只管“新建资源”,旧资源得手动触发“Remediate”(补救)。很多团队踩坑在于——以为配完Policy就万事大吉,结果三年前建的100个VM全在‘不合规黑名单’里躺平。
② Microsoft Defender for Cloud(原Security Center):带AI的‘云安全片警’
如果说Policy是交通摄像头,Defender for Cloud就是巡逻警车+AI研判中心。它不仅看配置(比如“VM是否装了防病毒软件”),还看行为(“某IP连续17次尝试SSH爆破”),甚至能关联分析——发现你开了公网RDP端口+没配NSG限制+登录日志出现异常地理位置,立刻升级为“High Severity”告警。
它的“监管合规包”(Regulatory Compliance)更狠:内置GDPR、HIPAA、等保2.0等60+框架,自动映射成数百条检查项。你点开“ISO 27001”视图,看到的不是条款原文,而是“当前订阅得分82/100,扣分项:缺少密钥轮换策略(见Resource Group: prod-core)”。
③ Azure Blueprints:合规的‘施工蓝图’
Policy管个体,Blueprints管工程。想象你要上线金融级应用,需要:1个带WAF的App Gateway + 2个VNet(生产/灾备)+ 所有VM预装Sentinel Agent + 每个Storage启用Immutable Blob。Blueprints让你把这套组合拳打包成模板,每次部署新环境时,一键生成——且自带Policy绑定,确保“建出来就合规”,而非“建完再整改”。
💡 真实案例:某券商用Blueprints固化“等保三级基线”,新项目立项后,架构师拖拽3个组件(网络层/计算层/数据层),15分钟生成含23条Policy约束的环境,省去安全团队2天人工核验。
④ 第三方扫描器:专治‘Policy看不见的死角’
Policy管Azure原生服务,但管不了你装在VM里的Tomcat版本、SQL Server的弱密码、或者K8s集群里没签名的镜像。这时候得请外援:
- Azure 美国账号 Azure-native工具:Azure Advisor免费推荐优化项(如“建议启用备份”),但偏重性能成本,合规性较弱;
- 开源利器:OpenSCAP配合Azure CLI脚本,可扫描Linux VM的CIS基准;
- 商业方案:Tenable.io、Qualys Cloud Platform支持Azure API对接,连VM内部漏洞都一网打尽。
⚠️ 关键提醒:第三方工具需谨慎授权!曾有团队给扫描器配了“Contributor”权限,结果它误删了测试环境的Key Vault——因为Contributor能删资源,而它以为“清理临时密钥”是优化动作。
别光看报告,重点是‘怎么让红标变绿’
拿到37个红标怎么办?别急着改配置,先做三件事:
第一步:区分‘真问题’和‘假阳性’
Policy报“Public IP未关联NSG”,但你查发现这是个跳板机,故意暴露给运维团队。这时不该删Public IP,而该在Policy中加Exclusion(排除)——给这个资源打标签ComplianceExempt: true,并备注原因:“用于应急SSH,已签署书面审批单(编号SEC-2024-087)”。记住:合规不是消灭所有警告,而是证明每个例外都经过评审。
第二步:批量修复,拒绝手工点点点
面对200个未启用磁盘加密的VM,打开Portal一个个点“Enable Encryption”?你明天还在加班。正确姿势:
- 用Azure CLI导出违规列表:
az policy state list --filter "policyAssignmentName eq 'Encrypt-Disks' and complianceState eq 'NonCompliant'" --query "[*].{vmName:resourceId}" -o json - 写PowerShell脚本循环执行:
Set-AzVMDiskEncryptionExtension -ResourceGroupName $rg -VMName $vm -DiskEncryptionKeyVaultUrl $vaultUrl... - 把脚本塞进Azure Automation Runbook,设定每周日凌晨自动巡检修复。
自动化不是炫技,是防止人肉操作漏掉第199台VM。
第三步:把合规变成CI/CD流水线一环
最硬核的防护,是让不合规的代码根本上不了云。在Azure DevOps Pipeline里加一步:
- task: AzureCLI@2
inputs:
azureSubscription: 'prod-azure-subscription'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
# 扫描本次部署的ARM模板是否违反Policy
az policy assignment list --query "[?contains(displayName,'Production-Baseline')].id" -o tsv | \
xargs -I {} az policy state list --top 100 --filter "policyAssignmentId eq '{}' and complianceState eq 'NonCompliant'" --query "length(@)" -o tsv
if [ $(result) -gt 0 ]; then
echo "##vso[task.logissue type=error] 模板违反生产环境基线策略!"
exit 1
fi
这样,开发提交一个开了公网MySQL端口的模板,Pipeline直接红脸失败,连资源都不会创建。
最后送你一张‘不背锅’自查清单
打印贴工位,每月初花15分钟过一遍:
- ✅ 权限审计:Azure AD中“全局管理员”是否≤2人?所有Owner角色是否绑定MFA?
- ✅ 数据加密:所有Storage Account启用“Storage Service Encryption”+“Customer-Managed Keys”?
- ✅ 网络边界:每个VNet的NSG是否禁止0.0.0.0/0入站?Azure Firewall日志是否存入Log Analytics满90天?
- ✅ 密钥管理:Key Vault软删除和清除保护是否开启?密钥轮换策略是否设置为每年自动更新?
- ✅ 日志归档:Activity Log是否导出到专用Storage Account(且该Account仅允许特定IP访问)?
合规不是终点,而是起点。当你不再害怕审计邮件,而是主动把Policy报告链接发给客户说“这是我们实时合规看板”,那一刻,你才算真正接管了云——不是当租客,而是当房东。

