前言
配置审计(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(杭州)。
面我计算/服务及菌线,就罐飞谈
新建函数
韦件国数
HTTP荫效
住二HOWog东自HTTP质
健南HELOWOrd示常山语中自通线
国故楼羟
共付云产品
新手入门
load-largc-code-package
ainebof-nodels
Ds5-dawntoad-zip-upload
进过省楼板的示专片码,用户可以速造县向./)
业楼板使用l口常兴店慰计舞上任代到包久小受同
港示机,可以完OS个ucKet中下打
(四)上传通作,这个录网快行解实百0韵Hoc
保基示疗捷地料,开发白贤实按使必构进行代传开发
赵.
运行环转:Pvthon2.7
远厅环境:
运行环境:nac6312
pythan27
适行评塘:
运行杯话:Dtiron27
我是基于 alimebot-nodejs
模板创建的函数。
我们在 ConfigService
这个服务下面新建一个名为 specific-config-change-alert
的函数。
函数的内部的业务逻辑,我们进行如下设计:
- 支持用户额外指定一个参数
arn
,方便我们对某一个特定的资源进行报警;如果不指定arn
,则表示对该类型的资源变更都进行告警; - 调用日志服务(SLS)的SDK,将日志存入日志库(logstore);
代码逻辑如下
constALY=require('aliyun-sdk'); // 日志服务Nodejs SDKexports.handler=function (event, context, callback) { constsls=newALY.SLS({ "accessKeyId": context.credentials.accessKeyId, //阿里云访问密钥AccessKey ID。更多信息,请参见访问密钥。阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维。 "secretAccessKey": context.credentials.accessKeySecret, //阿里云访问密钥AccessKey Secret。 "securityToken": context.credentials.securityToken, //RAM角色额外输入的securityTokenendpoint: 'http://cn-hangzhou.log.aliyuncs.com', //日志服务的域名。更多信息,请参见服务入口。此处以杭州为例,其它地域请根据实际情况填写。apiVersion: '2015-06-01'//SDK版本号,固定值。 }); // -------------------------------// put logs// -------------------------------constprojectName="aliyun-fc-cn-hangzhou-26064c43-65dc-5734-8175-3c0fdfc784df"; //刚刚创建的日志项目constlogStoreName="specific-config-alert"; //刚刚创建的日志库constparsed=JSON.parse(event); //将入参转化为js对象 if (!parsed||!parsed.invokingEvent) { //配置审计调用时传入的参包含: invokingEvent(变更数据), ruleParameters(函数规则额外传入的用户自定义参数), resultTokencallback(null, event); return; } constspecificArn=parsed.ruleParameters&&parsed.ruleParameters.arn; //函数规则允许用户传入的自定义的资源arnconsttransformData=Object.keys(parsed.invokingEvent).map(function(k) { return { key: k, value: JSON.stringify(parsed.invokingEvent[k])}}); // 日志服务需要的格式constlogGroup= { logs : [{ time: Math.floor(newDate().getTime()/1000), contents: transformData }], topic: 'special-config-change' }; constresourceArn=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负载均衡的配置变更才触发函数执行。
配重审计/规利/当前联号/新建规则
新建规则
步理1
*送择规则关联的资源
基本墨性
目定义诗为决型
隆务支狮势全部技求突型
步质2
评估资源范困
已远资版本型
步猫3
RDS
炒致设置
SLB
ROS
SIb负鲜岭张x
步至4
Redis
修正设置
步话5
SLB
预宽井保存
Sib访间控制列表
Sb香户调证书
SIp贝集华店
Slb服务端辽书
参数设置
在前面进行函数设计时,我们增加了一个选项,允许用户在配置自定义规则时,希望对某一个资源进行报警需求的支持。
由于在期望值那一栏,我没有输入任何值,则表示当资源类型为负载均衡(SLB)的所有资源发生变更时,都将触发函数执行;您也可以输入期望值,期望值位目标资源的 arn。
配置日志服务报警
进入之前新建的日志服务(SLS)的日志项目(logstore),设置一个查询条件 SELECT COUNT(1) AS C
,查询后,点击另存为告警,则开始进行日志服务告警配置。
以下为我设定的告警配置:每隔5分钟,查询最近5分钟的日志数据,如果查询的结果 >0
, 则触发短信告警。
验证效果
我们添加一个SLB负载均衡的监听。稍等一会,我们就会发现一条配置变更已经写入到了 日志库(logstore)中。
报警通知直接通过短信通知到了我的手机上。
中国移动
16:52
日志服务告警:项目
[阿里云
[aliyun-fc-cn-
hangzhou-26064c43-65dc-5734-8
175-3c0fdfc784df]中告警[重要资源
变配告警]触发,条件:[1>0,通
知:重要资源变配,请立即前往SLS
控制台查看,链接:https://
sls.console.aliyun.com/lognext
projectaliyun-fc-cn-
hangzhou-26064...,触发日志:
[C:1]
拷贝
更多.
总结
配置审计(Config)对资源变配触发自定义规则可以实现很多的客户场景, 如自定义合规校验逻辑(参考文档)、自动化执行、甚至自动修复等。
本文主要结合日志服务(SLS)的告警帮助客户快速感知资源变化并报警。
如果您有其他更好的思路和想法,或者有其他关于产品的问题,欢迎加入我们的产品交流群:34461021。