当您为日志创建告警规则后,可以通过函数计算接收告警通知并自动处理告警事件。例如某企业在使用OSS时,要求所有Bucket的ACL都必须为私有(private)。如果有员工在创建或管理OSS Bucket时,将ACL设置为公共读(public-read)或公共读写(public-read-write),告警系统需快速发现并自动修复。
工作原理
本文以操作审计日志中的OSS审计日志为例,当ACL被设置为公共读(public-read)或公共读写(public-read-write)时,日志服务会发送告警通知,函数计算接收告警通知后自动调用函数修改Bucket的ACL,具体流程如下:
采集OSS审计日志:开启日志审计的云产品日志采集功能,操作审计日志(包括OSS审计日志)被采集到日志服务。
配置函数计算的服务和函数:创建函数计算服务和函数。
配置日志服务的告警:配置告警规则和通知对象,监测OSS审计日志中的PutBucket事件,将告警结果通知给函数计算。
查看函数计算处理结果:函数计算接收告警通知后调用函数,判断Bucket ACL权限是否为私有并修改。您可以查看函数计算调用日志和OSS Bucket的ACL。
操作权限说明
如果您使用的是阿里云RAM用户,该RAM用户需具备如下权限。具体操作,请参见为RAM用户授权。
{
"Statement": [{
"Action": "ram:CreateServiceLinkedRole",
"Resource": "*",
"Effect": "Allow",
"Condition": {
"StringEquals": {
"ram:ServiceName": "alert.log.aliyuncs.com"
}
}
}],
"Version": "1"
}
1. 采集OSS审计日志
ActionTrail操作日志包括OSS审计日志,因此您可以在日志审计服务中,开启ActionTrail操作日志的采集,从而采集OSS审计日志。日志审计开启云产品操作审计的具体操作,请参见操作审计。
2. 创建服务和函数
2.1 创建服务
2.2 创建函数
在服务列表页面,单击目标服务。在函数管理页面,单击创建函数。
在创建函数页面,重要参数说明如下所示,其他参数保持默认配置。然后单击创建。具体操作,请参见创建函数。
函数名必须以
sls-ops-
开头,例如sls-ops-test
。设置请求处理程序类型为处理事件请求。
本示例从环境变量中获取AccessKey ID和AccessKey Secret。其中,accessKeyId和accessKeySecret为阿里云账号的访问密钥,您需要配置环境变量,具体操作,请参见配置环境变量。
创建函数后,
index.js
替换如下,部署成功后,无需执行测试操作。说明在
index.js
中,您可以通过调用putBucketACL
方法修改Bucket ACL权限,以调整其权限设置。此方法所需的region
和bucket
参数,将通过解析日志服务中告警触发时返回的查询统计结果(通常可从alert.fire_results
中获取)来动态获取。更多告警参数,请参见内容模板变量说明(新版)。const OSS = require('ali-oss') const accessKeyId = process.env.ALIBABA_CLOUD_ACCESS_KEY_ID const accessKeySecret = process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET async function checkBucketAcl(region, bucket) { const client = new OSS({ region: `oss-${region}`, accessKeyId, accessKeySecret, bucket: bucket }) const result = await client.getBucketACL(bucket) if (result.acl !== 'private') { await client.putBucketACL(bucket, 'private') } } exports.handler = async (event, context, callback) => { const alert = JSON.parse(event.toString()) for (const result of alert.fire_results) { const { region, bucket } = result await checkBucketAcl(region, bucket) } callback(null, '') }
3. 创建告警
3.1 创建告警规则
登录日志服务控制台,在 Project 列表单击目标 Project。
操作审计会自动创建一个名为
actiontrail_<跟踪名称>
的日志库(Logstore)。单击目标Logstore,输入如下查询和分析语句,单击查询/分析,查询无报错,单击另存为告警。新建Bucket或者修改Bucket的ACL权限,都会生成一条PutBucket的审计日志。因此您可以使用如下查询和分析语句,获取PutBucket日志,并提取Bucket地域和名称。后续函数计算会基于该信息,判断并修改OSS Bucket的ACL。
event.ServiceName: Oss AND event.eventName: PutBucket | SELECT "event.acsRegion" AS region, split("event.eventSource", '.') [1] AS bucket
在告警监控规则面板中,参考下图,完成配置。更多参数说明,请参见创建日志告警监控规则。
3.2 查看告警记录
创建告警后,修改Bucket的ACL权限或新建Bucket都会触发告警。您可以在告警概览页面的告警历史图表中,查看已触发的告警。
4. 查看函数计算处理结果
函数计算收到告警通知后,调用函数判断对应Bucket的ACL是否为私有并修改。即如果ACL为公共读或公共读写,函数计算将自动修改ACL为私有。
4.1 查看函数计算调用日志
登录函数计算控制台,在左侧导航栏,单击服务及函数,在服务列表页面,单击目标服务,在函数管理页,单击目标函数,进入调用日志页面,查看调用日志。更多信息,请参见查看调用日志。
4.2 查看OSS Bucket的ACL
登录OSS管理控制台,进入目标Bucket的读写权限页面,查看ACL。函数计算已调用函数将该Bucket的ACL修改为私有。