首页 > 其他分享 >【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允许3389/22端口访问

【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允许3389/22端口访问

时间:2024-09-03 16:53:00浏览次数:12  
标签:Network 22 field -- securityRules Microsoft Policy Azure networkSecurityGroups

问题描述

对Azure上的虚拟机资源,需要进行安全管理。只有指定的IP地址才能够通过RDP/SSH远程到虚拟机上, 有如下几点考虑:

1) 使用Azure Policy服务,扫描订阅中全部的网络安全组(NSG: Network Security Group) 资源

2) 判断入站规则,判断是否是3389, 22端口

3) 判断源地址是否是被允许的IP

4) 对不满足条件的 NSG规则进行审计。提示不合规( Non-compliant )

【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允许3389/22端口访问_Network

 需要满足以上要求的规则,如何来编写呢?

 

问题解答

使用Azure Policy可以完成对Azure资源的集中管制,以满足合规需求。为满足以上需求:

第一步:检查NSG资源,查看Inbound , port, source 值对应的属性名

在NSG的Overview页面,点击右上角的“JSON View”链接,查看资源的JSON内容,其中securityRules的内容为:

{
    "name": "RDP",
    "id": "/subscriptions/x-x-x-x/resourceGroups/xxxx/providers/Microsoft.Network/networkSecurityGroups/xxxx-xxx/securityRules/RDP",
    "etag": "W/\"xxxxxxx\"",
    "type": "Microsoft.Network/networkSecurityGroups/securityRules",
    "properties": {
        "provisioningState": "Succeeded",
        "protocol": "TCP",
        "sourcePortRange": "*",
        "destinationPortRange": "3389",
        "sourceAddressPrefix": "167.220.0.0/16",
        "destinationAddressPrefix": "*",
        "access": "Allow",
        "priority": 300,
        "direction": "Inbound",
        "sourcePortRanges": [],
        "destinationPortRanges": [],
        "sourceAddressPrefixes": [],
        "destinationAddressPrefixes": []
    }
}

其中:

  1. 资源类型为 type = Microsoft.Network/networkSecurityGroups/securityRules
  2. inbound的属性名为 direction
  3. 3389端口的属性名为destinationPortRange
  4. 而IP地址属性名为sourceAddressPrefix

它们,就是组成Policy Rule的内容

 

第二步:编写 Policy Rule 

Policy的总体框架是:

{
  "mode": "All",
  "policyRule": {
    "if": {
       // 需要进行审计的条件
       //1: 资源的类型是 Microsoft.Network/networkSecurityGroups/securityRules 
       //2: 入站规则 Inbound
       //3: 端口是3389 或 22
       //4: 如果不在允许的IP地址列表里,则需要审计
    },
    "then": {
      "effect": "audit"
    }
  },
  "parameters": {
     //输入参数,本例中是允许的IP地址列表
  }
}

第一个条件:扫描资源的类型为网络安全组的安全规则 

"type": "Microsoft.Network/networkSecurityGroups/securityRules"

转换为Policy语句:

{
  "field": "type",
  "equals": "Microsoft.Network/networkSecurityGroups/securityRules"
}

第二个条件:判断规则的方向为入站方向 

"direction": "Inbound"

转换为Policy语句:

{
            "field": "Microsoft.Network/networkSecurityGroups/securityRules/direction",
            "equals": "Inbound"
     }

第三个条件:判断端口为3389 或 22

"destinationPortRange": "3389"  或 "destinationPortRange": "22"

转换为Policy语句:

{
          "anyOf": [
            {
              "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange",
              "equals": "22"
            },
            {
              "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange",
              "equals": "3389"
            }
          ]
        }

第四个条件:判断IP地址,是否不在允许的列表中

"sourceAddressPrefix": "167.220.0.0/16"

转换为Policy语句:

{
   "field": "Microsoft.Network/networkSecurityGroups/securityRules/sourceAddressPrefix",
    "notIn": "[parameters('allowedIPs')]"
 }

 

第三步:准备参数(允许的IP地址作为输入参数)

因为被允许的IP地址应该是多个,所以准备为一个Array对象, 参数名称为:allowedIPs。

结构如下:

"parameters": {
      "allowedIPs": {
        "type": "Array",
        "metadata": {
          "displayName": "Allowed IPs",
          "description": "The list of allowed IPs for resources."
        },
        "defaultValue": [
          "192.168.1.1","x.x.x.x"
        ]
      }
    }

完整的Policy示例:

