阿里云 DevOps 资源安全扫描实践

随着企业上云进程的加速,云资源的使用量日益增长,云环境中资源的安全性和稳定性成为了企业业务运营的关键要素

面对多样化的云资源和复杂的应用场景,传统的安全管理手段已无法完全满足企业日益严苛的安全需求。为了确保云上资源的安全性,并在快速发展的业务环境中保持稳定性,企业需要采用更智能、自动化的解决方案

对于阿里云,我们实践了对云资源两种不同的扫描方式

脚本语言 + Github Actions

对于一些定制化的需求,最直观的方式当然是直接通过脚本的方式实现

从获取账号下的资源,到合规性到检查,到吐日志信息到控制台或者其他存储介质,最后代码提交到仓库的时候通过 Github Actions 触发脚本运行

整体流程看起来会是这样:

自定义规则校验

让我们从一个最简单的例子开始:Virtual private clouds (VPCs) must be configured and associated to the service

def validator():describe_dbinstance_attribute_request = rds_20140815_models.DescribeDBInstanceAttributeRequest(dbinstance_id='YOUR_INSTANCE_ID')runtime = util_models.RuntimeOptions()response = client.describe_dbinstance_attribute_with_options(describe_dbinstance_attribute_request, runtime)json = response.to_map().get("body")vpc_id = json.get("VpcId")return vpc_id != None
 

校验逻辑实际上非常简单,通过判断 rds 实例信息中有没有 vpc,sdk 文档可以到 openapi 中查看,获取账号下资源和吐日志的部份在这里就不过多展开了,相信还是比较简单的,也会有很多现成的方案

Github Actions 配置

不知道大家平时会不会用到 Actions 来做一些依赖版本更新的检查或者单测等工作,简单介绍一下,主要是通过 workflow 的方式定义工作流,Github 会扫描项目根目录下 .github/workflows 中的 yaml 文件,并行处理其中定义的 jobs

这对于社区开源项目当然没有什么问题,但是对于企业级私有项目并不能直接将脚本运行在公共的 runner 中,所以我们需要为仓库绑定一个 self-hosted 的 runner 来运行我们的脚本

name: "Ali"on:push:branches: [master]schedule:- cron: '0 23 * * *'jobs:Scan:runs-on: ["self-hosted"]steps:- uses: actions/checkout@v1- name: "Setup Python Environment"shell: bashrun: pip install -r ./requirements.txt- name: "Trigger Script"run: python3  ./main.py
 

