• 基于SLS构建RDS审计合规监控


    简介: 数据库是企业业务的数据核心,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源。因此,对数据库的操作行为尤其是全量 SQL 执行记录的审计日志,就显得尤为重要。

    背景

    数据库是企业业务的数据核心,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源。因此,对数据库的操作行为尤其是全量 SQL 执行记录的审计日志,就显得尤为重要。
    SLS联合RDS推出RDS SQL审计功能,将RDS SQL审计日志实时投递到SLS中;SLS提供实时查询、可视化分析、告警等功能。
    RDS SQL审计日志记录了对数据库执行的所有操作,这些信息是系统通过网络协议分析所得,对系统CPU消耗极低,不影响SQL执行效率。RDS SQL审计日志包括但不限于如下操作:
    • 数据库的登录和退出操作。
    • DDL(Data Definition Language)操作:对数据库结构定义的SQL语句,包括CREATE、ALTER DROP、TRUNCATE、COMMENT等。
    • DML(Data Manipulation Language)操作:SQL操作语句,包括SELECT、INSERT、UPDATE、DELETE等。
    • 其他SQL执行操作,包括任何其他通过SQL执行的控制,例如回滚、控制等。
    • SQL执行的延迟、执行结果、影响的行数等信息。
    此外,SLS还针对RDS的操作合规进行监控,及时发现RDS的配置异常,确保数据库安全。

    RDS日志审计--采集

    目前RDS SQL审计日志采集到SLS有两种方式:
    • 云产品采集渠道
    优点:少量且同地域实例采集场景下配置简单。
    缺点:不支持跨地域、跨账号;不支持实例动态发现。如果需要跨地域跨账号,需要自建数据加工任务。
    • 日志审计渠道
    优点:
    支持跨账号、跨地域中心化采集,便于审计报表分析。
    支持实例发现,一键开启自动采集;并支持通过采集策略控制采集范围。
    缺点:
    需要AK授权或手动授权来开启日志审计APP。
    会自动开启采集实例的SQL洞察功能,且不支持自动关闭。如果需要关闭SQL洞察,需要首先整体关闭日志审计RDS采集功能或者通过采集策略控制实例不采集,然后到RDS控制台逐个实例关闭SQL洞察。

     

    云产品采集渠道

    单账号同地域采集场景(只能将RDS审计日志采集到同地域的日志库中)

    • SLS控制台首页“接入数据”区域,选择“RDS 审计”。下文以采集张家口实例为例说明。

     


    • 因为采集的实例位于张家口,所以需要在张家口新建或者选择已存在的project及logstore。
    • 注意:采集的RDS实例审计日志仅支持同地域采集。

     


    • “数据源配置”页,完成RAM授权后可以查看张家口所有的RDS实例信息,默认日志投递功能是关闭的。之后可以根据日志采集需求,勾选相应的“开通投递”按钮,开启对应实例的日志投递功能。

     

    • 至此就完成了SQL审计日志的采集开启,跳转到上述配置的logstore下即可查看RDS实例日志。

     

    跨地域、跨账号采集场景

    因为云产品采集渠道有只能将RDS审计日志采集到同地域的日志库的限制,所以要打破这个限时实现跨账号跨地域采集,就必须要自建跨域或者跨账号数据加工任务。
    因为自建数据加工任务需要比较复杂的授权,这里不再详细介绍。如有需要,详见:
    1、配置自定义角色授权
    2、最佳实践:跨地域传输数据
    3、最佳实践:多目标Logstore数据分发 中的“跨账号分发”部分。

     

    由此可见,云产品采集渠道仅仅在简单采集场景下具有便捷采集的优势,但是在处理跨地域、跨账号采集时不仅数据同步链路较长,而且还需要比较复杂的授权过程;而且当实例变更(甚至新的实例出现)时,需要手动维护同步链路,维护成本极高。而日志审计渠道恰恰可以很好的解决跨地域、跨账号采集,实例变更维护成本高的痛点。

    日志审计采集渠道

    日志审计授权

    建议使用阿里云RAM用户操作。
    • 创建阿里云RAM用户,并赋予该用户AliyunRAMFullAccess、AliyunLogFullAccess权限,创建AK。
    • 登录上述RAM用户,在SLS控制台选择“日志审计服务”。

     

    • 首次进入需要进行授权才能开启。这里输入第一步创建的AK,并选择审计日志存储的中心Project地域即可。

     


    • 如果出现如下页面说明已经授权完成。之后就可以根据采集日志的需要开启对应的云产品日志,例如这里需要采集操作审计(Actiontrail)日志及RDS SQL审计日志。

     

    配置SQL审计采集

    本文重点描述如何开启RDS SQL审计日志并通过采集策略管理日志采集范围。SQL审计日志开启首先需要进行采集策略配置。完整的语法说明详见采集策略文档。这里列出一些常用的策略方案。
    • 采集特定区域的实例日志。例如:只采集杭州、上海的实例。

     

    • 不采集特定标签的实例。例如:给测试实例打上type标签取值test。

     

    • 只采集限定的实例日志。

     

    SQL审计

     

    RDS日志审计--报表

    基于SLS的SQL审计日志提供了3张审计报表:
    • RDS审计中心:主要展现了所有数据库的SQL执行指标、分布、趋势等信息。例如:PV、UV、操作数据库/数据表等的统计。
    • RDS审计安全中心:主要展现了所有数据库的失败SQL和危险SQL,以及大批量删除或修改事件的详情、分布和趋势等。
    • RDS审计性能中心:主要展现了所有数据库的具体性能指标,例如SQL执行峰值、SQL执行的平均时间、慢SQL的具体分布与来源等。

    RDS日志审计--告警

    SLS日志审计新发布了内置告警规则,其中针对于RDS SQL审计提供了19条内置规则(后续还会不断扩展)。

    规则查看

    通过SLS首页-> 日志审计服务-> 控制台左侧审计告警 -> 规则配置/告警规则,就可以进入审计告警规则配置页面。规则主要分为两类:
    • SQL审计类规则(RDS安全):主要针对SQL的执行异常进行监控。例如,慢SQL、或批量删除等。
    • 前提:通过日志审计APP开通RDS SQL审计日志采集。
    • RDS操作合规规则:主要是基于CIS规则,对RDS的操作配置进行监控。
    • 前提:通过日志审计APP开通Actiontrail操作日志采集。

     

    告警配置

    行动策略配置
    • 钉钉渠道通知
    • 下图样例:所有告警都发送钉钉通知。

     

    • 短信/语音渠道通知:
    • 下图样例:当告警级别大于严重时,向“SLS审计内置用户组”发送语音告警。具体的通知人的电话等情况,详见创建用户和用户组。

     

    告警样例

    接下来,我们用两个具体的例子来介绍RDS审计告警的使用。

    SQL审计样例--慢SQL审计

    开启告警
    • 根据用户需要设置告警参数。例如,慢SQL检测阈值,过滤白名单等。
    • 点击开启按钮,告警即可开启。

     

     

    构造异常
    • 测试数据集

    # 表结构
    mysql> desc test;
    +-----------------+------------------+------+-----+---------+----------------+
    | Field           | Type             | Null | Key | Default | Extra          |
    +-----------------+------------------+------+-----+---------+----------------+
    | id              | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | title           | varchar(100)     | NO   | MUL | NULL    |                |
    | author          | varchar(40)      | NO   |     | NULL    |                |
    | submission_date | date             | YES  | MUL | NULL    |                |
    +-----------------+------------------+------+-----+---------+----------------+
    4 rows in set (0.04 sec)
    
    # 数据
    mysql> select * from test limit 5;
    +----+--------+---------+-----------------+
    | id | title  | author  | submission_date |
    +----+--------+---------+-----------------+
    |  1 | title1 | author1 | 2021-01-12      |
    |  2 | title1 | author1 | 2021-01-12      |
    |  3 | title1 | author1 | 2021-01-12      |
    |  4 | title1 | author1 | 2021-01-12      |
    |  5 | title1 | author1 | 2021-01-12      |
    +----+--------+---------+-----------------+

    • 慢SQL

    # 使用索引字段group by
    mysql> select title, count(1) as cnt from test where submission_date='2021-01-12' group by title;
    +--------+-------+
    | title  | cnt   |
    +--------+-------+
    | title1 | 59392 |
    | title2 |  8448 |
    +--------+-------+
    2 rows in set (0.06 sec)
    
    # 索引字段经过运算后group by,使得索引失效。
    mysql> select title, count(1) as cnt from test where day(submission_date)=12 group by title;
    +--------+-------+
    | title  | cnt   |
    +--------+-------+
    | title1 | 59392 |
    | title2 |  8448 |
    +--------+-------+
    2 rows in set (0.58 sec)

    • 告警监控到慢SQL,并发起告警通知。

     

    RDS操作合规样例--实例访问白名单异常配置

     

    作者:烨陌

    原文链接

    本文为阿里云原创内容,未经允许不得转载

  • 相关阅读:
    MVC 后台DataTable 前台遍历
    oracle 创建表空间详细介绍
    C# Chart 折线图 多条数据展示
    ASP.NET Request.QueryString 出现乱码问题
    生成XML文件
    什么是Intent(意图)
    HTTP错误405-Method Not Allowed
    通过剪切板传递数据—— 传递一个对象
    Linux下crontab命令的用法
    Redis使用介绍
  • 原文地址:https://www.cnblogs.com/yunqishequ/p/14462387.html
Copyright © 2020-2023  润新知