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

news/2024/11/19 8:41:14/文章来源:https://www.cnblogs.com/lulight/p/18387553

问题描述

对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-conditions
deny-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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/789331.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态规划——数字三角形模型

数字三角形模型 母题 : 数字三角形思路 ​ 集合 f [i] [j] 表示所有从起点走到(i,j)的路径 ​ 属性 f [i] [j] 存的数是集合中所有路径和的最大值 ​ 状态计算:对于每一条从起点到 ( i , j ) 的路径,其要么是从左上方来的,要么是从右上方来的。 #include<bits/stdc++…

盘点一个Pycharm汉化过程中的一个坑

大家好,我是Python进阶者。 一、前言 前几天在Python最强白银交流群【生产队的驴都是不歇的】问了一个Python汉化的问题,问题如下:要把我弄疯了,汉化不成功,想重新安装,又不给出卸载选项,通过硬盘安装插件又提示异常。去插件文件夹删除所有插件文件,再重新安装pycharm,…

深度解析:OCR技术在企业HR管理中的应用

HR管理的挑战 企业的HR部门在处理员工入职、资料审核、信息录入存储管理等环节面临着大量重复性劳动力的问题。而HR部门通常人手有限,传统的人工录入方式不仅效率低下,而且容易出错。OCR技术的引入,极大地起到了降本增效地目的。应用的办公场景人脸比对技术 应用背景:在员工…

.NET 摄像头采集

本文主要介绍摄像头(相机)如何采集数据,用于类似摄像头本地显示软件,以及流媒体数据传输场景如传屏、视讯会议等。 摄像头采集有多种方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),网上一些文章以及github已经有很多介绍,这…

Python深度学习股价预测、量化交易策略:LSTM、GRU深度门控循环神经网络|附代码数据

全文链接:https://tecdat.cn/?p=37539 原文出处:拓端数据部落公众号 分析师:Shuo Zhang 本文以上证综指近 22 年的日交易数据为样本,构建深度门控循环神经网络模型,从股价预测和制定交易策略两方面入手,量化循环神经网络在股票预测以及交易策略中的效果,结合一个Pytho…

Windos NTP 服务设定

1、修改注册表2, 双击 打开 设为自动 应用 保存

【专题】中国游戏产业AIGC发展前景报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=37535 原文出处:拓端数据部落公众号 近八成头部游戏企业在人工智能、数字孪生、引擎开发、云技术和XR等技术领域布局;有近六成头部游戏企业已构建AI生产管线、赋能虚拟内容生产或智能营销;此外,国内TOP50游戏厂商投资AI企业已超百次。阅读原…

自动化测试:Monkey工具实践应用~

在移动应用的自动化测试中,意外的用户操作和各种不可预见的场景往往是导致应用崩溃的主要原因。如何有效地模拟这些复杂场景,成为了测试工程师的一大挑战。而在这一过程中,Monkey工具凭借其随机化测试的独特优势,成为了许多团队的利器。 那么,Monkey工具究竟是如何帮助测试…

TCP/IP、UDP/IP协议

参考链接 1、OSI七层模型 (1)OSI含义“OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。”(2)OSI定义了网络互连的七层模型(物理…

HTTP与UDP/TCP区别

1、HTTPHTTP是应用层协议,TCP是传输层协议! 虽然HTTP本身是一个协议,但其最终还是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议 HTTP协议是建立在请求/响应模型上的2、OSI七层模型3、TCP/IP五层模型

RSA加密

题目来源[BUUCTF]REVERSE——rsa 打开文件夹有两个文件打开 pub.key 文件复制到解密网站对应 RSA 密钥指数 E=65537,这一串模数可以转化为十进制后可以分离出 p、qp=285960468890451637935629440372639283459,q=304008741604601924494328155975272418463 所以已知 E、p、q,也就…