다음을 통해 공유

安全部署 Azure Policy 分配

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

使用 Azure Policy 实现 SDP 的高级方法是通过层逐步推出策略分配,以检测在影响关键云基础结构之前影响环境的早期策略更改。

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

安全部署具有拒绝或追加效果的 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. 对所有生产层重复此过程。

在 Azure Policy 分配中安全地更新内置定义版本的步骤

  1. 在现有分配中,应用 替代 以更新最低关键层的定义版本。 我们将结合使用“overrides”来更改“overrides”条件中的 definitionVersion 和“selectors”,以缩小 属性的适用性"kind": "resource location"。 在指定位置之外的任何资源将继续根据分配中 definitionVersion 顶级属性中的版本进行评估。 示例替代将定义版本更新为 2.0.*,并仅将其应用于 ChinaEast 中的资源。

    "overrides":[{
      "kind": "definitionVersion",
      "value": "2.0.*",
      "selectors": [{
        "kind": "resourceLocation",
        "in": [ "chinaeast"]
      }]
    }]
    
  2. 分配获得更新且完成初始合规性扫描后,验证合规性结果是否符合预期。

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

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

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

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

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

     "overrides":[{
      "kind": "definitionVersion",
      "value": "2.0",
      "selectors": [{
        "kind": "resourceLocation",
        "in": [ "chinaeast", "chinanorth"]
      }]
    }]
    
  4. 成功将 _selectors 中的所有必要位置包含在一起后,可以移除替代并更新分配中的 definitionVersion 属性:

"properties": {
        "displayName": "Enforce resource naming rules",
        "description": "Force resource names to begin with DeptA and end with -LC",
        "definitionVersion": "2.0.*",
}

后续步骤