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

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

时间:2024-08-30 14:04:24浏览次数:9  
标签:Network 22 -- securityRules Microsoft Policy Azure 3389 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资源,查看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"
            ]
        }
    }
}

最终效果:

参考资料

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.json:悠兔机场Azure Policy definitions audit effect: https://learn.microsoft.com/en-us/azure/governance/policy/concepts/effect-audit

标签:Network,22,--,securityRules,Microsoft,Policy,Azure,3389,networkSecurityGroups
From: https://www.cnblogs.com/westworldss/p/18388656

相关文章

  • uniapp js 数独小游戏 写死的简单数独 数独 3.0
    <template> <viewclass="wrap">  数独:{{sdNum}}*{{sdNum}}  <viewclass="btn"style="padding:32rpx;background:pink"@click="startFun">点击开始计时</view>  <viewclass="btn&q......
  • 给Hexo博客安排上Github Action自动化部署
    我不是换hexo了吗,一直是使用SpckEditor写文章,每次写好文章都要push一次,非常麻烦,最近在群友那了解到有GithubAction自动化部署,可以写好文章自动部署到githubpages,而且github的编辑器也是非常好用的,写好提交就能自动发送,–怎么有点像SSR了–,于是我就开始了这一个半小时的折腾…......
  • pinpoint-php-aop 内部原理
    pinpoint-php-aop是一个支持pinpoint-phpagent的库自动注入PHP内置函数,比如redis,pdo,mysqli自动注入用户类,比如guzzlehttp,predis怎样处理内置函数内置函数解释:PHPcomesstandardwithmanyfunctionsandconstructs.Therearealsofunctionsthatrequir......
  • 尖山有多尖 长沙有多长
    各位“大虾”、各位朋友:大家都知道,在我们长沙有一条新一代计算系统产业链,这是全国45个国家级先进制造业集群唯一以“计算”命名的产业集群。产业链每年都会举办若干活动,为大家提供交流碰撞、相互提高的机会。今天,我们相聚一堂,举办的是“尖山论剑智算未来”沙龙活动。作为链长,照例......
  • 运维工程师的日常工作
    作为一名运维工程师,每天日常工作主要包括监控系统健康状况、处理紧急故障、进行系统优化、执行数据备份与恢复、以及参与IT项目和软硬件维护。监控系统健康状况是运维工程师的核心任务之一,涉及到使用各种监控工具来检测、记录系统和网络的性能指标。这不仅包括对CPU、内存、磁盘空......
  • 探索科技的边界:如何利用AI技术优化你的工作流程?
    在当今快速发展的技术世界中,人工智能(AI)已经从一个遥不可及的概念,变成了我们日常生活中不可或缺的一部分。无论是智能手机、社交媒体平台,还是家庭自动化系统,都离不开AI的驱动。然而,你是否想过,AI技术可以如何帮助你优化工作流程,提高生产力呢?首先,我们需要了解什么是人工智能。简单来说......
  • 爬虫案例2-爬取视频的三种方式之一:requests篇(1)
    (目录)前言本文写了一个爬取视频的案例,使用requests库爬取了好看视频的视频,并进行保存到本地。后续也会更新selenium篇和DrissionPage篇。当然,爬取图片肯定不止这三种方法,还有基于python的scrapy框架,基于node.js的express框架以及基于Java的webmagic框架等等。爬虫步骤确定网址......
  • “人手一个贾维斯”的愿望,正在被“视频通话”功能带进现实
    2011年的iPhone4s发布会上,Siri以智能语音助手的身份初次亮相,成为整场发布会上最大的亮点。当时许多人还未曾体验过Siri的服务,但从媒体报道中建立了一个朴实的愿望:就像《钢铁侠》中的贾维斯一样,每个人都将拥有自己的智能助手,可以实时沟通,帮助我们解决各种问题。即使Siri后来“跌落......
  • 红帽认证怎么选?这些先了解清楚!
    红帽认证是IT领域内公认的专业资格认证,主要针对使用红帽公司Linux产品的系统管理员和工程师。红帽认证分为不同等级,每个等级对应不同的技能和职业发展阶段。01、红帽认证的级别RHCSA:这是初级认证,主要针对Linux基础操作,包括命令行操作、文件系统管理、权限控制、软件包管理等。适合......
  • 神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
    本文将介绍,ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析-1。● ClkLog客户遇到的问题ClkLog的用户访问基础统计分析功能是基于神策SDK的全埋点来实现的。我们遇到有些客户是使用C++、C#等语言来开发的客户端,然而神策此类SDK(如C++,C#等)仅提供自定义事件埋点,并未......