Github Actions 提供了非常强大的自定义工作流的功能,可以看到在这个配置文件中我们不只是 push 到 master 分支,还存在一个定时触发的配置,深入学习可以看看这里!(https://github.com/features/actions)

那么到此为止我们走完了一个从验证到触发简单的流程

显而易见的这种方式提供了足够的灵活度(毕竟啥都是手搓的)但是另一方面这实在是稍显简陋,对于仅限于阿里云的资源扫描还有什么其他的方式吗?

阿里云函数计算 + 配置审计

阿里云已经考虑到了一些客户对资源审计的需求,所以有一个现成的 配置审计 控制台,支持通过账号组的方式跨账号扫描资源并汇总到概览页面,这似乎很美好,那让我们深入看看

厂商提供了三种方式定义规则:基于模版创建 / 基于条件自定义 / 基于函数计算自定义

当然一部分需求可以被现成的模版覆盖到,但是大部分并不能被很好的处理,条件自定义也只是提供了一部分字段给用户定义判断逻辑(聊胜于无

那么对于自定义程度比较高的规则我们唯一的选择只有 函数计算

结合了模版和函数计算的流程看起来会是 这样:

 

对于函数计算我们可以把他简单的理解为每个函数有一台机器,然后根据使用方的不同调用不同的方法,他也并不是只为配置审计这一个功能使用

我们同样以判断 vpc 是否存在为例子:

def evaluate_configuration_item(rule_parameters, configuration_item):compliance_type = COMPLIANCE_TYPE_NON_COMPLIANTannotation = Nonefull_configuration = configuration_item["configuration"]if not full_configuration:annotation = "Configuration is empty."return compliance_type, annotationconfiguration = json.loads(full_configuration)if not configuration:annotation = "Configuration:{} is invalid.".format(full_configuration)return compliance_type, annotationvpc_id = configuration.get("VpcId")if vpc_id != None:compliance_type = COMPLIANCE_TYPE_COMPLIANTreturn compliance_type, annotation
 

这是处理判断的主要逻辑,当然还有涉及到和审计配置交互的逻辑在文档中也会有现成的部份 → 基于函数计算创建自定义规则

相信仔细看实现逻辑的话能在里面找到获取资源信息和向配置审计中回调结果的部份

但是如果所有信息都能直接从实例信息中获取到的话理论上我们也可以通过条件自定义的方式实现,对于 openapi 中提供的能力是一点没有,在环境中也没有提供现成的 sdk 那要怎么做呢?

只能是通过 自研签名 从最基本的 http 请求开始了,很庆幸文档最后有基于各种语言的实现

到此为止我们也走通了以 阿里云配置审计 + 函数计算的实现方式

那么这就是完美的方案了嘛?

Py Script vs Ali cc + fc

通过两种方式我们会发现,在自定义程度较高的场景下,我们不得不需要依靠一定的编程的能力来解决问题,python 也只是一个例子,无论是 runner 还是函数计算,都支持多种语言,两种方式的差异主要是体现在触发方式上

众所周知,软件开发没有银弹,每种方式都有适合的场景

接下来会从几个方面对比一下这两种解决方案

综上所述,对于仅限于阿里云的场景,如果对于成本的把控没有那么苛刻的话,云厂商提供的 配置审计 + 函数计算 无疑是更优雅的实现方式,和平台的集成度也更高,但是由于提供的环境不能灵活的自定义,所以一些特殊需求可能实现起来会比较复杂

反之如果有多云的需求,或者对整体执行的流程需要有复杂的定制,编程语言提供的能力会更加强大,也不失为一种选择

最后

无论选择哪种方法,实施资源安全扫描都是保护云环境的必要步骤

应根据自身的特定需求、资源状况和技术能力来制定相应的安全策略,在快速变化的云环境中,持续优化和调整安全方案将是确保企业持续稳定运营的关键

 

 

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

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

相关文章

Flutter将应用打包发布到App Store

使用Flutter将应用打包发布到App Store的详细步骤及流程图: 流程图 #mermaid-svg-X09iOP2FtRxwKsWw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-X09iOP2FtRxwKsWw .error-icon{fill:#552222;}#mermai…

python之sklearn--鸢尾花数据集之数据降维(PCA主成分分析)

python之sklearn–鸢尾花数据集之数据降维(PCA主成分分析) sklearn库:Scikit - learn(sklearn)是一个用于机器学习的开源 Python 库。它建立在 NumPy、SciPy 和 matplotlib 等其他科学计算库之上,为机器学习的常见任务提供了简单…

sourceInsight常用设置和功能汇总(不断更新)(RGB、高亮、全路径、鼠标、宏、TODO高亮)

文章目录 必开配置设置背景颜色护眼的RGB值?sourceInsight4.0中如何设置选中某个单词以后自动高亮的功能?sourceinsight中输入设置显示全路径? 常用sourceInsight4.0中文乱码怎么解决,注意事项是什么?如何绑定鼠标中键…

oracle ogg学习和ogg常见变更操作

oracle ogg学习和ogg常见变更操作 OGG(Oracle GoldenGate) OGG 是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化(数据量只有日志的四分之一左右) OGG 能够实现大量交…

深入解析UML对象图:概念、要素及使用场景

目录 什么是UML对象图UML对象图的构成要素 1. 对象2. 链接3. 属性值 UML对象图的绘制方法对象图的实际应用场景对象图与类图的对比UML对象图的最佳实践总结 什么是UML对象图 UML对象图(Object Diagram)是一种UML结构图,用于描述系统中对象的…

游戏引擎学习第19天

介绍 这段内容描述了开发者在进行游戏开发时,对于音频同步和平台层的理解和调整的过程。以下是更详细的复述: 开发者表达了他希望今天继续进行的工作内容。他提到,昨天他讲解了一些关于音频的内容,今天他想稍微深入讲解一下他正…

Flink错误:一historyserver无法启动,二存在的文件会报错没有那个文件或目录

一.historyserver无法启动 historyserver执行了启动命令后却没有启动,而且也没有报错,如果日志无法启动的话网页8082是无法访问的 只能去查看日志 去flink的log文件查看日志: 发现应该是缺包了,导入jar包后可以解决 &#xff1a…

归一化/标准化对神经网络的训练是否有影响?

一、背景 归一化(Normalization)和标准化(Standardization)是数据预处理中的两种常见技术,旨在调整数据的范围和分布,以提高机器学习模型或者深度学习模型的性能和训练速度。虽然它们的目标相似&#xff0c…

Redis、TongRDS 可视化工具使用之 Redis Insight

题外话:除了可以连接 redis,也可以用来连接 TongRDS 1)官网下载 Redis Insight 2)安装 3)连接 4)使用 这里只是给一个使用例子

