安全部署 Azure Policy 分配

随着环境的扩展,对具有渐进式曝光控制的受控持续部署 (CD) 管道的需求也增多。 因此,建议 DevOps 团队遵循安全部署做法 (SDP) 框架。 Azure Policy 定义的安全部署和分配有助于限制策略资源意外行为的影响。

使用 Azure Policy 实现 SDP 的大致方法是按圈逐步推出策略分配,以在影响关键云基础结构之前在早期阶段检测影响环境的策略更改。

可以通过不同的方式组织部署圈。 在本操作指南教程中,圈划分为不同的 Azure 区域,圈 0 表示非关键、低流量位置,圈 5 表示最关键、最高的流量位置

安全部署具有拒绝或追加效果的 Azure Policy 分配的步骤

在了解如何将 SDP 框架应用于使用 denyappend 策略效果的 Azure Policy 分配时,请使用以下流程图作为参考。

注意

若要详细了解 Azure 策略效果,请参阅了解效果的工作原理

步骤一到步骤八的流程图,显示新的 Azure Policy 定义的安全部署做法部署。

流程图步骤编号:

  1. 选择策略定义后,在最高级别范围内分配策略,包括所有部署圈。 通过使用 "kind": "resource location" 属性,应用资源选择器以将适用范围缩小到最小的关键圈。 通过使用分配替代配置 audit 效果类型。 位置为 ChinaEast 和效果为 audit 的示例选择器:

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "ChinaEast" ] 
      }]
    }], 
    "overrides":[{ 
      "kind": "policyEffect", 
      "value": "Audit" 
    }] 
    
  2. 分配获得部署且完成初始合规性扫描后,验证合规性结果是否符合预期。

    还应配置运行合规性检查的自动测试。 合规性检查应包含以下逻辑:

    • 收集合规性结果
    • 如果合规性结果符合预期,则管道应继续
    • 如果合规性结果不符合预期,则管道应会失败,你应该开始调试

    例如,可以在特定持续集成/持续部署 (CI/CD) 管道中使用其他工具来配置合规性检查。

    在每个推出阶段,应用程序运行状况检查应确认服务的稳定性和策略的影响。 如果由于应用程序配置而导致结果不符合预期,请根据需要重构应用程序。

  3. 通过展开资源选择器属性值以包含下一个圈的 位置并验证预期符合性结果和应用程序健康状况来重复此操作。 具有添加的位置值的示例选择器:

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "ChinaEast", "ChinaNorth"] 
      }]
    }]
    
  4. 使用 audit 模式成功将策略分配给所有圈后,管道应触发将策略效果更改为 deny 的任务,并将资源选择器重置为与圈 0 关联的位置。 将一个区域和效果设置为拒绝的示例选择器:

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "ChinaEast" ] 
      }]
    }], 
    "overrides":[{ 
      "kind": "policyEffect", 
      "value": "Deny" 
    }] 
    
  5. 效果更改后,自动测试应检查强制执行是否按预期进行。

  6. 通过在资源选择器配置中包含更多圈来重复操作。

  7. 对所有生产圈重复此过程。

使用 modify 或 deployIfNotExists 效果安全部署 Azure Policy 分配的步骤

使用 modifydeployIfNotExists 效果的策略步骤与之前在使用强制模式和触发修正任务等附加操作中说明的步骤类似。 查看以下流程图,步骤 5-9 已修改:

显示 Azure Policy 安全部署做法工作流的步骤 5 到步骤 9 的流程图。

流程图步骤编号:

  1. 选择策略定义后,在最高级别范围内分配策略,包括所有部署圈。 通过使用 "kind": "resource location" 属性,应用资源选择器以将适用范围缩小到最小的关键圈。 将分配的强制模式配置为 DoNotEnforceChinaEast2 位置且 enforcementModeDoNotEnforce 的示例选择器:

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "ChinaEast2" ] 
      }]
    }], 
    "enforcementMode": "DoNotEnforce"
    
  2. 分配获得部署且完成初始合规性扫描后,验证合规性结果是否符合预期。

    还应配置运行合规性检查的自动测试。 合规性检查应包含以下逻辑:

    • 收集合规性结果
    • 如果合规性结果符合预期,则管道应继续
    • 如果合规性结果不符合预期,则管道应会失败,你应该开始调试

    可以在持续集成/持续部署 (CI/CD) 管道中使用其他工具来配置合规性检查。

    在每个推出阶段,应用程序运行状况检查应确认服务的稳定性和策略的影响。 如果由于应用程序配置而导致结果不符合预期,请根据需要重构应用程序。

    还可以触发修正任务以修正现有的不合规资源。 确保修正任务使资源符合预期。

  3. 通过展开资源选择器属性值以包括下一圈的位置并验证预期符合性结果和应用程序健康状况来重复此操作。 具有添加的位置值的示例选择器:

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "eastUS", "ChinaEast2"] 
      }]
    }]
    
  4. 使用 DoNotEnforce 模式成功将策略分配给所有圈后,管道应触发将策略 enforcementMode 更改为启用“默认”的任务,并将资源选择器重置为与圈 0 关联的位置。 将一个区域和效果设置为拒绝的示例选择器:

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "ChinaEast2" ] 
      }]
    }], 
    "enforcementMode": "Default",
    
  5. 效果更改后,自动测试应检查强制执行是否按预期进行。

  6. 通过在资源选择器配置中包含更多圈来重复操作。

  7. 对所有生产圈重复此过程。

后续步骤