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

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文作者【紫极zj】,本篇将主要介绍通过配置审计的自定义规则等服务,对负载均衡进行预警行为的相关介绍。

前言

配置审计(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

面我计算/服务及菌线,就罐飞谈

新建函数

韦件国数

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 模板创建的函数。

image.png

我们在 ConfigService 这个服务下面新建一个名为 specific-config-change-alert 的函数。


函数的内部的业务逻辑,我们进行如下设计:

  1. 支持用户额外指定一个参数 arn ,方便我们对某一个特定的资源进行报警;如果不指定 arn,则表示对该类型的资源变更都进行告警;
  2. 调用日志服务(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)

image.png

设置基本属性

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

image.png


设置评估资源范围

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

image.png

配重审计/规利/当前联号/新建规则

新建规则

步理1

*送择规则关联的资源

基本墨性

目定义诗为决型

隆务支狮势全部技求突型

步质2

评估资源范困

已远资版本型

步猫3

RDS

炒致设置

SLB

ROS

SIb负鲜岭张x

步至4

Redis

修正设置

步话5

SLB

预宽井保存

Sib访间控制列表

Sb香户调证书

SIp贝集华店

Slb服务端辽书

参数设置

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

image.png

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


配置日志服务报警

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

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

image.png


image.png

验证效果

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

image.png


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

image.png

中国移动

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

image.png

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
4月前
【Azure 应用服务】Web.config中设置域名访问限制,IP地址限制访问特定的页面资源 (Rewrite)
【Azure 应用服务】Web.config中设置域名访问限制,IP地址限制访问特定的页面资源 (Rewrite)
文本vitepress,如何设置背景图,如何插入背景图,如何插入logo,为了放背景图片,我们要新建pubilc的文件夹,插入logo要在config.js中进行配置,注意细节,在添加背景时,注意格式
文本vitepress,如何设置背景图,如何插入背景图,如何插入logo,为了放背景图片,我们要新建pubilc的文件夹,插入logo要在config.js中进行配置,注意细节,在添加背景时,注意格式
|
SQL 缓存 开发框架
THINKPHP5中的config设置实例
THINKPHP5中的config设置实例
194 0
|
关系型数据库 MySQL 数据安全/隐私保护
mysql_config_editor 设置密码set --login_path
mysql_config_editor可以给指定的连接和密码生成一个加密文件.mylogin.cnf
164 0
|
网络安全 开发工具 git
git config 查看,设置,删除项
git config 查看,设置,删除项
git config 查看,设置,删除项
|
XML 开发框架 .NET
泛解析泛域名301重定向带参数跳转在iis的web.config中的设置方式 二级域名301重定向
泛解析泛域名301重定向带参数跳转在iis的web.config中的设置方式 二级域名301重定向
708 0
泛解析泛域名301重定向带参数跳转在iis的web.config中的设置方式 二级域名301重定向
|
存储 缓存 NoSQL
一步一步学习Redis——使用config命令查看或设置配置项
一步一步学习Redis——使用config命令查看或设置配置项
2143 0
一步一步学习Redis——使用config命令查看或设置配置项
|
存储 运维 数据库
配置审计(Config)配合开启OSS防盗链功能
本文作者:紫极zj 本文将主要介绍利用【配置审计】功能,如何快速发现企业上云过程中,针对未配置防盗链的 OSS Bucket 定位及修复案例。
10162 0
配置审计(Config)配合开启OSS防盗链功能
|
Web App开发
【视频】自然框架之分页控件的使用方法(二) 下载、DLL说明和web.config的设置
    上次说的是QuickPager分页控件的PostBack的使用方式,也提供了源码下载。但是有些人下载之后发现有一大堆的文件夹,还有一大堆的DLL,到底要用哪个呀?不会都要用吧。     当然不需要全都引用了,只需要引用三个DLL就可以了。
1105 0
|
Web App开发 XML 数据格式
一起谈.NET技术,更改SharePoint 的web.config设置的两种方式
  MSDN上写的不是很明白,自己测试通过,记录一下:   方法一:通过创建描述一组 Web.config 修改的 XML 文件以声明方式注册 Web.config 项。   备注:   直接写一个webconfig.
806 0

热门文章

最新文章