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