【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允许3389/22端口访问
问题描述
对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": []
- }
- }
其中:
- 资源类型为 type = Microsoft.Network/networkSecurityGroups/securityRules
- inbound的属性名为 direction
- 3389端口的属性名为destinationPortRange
- 而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地址列表
- }
- }
第一个条件:扫描资源的类型为网络安全组的安全规则
转换为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
【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允许3389/22端口访问的更多相关文章
- 使用Azure Policy(策略)强制实现资源Tag的坑
Azure的Tag(标记)可以帮助运维人员对云资源分类从而方便地进行计费和资源管理.然而在具体实践中工程师部署云资源的时候常常会忘记给资源做标记打Tag. 针对这个问题,Azure的官方文档建议是可以 ...
- Azure ARM (12) ARM模式下,在负载均衡器上设置多个公网IP地址
<Windows Azure Platform 系列文章目录> 最近在帮助一个客户设置WAF (Web Application Firewall),WAF厂商要求在负载均衡器上,设置多个公 ...
- Azure ARM (22) Azure Policy入门
<Windows Azure Platform 系列文章目录> 我们知道,在Azure服务层级中,分为以下几个层次: 1.企业合同 2.订阅 3.资源组 4.资源 我们使用的Azure资源 ...
- Azure KeyVault设置策略和自动化添加secrets键值对
一. 关于Azure Key Vault Azure 密钥保管库可帮助保护云应用程序和服务使用的加密密钥和机密. 借助 Key Vault,可使用密钥来加密密钥和机密(例如身份验证密钥.存储帐户密钥. ...
- Azure ARM (23) Azure Policy使用
<Windows Azure Platform 系列文章目录> 在之前的文档中,我们介绍了Azure Policy的使用场景. 本章我们介绍如何创建和使用Azure Policy. 模拟场 ...
- 获取证书以用于 Windows Azure 网站 (WAWS)
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 近年来,随着网络犯罪的上升,使用 SSL 保护网站逐渐成为一项备受追捧的功能,Windows A ...
- Azure DevOps(二)利用Azure DevOps Pipeline 构建基础设施资源
一,引言 上一篇文章记录了利用 Azure DevOps 跨云进行构建 Docker images,并且将构建好的 Docker Images 推送到 AWS 的 ECR 中.今天我们继续讲解 Azu ...
- Azure系列2.1 —— com.microsoft.azure.storage.blob
网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习心得做下笔记,文中不正确地方请大家指正. Azure Blob ...
- [AWS vs Azure] 云计算里AWS和Azure的探究(5) ——EC2和Azure VM磁盘性能分析
云计算里AWS和Azure的探究(5) ——EC2和Azure VM磁盘性能分析 在虚拟机创建完成之后,CPU和内存的配置等等基本上是一目了然的.如果不考虑显卡性能,一台机器最重要的性能瓶颈就是硬盘. ...
- 【Azure微服务 Service Fabric 】Service Fabric中应用开启外部访问端口及微服务之间通过反向代理端口访问问题
问题描述 1) 当成功的在Service Fabric集群中部署了应用后,如何来访问呢?如果是一个Web服务,它的URL又是什么呢? 2) 当Service Fabric集群中,服务之间如需要相互访问 ...
随机推荐
- Mysql 分表分库的策略
为什么要分表? 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了. 分表的目的就在于此,减小数据库的负担,缩短查询时间. 日常开发中我们经常会遇到大表的情况 ...
- MySQL 并发控制(锁得使用)
导读 并发问题:同一时刻进行读写,并发问题回引发数据不一致问题. 解决并发问题:MySQL采用了锁定机制去解决并发问题 锁的分类 MySQL使用两种锁机制去解决问题:共享锁和排他锁,也叫读锁或者写锁. ...
- 详解Web应用安全系列(10)文件上传漏洞
文件上传漏洞(File Upload Vulnerabilities)是Web攻击中常见的一种安全漏洞,它允许攻击者上传并执行恶意文件,从而可能对Web服务器造成严重的安全威胁. 一.定义与原理 文件 ...
- Java Executors类的9种创建线程池的方法及应用场景分析
在Java中,Executors 类提供了多种静态工厂方法来创建不同类型的线程池.在学习线程池的过程中,一定避不开Executors类,掌握这个类的使用.原理.使用场景,对于实际项目开发时,运用自如, ...
- 说说XXLJob分片任务实现原理?
XXL Job 是一个开源的分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展的分布式任务调度框架. 这两天咱们开发的 AI Cloud 项目中,也使用到了 XXL Job 来执行 ...
- Day 11 - 模拟考
WTP 的大洗牌 题目描述 \(\text{input1}\) 3 1 1 1 1 2 3 \(\text{output1}\) 10 0 数据范围 shuffle.zip 第一题 题目描述 输入格式 ...
- bloom效果
搜索 复制
- 2023/4/20 SCRUM个人博客
1.我昨天的任务 学习了PYQT5的部分控件,例如按钮,文本框,文本编辑框,并了解了一些基础布局以及部分对窗口的自定义实现 2.遇到了什么困难 无法理解信号和槽的概念 3.我今天的任务 学习信号和槽的 ...
- ceph 001 存储类型 传统存储与分布式存储 分布式文件系统 集群与分布式
ceph 存储类型 块存储:裸磁盘 未被格式化的磁盘 DAS(直连存储,usb,硬盘插到电脑):scsi接口 接口数量有限 传输距离有限 SAN(存储区域网络):ip-san 网络(iscsi) 以太 ...
- ClickHouse的向量处理能力
ClickHouse的向量处理能力 引言 在过去,非结构化数据(如文本.图片.音频.视频)通常被认为难以在数据库中直接使用,因为这些数据类型的多样性和复杂性.然而,随着技术的发展,嵌入技术可以将非结构 ...