阿里云 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,一经查实,立即删除!

相关文章

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 能够实现大量交…

游戏引擎学习第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)使用 这里只是给一个使用例子

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

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

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

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

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

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

golang对日期格式化

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

MySQL系列之数据授权(privilege)

导览 前言Q:如何对MySQL数据库进行授权管理一、MySQL的“特权”1. 权限级别2. 权限清单 二、授权操作1. 查看权限2. 分配权限3. 回收权限 结语精彩回放 前言 看过博主上一篇的盆友,可以Get到一个知识点:数据授权(eg:g…

项目进度计划表:详细的甘特图的制作步骤

甘特图(Gantt chart),又称为横道图、条状图(Bar chart),是一种用于管理时间和任务活动的工具。 甘特图由亨利劳伦斯甘特(Henry Laurence Gantt)发明,是一种通过条状图来…

【Redis】Redis实现的消息队列

一、用list实现【这是数据类型所以支持持久化】 消息基于redis存储不会因为受jvm内存上限的限制,支持消息的有序性,基于redis的持久化机制,只支持单一消费者订阅,无法避免消息丢失。 二、用PubSub【这不是数据类型,是…

Linux登录指令last详解

引言 在Linux系统中,了解用户登录记录是系统管理和安全审计的重要任务之一。last指令作为Linux系统中用于检索和展示用户登录信息的工具,扮演着至关重要的角色。本文将详细介绍last指令的定义、架构、原理、企业应用以及常见的命令体系,帮助…

CSP-X2024山东小学组T2:消灭怪兽

题目链接 题目名称 题目描述 怪兽入侵了地球! 为了抵抗入侵,人类设计出了按顺序排列好的 n n n 件武器,其中第 i i i 件武器的攻击力为 a i a_i ai​,可以造成 a i a_i ai​ 的伤害。 武器已经排列好了,因此不…

【操作系统笔记】目录

【操作系统笔记】操作系统框架https://blog.csdn.net/Resurgence03/article/details/142624262 【操作系统笔记】CPU管理https://blog.csdn.net/Resurgence03/article/details/142621526 【操作系统笔记】内存管理https://blog.csdn.net/Resurgence03/article/details/142669…

用 Python 与 Turtle 创作属于你的“冰墩墩”!

用 Python 与 Turtle 创作属于你的“冰墩墩”! 🦀 前言 🦀🐋 效果图 🐋🐉 代码 🐉 🦀 前言 🦀 冰墩墩是2022年北京冬季奥林匹克运动会的官方吉祥物。以熊猫为原型&#x…

C++将整形数据转换为字符串

在 C 中&#xff0c;将整数转换为字符串有多种方法&#xff0c;以下是几种常见的方式&#xff1a; 1. 使用 std::to_string 函数&#xff08;C11 及以后版本可用&#xff09; 函数介绍&#xff1a;std::to_string 是 C 标准库提供的一个非常方便的函数&#xff0c;它位于 <…

基于SSM的农家乐管理系统+论文示例参考

1.项目介绍 功能模块&#xff1a;管理员&#xff08;农家乐管理、美食信息管理、住宿信息管理、活动信息、用户管理、活动报名、论坛等&#xff09;&#xff0c;普通用户&#xff08;注册登录、活动报名、客房预订、用户评价、收藏管理、模拟支付等&#xff09;技术选型&#…