使用 Azure 防火墙 策略来定义规则层级结构

安全管理员需要管理防火墙,并确保本地和云部署的合规性。 一个关键组成部分是能够为应用团队提供灵活性,实现CI/CD流水线以自动化方式创建防火墙规则。

Azure 防火墙 策略允许您定义规则层级并强制合规:

  • 提供层级结构,将中央基础策略叠加在子应用团队策略之上。 继承自基础策略的规则集合优先于子策略中定义的相同规则类型中的规则集合。 Azure 防火墙 仍然会先处理网络规则集合,而不是应用规则集合,无论继承如何。 欲了解更多信息,请参见 Azure 防火墙管理器 规则处理。
  • 使用Azure自定义角色定义以防止无意中移除基础策略,并为订阅或资源组内的规则收集组提供选择性访问权限。

解决方案概述

本例的高层步骤如下:

  1. 在安全团队资源组中创建一个基础防火墙策略。
  2. 在基础策略中定义IT安全专用规则。 这增加了一套通用的允许或拒绝流量的规则。
  3. 创建继承基础策略的应用团队策略。
  4. 在策略中定义应用团队的具体规则。 你也可以迁移现有防火墙的规则。
  5. 创建 Microsoft Entra 自定义角色,提供对规则集合组的细粒度访问,并在防火墙策略范围内添加角色。 在以下示例中,销售团队成员可以编辑销售团队防火墙策略的规则收集组。 数据库和工程团队也是如此。
  6. 将策略关联到相应的防火墙。 Azure防火墙只能分配一个策略。 这需要每个应用团队拥有自己的防火墙。

团队与要求

创建防火墙策略

  • 一个基础防火墙策略。

为每个应用团队制定策略:

  • 销售防火墙策略。 销售防火墙策略继承了基础防火墙策略。
  • 数据库防火墙策略。 数据库防火墙策略继承了基础防火墙策略。
  • 工程防火墙策略。 工程防火墙策略也继承了基础防火墙策略。

政策层级

创建自定义角色以访问规则集合组

每个应用团队都定义了自定义角色。 该职位定义了运营和范围。 应用团队可以编辑各自应用的规则收集组。

请使用以下高层程序来定义自定义角色:

  1. 订阅吧。

    Select-AzSubscription -SubscriptionId xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx

  2. 运行以下命令。

    Get-AzProviderOperation "Microsoft.Support/*" | FT Operation, Description -AutoSize

  3. 使用 Get-AzRoleDefinition 命令将读取者角色输出为JSON格式。

    Get-AzRoleDefinition -Name "Reader" | ConvertTo-Json | Out-File C:\CustomRoles\ReaderSupportRole.json

  4. 在编辑器中打开 ReaderSupportRole.json 文件。

    这是JSON的输出。 有关不同属性的信息,请参阅 Azure 自定义角色。

   {
     "Name": "Reader",
     "Id": "acdd72a7-3385-48ef-bd42-f606fba81ae7",
     "IsCustom": false,
     "Description": "Lets you view everything, but not make any changes.",
     "Actions": [
      "*/read"
     ],
     "NotActions": [],
     "DataActions": [],
     "NotDataActions": [],
     "AssignableScopes": [
       "/"
     ]
   }
  1. 编辑JSON文件以添加

    */read", "Microsoft.Network/*/read", "Microsoft.Network/firewallPolicies/ruleCollectionGroups/write

    操作映射到 Actions 属性。 读取操作后一定要加上逗号。 此操作允许用户创建和更新规则集合组。

  2. 在 AssignableScopes中,添加您的订阅ID,格式如下。 

    /subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx

    你必须添加明确的订阅ID。 否则,你不能把该角色导入你的订阅。

  3. 删除 ID 属性行,并将 IsCustom 属性改为 true。

  4. 将 名称 和 描述 属性更改为 AZFM 规则集合组作者 , 该角色的用户可以编辑防火墙策略规则集合组

JSON 文件应类似于以下示例:

{

    "Name":  "AZFM Rule Collection Group Author",
    "IsCustom":  true,
    "Description":  "Users in this role can edit Firewall Policy rule collection groups",
    "Actions":  [
                    "*/read",
                    "Microsoft.Network/*/read",
                     "Microsoft.Network/firewallPolicies/ruleCollectionGroups/write"
                ],
    "NotActions":  [
                   ],
    "DataActions":  [
                    ],
    "NotDataActions":  [
                       ],
    "AssignableScopes":  [
                             "/subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx"]
}
  1. 要创建新的自定义角色,请使用 New-AzRoleDefinition 命令并指定JSON角色定义文件。

    New-AzRoleDefinition -InputFile "C:\CustomRoles\RuleCollectionGroupRole.json

列出自定义角色

要列出所有自定义角色,可以使用 Get-AzRoleDefinition 命令:

Get-AzRoleDefinition | ? {$_.IsCustom -eq $true} | FT Name, IsCustom

你也可以在 Azure 门户中看到自定义角色。 进入您的订阅,选择访问控制(IAM),角色。

SalesAppPolicy

SalesAppPolicy 读取权限

将用户添加到自定义角色

在门户中,你可以将用户添加到 AZFM 规则集合组作者角色,并提供防火墙策略的访问权限。

  1. 在门户中,选择应用团队防火墙策略(例如,SalesAppPolicy)。
  2. 选择“访问控制”。
  3. 选择 “添加角色分配”。
  4. 将用户/用户组(例如销售团队)添加到角色中。

对其他防火墙策略重复此操作。

总结

带有自定义角色的防火墙策略现在提供对防火墙策略规则收集组的选择性访问。

用户无权:

  • 删除 Azure 防火墙 或防火墙策略。
  • 更新防火墙策略层级、DNS设置或威胁情报。
  • 更新防火墙策略,使其不属于AZFM规则集合组作者组。

安全管理员可以使用基础策略来强制设置防护栏并屏蔽某些类型的流量(例如ICMP),以满足其企业的要求。

后续步骤