当前位置:主页 > 查看内容

配置审计(Config)变配报警设置

发布时间:2021-05-20 00:00| 位朋友查看

简介:前言 配置审计 Config 将您分散在各地域的资源整合为全局资源列表 可便捷地搜索全局资源 并通过规则对资源配置进行评估 过滤出不符合业务要求的资源变配操作。 本文为您介绍如何通过 配置审计 Config 的自定义规则和 日志服务 SLS 报警配合 对指定的 负载均……
前言

配置审计 Config 将您分散在各地域的资源整合为全局资源列表 可便捷地搜索全局资源 并通过规则对资源配置进行评估 过滤出不符合业务要求的资源变配操作。


本文为您介绍如何通过配置审计 Config 的自定义规则和日志服务 SLS 报警配合 对指定的负载均衡 SLB 变配进行报警 帮助企业快速感知变配内容并及时做出相应对策。


背景

云上账号主要有阿里云主账号、RAM子账号、RAM角色 阿里云主账号对所有资源都有完整的控制能力 一些被赋予高级权限的RAM子账号、RAM角色等也同样可以控制资源。如何在变更操作之前阻断该行为 是服务控制策略 SCP 的范畴 该服务限制只能是企业认证账户 并且开通了资源目录 Resource Directory 才可实施 本文暂不讨论。如何在变配后快速感知到变化也非常重要。公司A的运维同学向我们提了一个问题 公司的核心业务部署在阿里云上 采用的架构是弹性计算ECS 负载均衡 SLB 关系型数据库RDS 每天都担心核心服务异常变配导致业务中断 希望变配后及时收到消息通知 想问问有没有什么方案


我们为他们推荐了配置审计 Config 结合日志服务 SLS 的报警。那这个产品组合是如何实现以上目标的呢


流程图

image.png

整个方案的流程图如上所示。员工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 杭州 。

image.png

我是基于 alimebot-nodejs 模板创建的函数。

image.png

我们在 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

image.png

设置基本属性

我们选择前面创建的函数 并配置规则名称 触发机制选择“配置变更” 表示我们希望在有新的配置发生变化时 就执行该自定义规则规则。

image.png


设置评估资源范围

资源类型选择SLB负载均衡 表示我们只希望对类型为SLB负载均衡的配置变更才触发函数执行。

image.png

参数设置

在前面进行函数设计时 我们增加了一个选项 允许用户在配置自定义规则时 表示只希望对某一个资源进行报警需求的支持。

image.png

由于在期望值那一栏 我没有输入任何值 则表示当资源类型为负载均衡 SLB 的所有资源发生变更时 都将触发函数执行 您也可以输入期望值 。


配置日志服务报警

进入之前新建的日志服务 SLS 的日志项目(logstore) 设置一个查询条件 SELECT COUNT(1) AS C 查询后 点击另存为告警 则开始进行日志服务告警配置。

以下为我设定的告警配置 每隔5分钟 查询最近5分钟的日志数据 如果查询的结果 0 , 则触发短信告警。

image.png


image.png

验证效果

我们添加一个SLB负载均衡的监听。稍等一会 我们就会发现一条配置变更已经写入到了 日志库 logstore 中。

image.png


报警通知直接通过短信通知到了我的手机上。

image.png



总结

配置审计 Config 对资源变配触发自定义规则可以实现很多的客户场景 如自定义合规校验逻辑 参考文档 、自动化执行、甚至自动修复等。


本文主要结合日志服务 SLS 的告警帮助客户快速感知资源变化并报警。


如果您有其他更好的思路和想法 或者有其他关于产品的问题 欢迎加入我们的产品交流群。

image.png


本文转自网络,原文链接:https://developer.aliyun.com/article/784208
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:2021年值得关注的8大边缘计算趋势 下一篇:没有了

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