审计 Amazon RDS for SQL Server 数据库实例
本节提供有关 Amazon RDS 上 SQL Server 审计选项的信息,包括创建审计、查看审计日志以及监控结果。
先决条件
-
存储审计文件的 Amazon Simple Storage Service(Amazon S3)存储桶
-
访问 S3 存储桶的 AWS Identity and Access Management(IAM)角色
-
具有
ALTER ANY SERVER AUDIT或CONTROL SERVER权限的数据库登录
支持的版本
-
对于 Amazon RDS for SQL Server 2014,所有版本均支持服务器级审计。企业版还支持数据库级审计。
-
从 SQL Server 2016 (13.x) SP1 开始,所有版本支持服务器级别和数据库级别审核。
-
Amazon RDS 目前支持除中东(巴林)外的所有 AWS 区域中的 SQL Server 审计。有关最新信息,请参阅 Amazon RDS 文档中的 SQL Server Audit 支持。
使用 C2 审计模式
C2 审计模式是 Amazon RDS for SQL Server 数据库参数组中的一个参数。默认情况下它是禁用的。您可以通过将参数值更新为 1 来启用它。启用 C2 审计模式后,它会审计用户登录、存储过程调用以及创建和删除对象等事件。此模式可以生成大量数据,因为其可以审计所有内容或不审计任何内容。
重要
Microsoft 计划在 SQL Server 的未来版本中删除 C2 审计模式。我们建议您避免使用此功能。
创建和查看审计
您可以使用内置 SQL Server 审计机制(包括创建审计和审计规范)来审计 Amazon RDS for SQL Server 数据库。
-
使用具有访问存储桶必要权限的 IAM 角色,将审计日志上传到 S3 存储桶。
-
在创建选项组时,您可以选择 IAM 角色、S3 存储桶、压缩和保留期。最长保留期时间为 35 天。
-
您可以创建选项组并将其附加到新的或现有的 Amazon RDS for SQL Server 数据库实例。 审计日志存储在
D:\rdsdbdata\SQLAudit中。 -
SQL Server 完成写入到审计日志文件之后或该文件达到其大小限制时,Amazon RDS 会将文件上传到您的 S3 存储桶。
-
如果您启用保留,Amazon RDS 会将文件移入位于
D:\rdsdbdata\SQLAudit\transmitted的保留文件夹。在上传审核日志文件之前,审核记录会一直保留在数据库实例上。 -
您也可以通过查询
dbo.rds_fn_get_audit_file来查找审计记录。
对于多可用区实例,数据库审计规范对象将复制到所有节点。 服务器审计和服务器审计规范不会复制到所有节点,因此应手动创建这些对象。
配置选项组
按照以下步骤配置选项组,以对您的 Amazon RDS for SQL Server 数据库实例执行 SQL Server 审计。有关详细说明,请参阅 Amazon RDS 文档中的 SQL Server Audit。
-
创建选项组。
-
将 SQLSERVER_AUDIT 选项添加到该选项组。
-
对于 S3 目标,创建新存储桶或为审计日志选择现有的存储桶。
-
对于 IAM 角色,创建新角色或选择具有所需策略的现有角色。有关更多信息,请参阅 IAM 文档中的手动为 SQL Server Audit 创建 IAM 角色。
-
展开其他信息,然后选择启用压缩以压缩审计日志(推荐)。
-
要保留数据库实例的审计日志,请选择启用保留并指定保留期(最长 35 天)。
-
将选项组应用到新的或现有的 Amazon RDS for SQL Server 数据库实例。
-
对于新数据库实例,请在启动实例时应用选项组。
-
对于现有数据库实例,请修改实例并附加选项组。
-
创建审核
要创建服务器审计,请使用以下脚本。此脚本在您指定的文件路径中创建审计文件。有关语法、参数和示例,请参阅 Microsoft SQL Server 文档
--Creating the server audit use master GO CREATE SERVER AUDIT [Audit-<<servername>>] TO FILE ( FILEPATH = N'D:\rdsdbdata\SQLAudit', MAXSIZE = 2 MB, RESERVE_DISK_SPACE = OFF) WITH ( QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE) GO -- Enabling the server audit ALTER SERVER AUDIT [Audit-<<servername>>] WITH (STATE = ON) ; GO
创建审核规范
创建服务器审计后,您可以使用以下代码创建服务器审计规范,以记录服务器级事件。此规范决定在服务器审计期间要检查的内容。有关语法、参数和示例,请参阅 Microsoft SQL Server 文档
--Creating server audit specification USE [master] GO CREATE SERVER AUDIT SPECIFICATION [Audit-Spec-<<servername>>] FOR SERVER AUDIT [Audit-<<servername>>] ADD (FAILED_LOGIN_GROUP), ADD (SERVER_OBJECT_CHANGE_GROUP) GO --Enables the audit ALTER SERVER AUDIT [Audit-<<servername>>] WITH (STATE = ON); GO
您可以使用以下代码创建记录数据库级事件的数据库审计规范。此示例审计 INSERT 操作。有关语法、参数和更多示例,请参阅 Microsoft SQL Server 文档
--Creating database audit specification USE [<<DBName>>] GO CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-<<DBName>>] FOR SERVER AUDIT [Audit-<<ServerName>>] ADD (INSERT ON DATABASE::[<<DBName>>] BY [dbo]) WITH (STATE = ON) GO
查看审核日志
使用以下查询查看审计日志。审计日志会保留在数据库实例中,直至将其上传到 Amazon S3。如果您为 SQLSERVER_AUDIT 选项启用保留,Amazon RDS 会将文件移入保留文件夹 D:\rdsdbdata\SQLAudit\transmitted。
您还可以通过将筛选条件更改为 D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit 来查看保留文件夹中的审计记录。
--Viewing audit logs SELECT * FROM msdb.dbo.rds_fn_get_audit_file ('D:\rdsdbdata\SQLAudit\*.sqlaudit' , default , default ) --Viewing audit logs in retention folder SELECT * FROM msdb.dbo.rds_fn_get_audit_file ('D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit' , default , default )
有关审计 SQL Server 数据库的其他选项,请参阅以下 AWS 和 Microsoft 文档:
-
SQL Server 扩展事件:请参阅 AWS 博客文章 Set up Extended Events in Amazon RDS for SQL Server
。 -
SQL Server 触发器:请参阅 Amazon RDS 文档中的创建对 Amazon RDS 事件触发的规则。
-
更改跟踪:请参阅 Microsoft SQL Server 文档中的 Track data changes
。 -
更改数据捕获:请参阅 Amazon RDS 文档中的使用更改数据捕获。
-
C2 审计模式参数:请参阅 Microsoft SQL Server 文档中的 c2 audit mode Server Configuration Option
。
监控
您可以使用 Amazon RDS 中的数据库活动流,将 SQL Server 审计事件与 Imperva、McAfee 和 IBM 的数据库活动监控工具集成。有关更多信息,请参阅 Amazon RDS 文档中的 Microsoft SQL Server 中的审计。