你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
安全部署 Azure Policy 分配
随着环境的扩展,对具有渐进式曝光控制的受控持续部署 (CD) 管道的需求也增多。 因此,Microsoft 建议 DevOps 团队遵循安全部署做法 (SDP) 框架。 Azure Policy 定义的安全部署和分配有助于限制策略资源意外行为的影响。
使用 Azure Policy 实现 SDP 的大致方法是按圈逐步推出策略分配,以在影响关键云基础结构之前在早期阶段检测影响环境的策略更改。
可以通过不同的方式组织部署圈。 在本操作指南教程中,圈划分为不同的 Azure 区域,圈 0 表示非关键、低流量位置,圈 5 表示最关键、最高的流量位置。
安全部署具有拒绝或追加效果的 Azure Policy 分配的步骤
在了解如何将 SDP 框架应用于使用 deny
或 append
策略效果的 Azure Policy 分配时,请使用以下流程图作为参考。
注意
若要详细了解 Azure 策略效果,请参阅了解效果的工作原理。
流程图步骤编号:
选择策略定义后,在最高级别范围内分配策略,包括所有部署圈。 通过使用
"kind": "resource location"
属性,应用资源选择器以将适用范围缩小到最小的关键圈。 通过使用分配替代配置audit
效果类型。 位置为eastUS
和效果为audit
的示例选择器:"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS" ] }] }], "overrides":[{ "kind": "policyEffect", "value": "Audit" }]
分配获得部署且完成初始合规性扫描后,验证合规性结果是否符合预期。
还应配置运行合规性检查的自动测试。 合规性检查应包含以下逻辑:
- 收集合规性结果
- 如果合规性结果符合预期,则管道应继续
- 如果合规性结果不符合预期,则管道应会失败,你应该开始调试
例如,可以在特定持续集成/持续部署 (CI/CD) 管道中使用其他工具来配置合规性检查。
在每个推出阶段,应用程序运行状况检查应确认服务的稳定性和策略的影响。 如果由于应用程序配置而导致结果不符合预期,请根据需要重构应用程序。
通过展开资源选择器属性值以包含下一个圈的 位置并验证预期符合性结果和应用程序健康状况来重复此操作。 具有添加的位置值的示例选择器:
"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS", "westUS"] }] }]
使用
audit
模式成功将策略分配给所有圈后,管道应触发将策略效果更改为deny
的任务,并将资源选择器重置为与圈 0 关联的位置。 将一个区域和效果设置为拒绝的示例选择器:"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS" ] }] }], "overrides":[{ "kind": "policyEffect", "value": "Deny" }]
效果更改后,自动测试应检查强制执行是否按预期进行。
通过在资源选择器配置中包含更多圈来重复操作。
对所有生产圈重复此过程。
使用 modify 或 deployIfNotExists 效果安全部署 Azure Policy 分配的步骤
使用 modify
或 deployIfNotExists
效果的策略步骤与之前在使用强制模式和触发修正任务等附加操作中说明的步骤类似。
查看以下流程图,步骤 5-9 已修改:
流程图步骤编号:
选择策略定义后,在最高级别范围内分配策略,包括所有部署圈。 通过使用
"kind": "resource location"
属性,应用资源选择器以将适用范围缩小到最小的关键圈。 将分配的强制模式配置为 DoNotEnforce。eastUS
位置且 enforcementMode 为 DoNotEnforce 的示例选择器:"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS" ] }] }], "enforcementMode": "DoNotEnforce"
分配获得部署且完成初始合规性扫描后,验证合规性结果是否符合预期。
还应配置运行合规性检查的自动测试。 合规性检查应包含以下逻辑:
- 收集合规性结果
- 如果合规性结果符合预期,则管道应继续
- 如果合规性结果不符合预期,则管道应会失败,你应该开始调试
可以在持续集成/持续部署 (CI/CD) 管道中使用其他工具来配置合规性检查。
在每个推出阶段,应用程序运行状况检查应确认服务的稳定性和策略的影响。 如果由于应用程序配置而导致结果不符合预期,请根据需要重构应用程序。
还可以触发修正任务以修正现有的不合规资源。 确保修正任务使资源符合预期。
通过展开资源选择器属性值以包括下一圈的位置并验证预期符合性结果和应用程序健康状况来重复此操作。 具有添加的位置值的示例选择器:
"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS", "westUS"] }] }]
使用 DoNotEnforce 模式成功将策略分配给所有圈后,管道应触发将策略
enforcementMode
更改为启用“默认”的任务,并将资源选择器重置为与圈 0 关联的位置。 将一个区域和效果设置为拒绝的示例选择器:"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS" ] }] }], "enforcementMode": "Default",
效果更改后,自动测试应检查强制执行是否按预期进行。
通过在资源选择器配置中包含更多圈来重复操作。
对所有生产圈重复此过程。
在 Azure Policy 分配中安全地更新内置定义版本的步骤
在现有分配中,应用“overrides”以更新最小关键圈的定义版本。 我们将结合使用“overrides”来更改“overrides”条件中的 definitionVersion 和“selectors”,以缩小
"kind": "resource location"
属性的适用性。 在指定位置之外的任何资源将继续根据分配中definitionVersion
顶级属性中的版本进行评估。 示例替代将定义版本更新为2.0.*
,并仅将其应用于EastUs
中的资源。"overrides":[{ "kind": "definitionVersion", "value": "2.0.*", "selectors": [{ "kind": "resourceLocation", "in": [ "eastus"] }] }]
分配获得更新且完成初始合规性扫描后,验证合规性结果是否符合预期。
还应配置运行合规性检查的自动测试。 合规性检查应包含以下逻辑:
- 收集合规性结果
- 如果合规性结果符合预期,则管道应继续
- 如果合规性结果不符合预期,则管道应会失败,你应该开始调试
例如,可以在特定持续集成/持续部署 (CI/CD) 管道中使用其他工具来配置合规性检查。
在每个推出阶段,应用程序运行状况检查应确认服务的稳定性和策略的影响。 如果由于应用程序配置而导致结果不符合预期,请根据需要重构应用程序。
通过展开资源选择器属性值以包含下一个圈的 位置并验证预期符合性结果和应用程序健康状况来重复此操作。 具有添加的位置值的示例:
"overrides":[{ "kind": "definitionVersion", "value": "2.0", "selectors": [{ "kind": "resourceLocation", "in": [ "eastus", "westus"] }] }]
成功将 _selectors 中的所有必要位置包含在一起后,可以移除替代并更新分配中的 definitionVersion 属性:
"properties": {
"displayName": "Enforce resource naming rules",
"description": "Force resource names to begin with DeptA and end with -LC",
"definitionVersion": "2.0.*",
}
后续步骤
- 了解如何以编程方式创建策略。
- 将 Azure Policy 作为代码工作流进行查看。
- 学习 Microsoft 关于安全部署做法的指导。
- 请参阅使用 Azure Policy 修正不合规资源。