3D Gaussian Splatting在鱼眼相机中的应用与投影变换

paper:Fisheye-GS 1.概述 3D 高斯泼溅 (3DGS) 因其高保真度和实时渲染而备受关注。然而,由于独特的 3D 到 2D 投影计算,将 3DGS 适配到不同的相机型号(尤其是鱼眼镜头)带来了挑战。此外,基于图块的泼溅效率低下,尤其是对于鱼眼镜头的极端曲率和宽视野,这对于其更广泛…

C# 委托与事件

C# 委托 在C#中,委托(Delegate)是一种引用类型,用于封装方法的引用。它允许你将方法作为参数传递,或者将方法赋值给变量,从而实现方法的传递和调用。委托在C#中扮演着非常重要的角色,尤其是在事…

Node.js 安装与环境配置详解:从入门到实战

**标题:Node.js 安装与环境配置详解:从入门到实战** --- ### 一、Node.js 简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,允许开发者在服务器端运行 JavaScript 代码。凭借其事件驱动、非阻塞 I/O 模型,Nod…

oracle查看锁阻塞-谁阻塞了谁

一 模拟锁阻塞 #阻塞1 一个会话正在往一个大表写入大量数据的时候,另一个会话加字段: #会话1 #会话2 会话2被阻塞了。 #阻塞2 模拟一个会话update一条记录,没提交。 另一个会话也update这一条记录: 会话2被阻塞了。 二 简单查…

django基于django的民族服饰数据分析系统的设计与实现

摘 要 随着网络科技的发展,利用大数据分析对民族服饰进行管理已势在必行;该平台将帮助企业更好地理解服饰市场的趋势,优化服装款式,提高服装的质量。 本文讲述了基于python语言开发,后台数据库选择MySQL进行数据的存储…

STM32单片机CAN总线汽车线路通断检测-分享

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着汽车电子技术的不断发展,车辆通信接口在汽车电子控…

iw添加wlan0导致crash问题分析

比如通过日下命令&#xff0c;创建一个wlan0接口 iw phy phy0 interface add wlan0 type managed 会产生如下panic内容 <1> [54245.466372] Unable to handle kernel NULL pointer dereference at virtual address 00000010 <1> [54245.474729] pgd c1794000 &…

k8s -20241119

用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护的一种机制通过部署容器方式实现&#xff0c;每个容器之…

Linux 查看磁盘空间使用情况

1. df命令 功能&#xff1a;显示文件系统的整体磁盘空间使用情况。工作原理&#xff1a;读取文件系统的超级块信息&#xff0c;显示文件系统的总容量、已用空间、可用空间以及挂载点。特点&#xff1a; 显示的是整个分区的空间使用情况&#xff0c;而不是单个文件或目录的空间…

详解Rust的数据类型和语法

文章目录 基本数据类型复杂数据类型字符串基本语法 Rust是一种强调安全性和性能的系统编程语言。它的设计目标之一是防止内存安全错误同时提供丰富的功能和灵活的语法。下面介绍一下Rust语言的基本数据类型和语法。 基本数据类型 1.整数类型 有符号整数: i8, i16, i32, i64, i…

golang对日期格式化

1.对日期格式化为 YYYY-mm-dd, 并且没有数据时&#xff0c;返回空 import ("encoding/json""time" )type DateTime time.Timetype SysRole struct {RoleId int64 gorm:"type:bigint(20);primary_key;auto_increment;角色ID;" json:&quo…