审核跟踪 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

审核跟踪

审计跟踪记录(或审计日志)提供与 AWS 账户中安全相关的事件的时间顺序记录。其中包括 Amazon RDS 的事件,这些事件为影响您的数据库或云环境的活动顺序提供了书面证据。在 Amazon RDS for MySQL 或 MariaDB 中,使用审计跟踪记录涉及:

  • 监控数据库实例审计日志

  • 监控 AWS CloudTrail 中的 Amazon RDS API 调用

对于 Amazon RDS 数据库实例,审计的目标通常包括:

  • 为以下内容启用问责制:

    • 对参数或安全配置执行的修改

    • 在数据库架构、表或行中执行的操作,或者影响特定内容的操作

  • 入侵检测和调查

  • 可疑活动检测和调查

  • 检测授权问题;例如,识别普通用户或特权用户滥用访问权限的行为

数据库审计跟踪记录试图回答以下典型问题:谁查看或修改了数据库中的敏感数据? 这是什么时候发生的? 特定用户从哪里访问数据? 特权用户是否滥用了其无限访问权限?

MySQL 和 MariaDB 都通过使用 MariaDB 审计插件实现数据库实例审计跟踪记录功能。此插件会记录数据库活动,例如用户登录数据库和对数据库运行的查询。数据库活动记录存储在日志文件中。若要访问审计日志,数据库实例必须使用具有 MARIADB_AUDIT_PLUGIN 选项的自定义选项组。有关更多信息,请参阅 Amazon RDS 文档中的 MySQL 的 MariaDB 审计插件支持。审计日志中的记录以插件定义的特定格式存储。您可以在 MariaDB 服务器文档中找到有关审计日志格式的更多详细信息。

您的 AWS 账户的 AWS 云审计跟踪记录由 AWS CloudTrail 服务提供。CloudTrail 将 Amazon RDS 的 API 调用作为事件捕获。所有 Amazon RDS 操作都会记录。CloudTrail 提供了用户、角色或 AWS 服务在 Amazon RDS 中所执行操作的记录。事件包括在 AWS 管理控制台、AWS CLI、AWS SDK 和 API 中所执行的操作。

示例

在典型的审计场景中,您可能需要将 AWS CloudTrail 跟踪与数据库审计日志和 Amazon RDS 事件监控相结合。例如,您可能遇到的情况是,您的 Amazon RDS 数据库实例(例如 database-1)的数据库参数已修改,您的任务是确定谁进行了修改、更改了哪些内容以及更改发生的时间。

要完成任务,请执行以下步骤:

  1. 列出发生在数据库实例 database-1 上的 Amazon RDS 事件,并确定类别 configuration change 中是否存在包含消息 Finished updating DB parameter group 的事件。

    $ aws rds describe-events --source-identifier database-1 --source-type db-instance { "Events": [ { "SourceIdentifier": "database-1", "SourceType": "db-instance", "Message": "Finished updating DB parameter group", "EventCategories": [ "configuration change" ], "Date": "2022-12-01T09:22:40.413000+00:00", "SourceArn": "arn:aws:rds:eu-west-3:111122223333:db:database-1" } ] }
  2. 确定数据库实例正在使用哪个数据库参数组:

    $ aws rds describe-db-instances --db-instance-identifier database-1 --query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups]' [ [ "database-1", "mariadb", [ { "DBParameterGroupName": "mariadb10-6-test", "ParameterApplyStatus": "pending-reboot" } ] ] ]
  3. 使用 AWS CLI 在部署 database-1 的区域中,于在步骤 1 中发现的 Amazon RDS 事件前后的时间段内,搜索 CloudTrail 事件,其中 EventName=ModifyDBParameterGroup

    $ aws cloudtrail --region eu-west-3 lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=ModifyDBParameterGroup --start-time "2022-12-01, 09:00 AM" --end-time "2022-12-01, 09:30 AM" { "eventVersion": "1.08", "userIdentity": { "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:role/Role1", "accountId": "111122223333", "userName": "User1" } } }, "eventTime": "2022-12-01T09:18:19Z", "eventSource": "rds.amazonaws.com", "eventName": "ModifyDBParameterGroup", "awsRegion": "eu-west-3", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "parameters": [ { "isModifiable": false, "applyMethod": "pending-reboot", "parameterName": "innodb_log_buffer_size", "parameterValue": "8388612" }, { "isModifiable": false, "applyMethod": "pending-reboot", "parameterName": "innodb_write_io_threads", "parameterValue": "8" } ], "dBParameterGroupName": "mariadb10-6-test" }, "responseElements": { "dBParameterGroupName": "mariadb10-6-test" }, "requestID": "fdf19353-de72-4d3d-bf29-751f375b6378", "eventID": "0bba7484-0e46-4e71-93a8-bd01ca8386fe", "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management", "sessionCredentialFromConsole": "true" }

CloudTrail 事件显示,AWS 账户 111122223333 中角色为 Role1 的用户 User12022-12-01 at 09:18:19 h 修改了数据库实例 database-1 使用的数据库参数组 mariadb10-6-test。修改了两个参数,并设置为以下值:

  • innodb_log_buffer_size = 8388612

  • innodb_write_io_threads = 8

其他 CloudTrail 和 CloudWatch Logs 功能

您可以通过在 CloudTrail 控制台中查看事件历史记录对过去 90 天内的操作和安全事故进行问题排查。要延长保留期并利用其他查询功能,您可以使用 AWS CloudTrail Lake。借助 AWS CloudTrail Lake,您可以在事件数据存储中保存事件数据长达七年。此外,此服务支持复杂的 SQL 查询,相比事件历史记录中的简单密钥值查询提供的视图,这些查询提供更深入、更可自定义的事件视图。

要监控您的审计跟踪记录、设置告警并在特定活动发生时收到通知,您需要将 CloudTrail 配置为将跟踪记录发送到 CloudWatch Logs。将跟踪记录存储为 CloudWatch Logs 后,您可以定义指标筛选条件来评估日志事件以匹配字词、短语或值,并将指标分配给指标筛选条件。此外,您还可以创建根据您指定的阈值和时间段生成的 CloudWatch 告警。例如,您可以配置告警,向负责的团队发送通知,以便他们可以采取适当的措施。您也可以将 CloudWatch 配置为自动执行操作以响应警报。