{
    "mode": "All",
    "policyRule": {
        "if": {
            "allOf": [
                {
                    "field": "type",
                    "equals": "Microsoft.Network/networkSecurityGroups/securityRules"
                },
                {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules/direction",
                    "equals": "Inbound"
                },
                {
                    "anyOf": [
                        {
                            "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange",
                            "equals": "22"
                        },
                        {
                            "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange",
                            "equals": "3389"
                        }
                    ]
                },
                {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules/sourceAddressPrefix",
                    "notIn": "[parameters('allowedIPs')]"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    },
    "parameters": {
        "allowedIPs": {
            "type": "Array",
            "metadata": {
                "displayName": "Allowed IPs",
                "description": "The list of allowed IPs for resources."
            },
            "defaultValue": [
                "192.168.1.1","x.x.x.x"
            ]
        }
    }
}

最终效果:

【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允许3389/22端口访问_Azure_02

 

 

参考资料

Using arrays in conditions: https://learn.microsoft.com/en-us/azure/governance/policy/how-to/author-policies-for-arrays#using-arrays-in-conditionsdeny-nsg-inbound-allow-all: https://github.com/Azure/azure-policy/blob/master/samples/Network/deny-nsg-inbound-allow-all/azurepolicy.jsonAzure Policy definitions audit effect: https://learn.microsoft.com/en-us/azure/governance/policy/concepts/effect-audit

 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!



标签:Network,22,field,--,securityRules,Microsoft,Policy,Azure,networkSecurityGroups
From: https://blog.51cto.com/u_13773780/11909173

相关文章

  • 宣布与通知比赛获胜者的5种最佳方式(附实例)
    你刚刚结束了一个竞赛活动,或者想在开始之前确保一切都准备好了吗?无论是哪种情况,一个关键的部分都是宣布或通知你的获奖者(和落选者)。如果在这方面做错了,会导致大量时间、精力和资源的浪费——整个竞赛活动将以糟糕的结尾告终。而且,这还不包括那些可能本来会在日后购买你产品的......
  • 揭秘2024美团中秋礼盒
    揭秘2024美团中秋礼盒作者:哲思(zhe-si)时间:2024.9.3邮箱:[email protected]个人主页:https://zhesi.vipGitHub:zhe-si(哲思)(github.com)前言中秋节要到了,借着暑期美团实习,给兄弟们提前揭秘一下2024美团的中秋礼盒到底怎么样?揭秘礼盒吃午饭的时候忽然接到顺丰快递的电话,说美......
  • jsp安康学院公益平台6f3cv
    jsp安康学院公益平台6f3cv本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能用户,活动类型,活动报名,活动信息,取消报名,受惠者,捐款信息,用户捐款技术要求:   开发语言:JSP前端使用:HTML5,CSS,JSP......
  • [Azure Application Insights]Azure应用程序见解概述页面中workspace的link不见了?
    问题描述在AzureApplicationInsights的概述页面中,可以直接点击WorkspaceLink进入到Workspace资源页面。但是,在下面的示例图中,WorkspaceLink不见了?这是什么原因呢? 问题解答这是因为Workspace的资源组发生了改变。ApplicationInsights无法根据WorksapceResourceID......
  • 成功的电子邮件营销活动的10个要素
    收件箱比以往任何时候都更加杂乱。但即使有所有这些电子邮件新闻、账户更新、垃圾邮件——是的,甚至是来自朋友或同事的消息——事实是,我们仍然会检查它们。即使今天有这么多其他的数字渠道可供选择,电子邮件营销仍然是吸引客户和推动销售的最有效工具之一。实际上,电子邮件是最......
  • jsp毕业设计管理系统9efu4 文末可获取,系统界面在最后面。
    jsp毕业设计管理系统9efu4本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能学生,教师,课题类型,课题信息,课题选择,公告信息,成绩信息,回复信息,交流信息技术要求:   开发语言:JSP前端使用:HTML......
  • Java微服务架构设计:构建可扩展的服务
    Java微服务架构设计:构建可扩展的服务大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!微服务架构是一种将应用程序作为一套小服务开发的方法,每个服务运行在其独立的进程中,并通过轻量级的通信机制(通常是HTTPRESTfulAPI)进行交互。在Java中,构建微服务通......
  • 【Azure Logic App】在逻辑应用中开启或关闭一个工作流是否会对其它工作流产生影响呢?
    问题描述使用标准版的AzureLogicApp服务,可以创建多个工作流(workflow),如果在启用/禁用其它的工作流时,是否会对正在运行其它工作流造成影响呢? 问题解答在实际的测验中,我们得到的答案是:会造成影响!在Disabled/Enabled同一个LogicApp中的Workflow时,正在运行的Workflow会受到影响!一......
  • 连锁店收银系统源码-线下线上一体化收银系统
    近年来,越来越多的零售行业从业者意识到,线下+线上全渠道整合将成为国内消费市场的大趋势,其中,线下门店能够赋予品牌发展的价值依然不可小觑。在线下门店中,收银系统可以说是运营管理的关键工具,好的收银系统能够为品牌门店赋能。对于连锁品牌而言,在线下门店多业态发展的当下,怎样的系统......
  • Neural Magic发布GuideLLM:评估和优化大型语言模型(LLM)部署的强大工具
    大型语言模型(LLMs)的部署和优化已成为各种应用的关键。NeuralMagic推出了GuideLLM,以应对对高效、可扩展且具有成本效益的LLM部署日益增长的需求。这款强大的开源工具旨在评估和优化LLM的部署,以确保它们在满足现实中的推理需求的同时,具有高性能和最小的资源消耗。GuideLLM概述......