配置审计(Config)变配报警设置
前言
配置审计(Config)将您分散在各地域的资源整合为全局资源列表,可便捷地搜索全局资源,并通过规则对资源配置进行评估,过滤出不符合业务要求的资源变配操作。
本文为您介绍如何通过配置审计(Config)的自定义规则和日志服务(SLS)报警配合,对指定的负载均衡(SLB)变配进行报警,帮助企业快速感知变配内容并及时做出相应对策。
背景
云上账号主要有阿里云主账号、RAM子账号、RAM角色,阿里云主账号对所有资源都有完整的控制能力,一些被赋予高级权限的RAM子账号、RAM角色等也同样可以控制资源。如何在变更操作之前阻断该行为,是服务控制策略(SCP)的范畴(该服务限制只能是企业认证账户,并且开通了资源目录(Resource Directory)才可实施),本文暂不讨论。如何在变配后快速感知到变化也非常重要。公司A的运维同学向我们提了一个问题:公司的核心业务部署在阿里云上,采用的架构是弹性计算ECS+负载均衡(SLB)+关系型数据库RDS,每天都担心核心服务异常变配导致业务中断,希望变配后及时收到消息通知,想问问有没有什么方案。
我们为他们推荐了配置审计(Config)结合日志服务(SLS)的报警。那这个产品组合是如何实现以上目标的呢?
流程图
整个方案的流程图如上所示。员工A修改了企业某核心业务负载均衡(SLB)的配置。资源变配数据会被配置审计(Config)感知并存储,同时会触发监听该类资源变动的规则进行评估。规则引擎接收的入参包含了资源变动的 Diff
数据,如果该规则为自定义规则,规则引擎会执行配置好的函数计算(FC)的函数。函数过滤出目标资源的变更,并将变更数据写入日志服务(SLS)中。日志服务通过配置告警策略,触发告警并通知管理员。
另外两条实线表示管理员可以前往配置审计(Config)查看资源时间线以及通过日志服务(SLS)查看资源具体的配置变更信息。
新建一个日志库(logstore)
新建日志库(logstore),用于存储目标资源的变配数据,同时我们可以基于这个日志库(logstore)配置告警策略;具体如何创建日志项目(project)及日志库(logstore),这里我就不再赘述,您可参考日志服务的文档进行操作。
本案例对应的日志项目为: aliyun-fc-cn-hangzhou-26064c43-65dc-5734-8175-3c0fdfc784df
,日志库为: specific-config-alert
。
新建函数计算(FC)的函数
配置审计(Config)的自定义规则是基于函数计算(FC)实现的。函数所属的地域是不受限制的。本案例选择地域为华东1(杭州)。
我是基于 alimebot-nodejs
模板创建的函数。
我们在 ConfigService
这个服务下面新建一个名为 specific-config-change-alert
的函数。
函数的内部的业务逻辑,我们进行如下设计:
- 支持用户额外指定一个参数
arn
,方便我们对某一个特定的资源进行报警;如果不指定arn
,则表示对该类型的资源变更都进行告警; - 调用日志服务(SLS)的SDK,将日志存入日志库(logstore);
代码逻辑如下
const ALY = require('aliyun-sdk'); // 日志服务Nodejs SDK exports.handler = function (event, context, callback) {
const sls = new ALY.SLS({
"accessKeyId": context.credentials.accessKeyId, //阿里云访问密钥AccessKey ID。更多信息,请参见访问密钥。阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维。
"secretAccessKey": context.credentials.accessKeySecret, //阿里云访问密钥AccessKey Secret。
"securityToken": context.credentials.securityToken, //RAM角色额外输入的securityToken
endpoint: 'http://cn-hangzhou.log.aliyuncs.com', //日志服务的域名。更多信息,请参见服务入口。此处以杭州为例,其它地域请根据实际情况填写。
apiVersion: '2015-06-01' //SDK版本号,固定值。
}); // -------------------------------
// put logs
// -------------------------------
const projectName = "aliyun-fc-cn-hangzhou-26064c43-65dc-5734-8175-3c0fdfc784df"; //刚刚创建的日志项目
const logStoreName = "specific-config-alert"; //刚刚创建的日志库
const parsed = JSON.parse(event); //将入参转化为js对象
if (!parsed || !parsed.invokingEvent) { //配置审计调用时传入的参包含: invokingEvent(变更数据), ruleParameters(函数规则额外传入的用户自定义参数), resultToken
callback(null, event);
return;
} const specificArn = parsed.ruleParameters && parsed.ruleParameters.arn; //函数规则允许用户传入的自定义的资源arn const transformData = Object.keys(parsed.invokingEvent).map(function(k) { return { key: k, value: JSON.stringify(parsed.invokingEvent[k])}}); // 日志服务需要的格式
const logGroup = {
logs : [{
time: Math.floor(new Date().getTime()/1000),
contents: transformData
}],
topic: 'special-config-change'
}; const resourceArn = parsed.invokingEvent && parsed.invokingEvent.configurationItem && parsed.invokingEvent.configurationItem.arn;
if (!specificArn || specificArn === resourceArn) { // 如果规则中未指定具体资源arn,则默认所有过滤到的资源类型都写到日志服务(SLS)
sls.putLogs({
projectName: projectName,
logStoreName: logStoreName,
logGroup: logGroup
}, function (err, data) {
if (err) {
callback(err);
return;
}
callback(null, data);
});
} else {
callback(null);
}
}
函数是以指定的RAM角色来执行的,所以需要给指定的RAM角色进行授权,本案例需要给RAM角色授权能够写指定日志库的权限。
{
"Version": "1",
"Statement": [
{
"Action": [
"log:PostLogStoreLogs",
"log:PutLogs"
],
"Resource": "acs:log:*:*:project/aliyun-fc-cn-hangzhou-26064c43-65dc-5734-8175-3c0fdfc784df/logstore/*", // 具体可根据自己函数的实际业务逻辑进行授权
"Effect": "Allow"
}
]
}
新建配置审计(Config)规则
进入配置审计控制台->规则->新建规则->新建自定义规则,自定义规则是将规则评估的逻辑交给函数计算(FC)。
设置基本属性
我们选择前面创建的函数,并配置规则名称,触发机制选择“配置变更”,表示我们希望在有新的配置发生变化时,就执行该自定义规则规则。
设置评估资源范围
资源类型选择SLB负载均衡,表示我们只希望对类型为SLB负载均衡的配置变更才触发函数执行。
参数设置
在前面进行函数设计时,我们增加了一个选项,允许用户在配置自定义规则时,希望对某一个资源进行报警需求的支持。
由于在期望值那一栏,我没有输入任何值,则表示当资源类型为负载均衡(SLB)的所有资源发生变更时,都将触发函数执行;您也可以输入期望值,期望值位目标资源的 arn。
配置日志服务报警
进入之前新建的日志服务(SLS)的日志项目(logstore),设置一个查询条件 SELECT COUNT(1) AS C
,查询后,点击另存为告警,则开始进行日志服务告警配置。
以下为我设定的告警配置:每隔5分钟,查询最近5分钟的日志数据,如果查询的结果 >0
, 则触发短信告警。
验证效果
我们添加一个SLB负载均衡的监听。稍等一会,我们就会发现一条配置变更已经写入到了 日志库(logstore)中。
报警通知直接通过短信通知到了我的手机上。
总结
配置审计(Config)对资源变配触发自定义规则可以实现很多的客户场景, 如自定义合规校验逻辑(参考文档)、自动化执行、甚至自动修复等。
本文主要结合日志服务(SLS)的告警帮助客户快速感知资源变化并报警。
本文为阿里云原创内容,未经允许不得转载。
配置审计(Config)变配报警设置的更多相关文章
- CentOS7下搭建zabbix监控(四)——Zabbix报警设置
CentOS7下搭建zabbix监控(一)——Zabbix监控端配置 CentOS7下搭建zabbix监控(二)——Zabbix被监控端配置 CentOS7下搭建zabbix监控(三)——Zabbix ...
- springcloud(四):应用配置中心config的安全设置
springcloud应用配置中心config的安全设置 在springcloud应用开发中,为了方便在线管理我们的配置文件,通常会配一个配置中心config-server,这里托管着应用的一些配置文 ...
- linux中Zabbix邮件报警设置配置步骤
使用外部邮箱账号发送报警邮件设置 配置Zabbix服务端外部邮箱 vi /etc/mail.rc #编辑,添加以下信息 set from=xxx@163.com smtp=smtp.163.com s ...
- 【flask】flask项目配置 app.config
[理论] 在很多情况下,你需要设置程序的某些行为,这时你就需要使用配置变量.在Flask中,配置变量就是一些大写形式的Python变量, 你也可以称之为配置参数或配置键.使用统一的配置变量可以避免在程 ...
- asp.net配置web.config支持jQuery.Uploadify插件上传大文件
配置web.config有两处地方需要配置,分别是集成模式和经典模式. 集成模式: <!--文件上传大小设置--> <httpRuntime requestValidationMod ...
- echarts 用marlkline画线 同时配置中含有datazoom,怎么设置markline
由于项目需要设置边界值即用markline 画标线,通过echarts文档可以查看到(如下) 1.通过坐标点(xAxis和yAxis的设置) 通过网上搜索许多markline的配置都是通过下面来设置的 ...
- asp.net权限控制配置web.config
项目下 有三个文件夹 A,B,C 验正方式是 Forms 验正 我要设置他们的访问权限为, A,匿名可访问 B,普通用户授权后才能访问 C,只允许管理员访问 <configuration> ...
- CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置
说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合Cacti等相关软件,重新编译而成的一个操作系统! 说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合 ...
- 分布式监控系统Zabbix-3.0.3--短信报警设置
前面已分别介绍了zabbix的邮件.微信报警设置,这些都是手机在有网络时才能收到报警信息,那如果手机没有网的情况下怎么办,这就需要考虑使用短信接口报警了.当服务出现故障达到预警级别是通过发送短信的形式 ...
- 微信小程序:工具配置 project.config.json
微信小程序:工具配置 project.config.json 一.项目配置文件project.config.json 小程序开发者工具在每个项目的根目录都会生成一个 project.config.js ...
随机推荐
- springMVC+JDBC:分页示例
文章来源:http://liuzidong.iteye.com/blog/1067492 一 环境:XP3+Oracle10g+MyEclipse6+(Tomcat)+JDK1.5 二 工程相关图片: ...
- MySQL(表相关操作)
一 存储引擎 日常生活中文件格式有很多,并且针对不同的文件格式会有对应不同存储方式 和处理机制(txt.word) 针对不同的数据应该有对应的不同的处理机制来存储 存储引擎就是不同的处理机制 MySQ ...
- 记录-JS简单实现购物车图片局部放大预览效果
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.实现效果 二.代码实现 代码不多,先看一下 HTML 里面结构很简单,初始化 MagnifyingGlass 对象来关联一个 IMG ...
- 工作中总结的30个常用Linux指令,实在记不住就别硬记了,看这篇就够了
写在开头 最近发现自己记忆力严重下滑,很多sql命令,linux命令都记不住,特别是linux命令,很多命令参数很多,一段时间不用,再去使用就需要从网上重查了,很烦人,为此花了一些时间把之前笔记中的L ...
- KingbaseES自动生成列介绍
在KingbaseES中create table语句支持GENERATED column(生成列). 生成列是一种特别的列类型,它的值基于其他列的值计算得出.因此,生成列之于列,有点像视图之于表的关系 ...
- ue4-c++定时器和时间轴简易模板
定时器Delay 在头文件中需要声明TimerHandle和功能函数,功能函数是计时结束后执行的功能 在源文件中利用GetWorldTimerManager()实现定时器的开启(绑定功能函数)和清除. ...
- #分治NTT#CF1218E Product Tuples
Codeforces 用 OGF 表示 \(F(B,x)\) 就是 \[\prod_{i=1}^n(1+(q-a_i)x) \] 直接分治 NTT 把 \([x^k]\) 也就是这一位的系数求出来就可 ...
- #平衡树,set#洛谷 2286 [HNOI2004]宠物收养场
题目 分析 由于宠物被领养者领养和领养者领养宠物操作是一样的, 考虑建两棵平衡树维护操作,以领养者领养宠物为例 若当前没有宠物,就将领养者加入平衡树中, 否则选择最接近的特点值的宠物统计答案并删除该宠 ...
- OpenHarmony 社区运营报告(2023 年 10 月)
● 截至2023年10月,OpenHarmony社区共有51家共建单位,累计超过6200名贡献者产生24.2万多个PR,2.3万多个Star,6.1万多个Fork,59个SIG. ● OpenHa ...
- Git 13 暂存代码
如果当前分支的功能还没开发完,无法提交代码. 但出现了紧急情况(比如线上BUG),需要立即切换到其他分支进行开发. 此时可以先暂存当前分支代码,等切换回当前分支的时候再恢复. 1.暂存当前分支变更: ...