

# 使用数据库活动流监控 Amazon RDS
<a name="DBActivityStreams"></a><a name="das"></a>

通过使用数据库活动流，您可以监控近乎实时的数据库活动流。

**Topics**
+ [数据库活动流概览](#DBActivityStreams.Overview)
+ [为 Oracle 数据库配置统一审计](DBActivityStreams.configuring-auditing.md)
+ [为 Amazon RDS for Microsoft SQL Server 配置审计策略](DBActivityStreams.configuring-auditing-SQLServer.md)
+ [启动数据库活动流](DBActivityStreams.Enabling.md)
+ [修改 Amazon RDS 的数据库活动流](DBActivityStreams.Modifying.md)
+ [获取数据库活动流的状态](DBActivityStreams.Status.md)
+ [停止数据库活动流](DBActivityStreams.Disabling.md)
+ [监控数据库活动流](DBActivityStreams.Monitoring.md)
+ [数据库活动流的 IAM 策略示例](DBActivityStreams.ManagingAccess.md)

## 数据库活动流概览
<a name="DBActivityStreams.Overview"></a>

作为 Amazon RDS 数据库管理员，您需要保障数据库的安全，并满足合规性和法规要求。一种策略是集成数据库活动流与监控工具。通过这种方式，您可以在数据库中监控审计活动并相应设置警报。

安全威胁既可以来自外部，也可以来自内部。要防范内部威胁，您可以通过配置数据库活动流功能控制管理员对数据流的访问。Amazon RDS 数据管理员无权收集、传输、存储和处理流。

**Contents**
+ [数据库活动流的工作原理](#DBActivityStreams.Overview.how-they-work)
+ [Oracle 数据库和 Microsoft SQL Server 数据库中的审计](#DBActivityStreams.Overview.auditing)
  + [Oracle 数据库中的统一审计](#DBActivityStreams.Overview.unified-auditing)
  + [Microsoft SQL Server 中的审计](#DBActivityStreams.Overview.SQLServer-auditing)
  + [Oracle 数据库和 SQL Server 的非原生审计字段](#DBActivityStreams.Overview.unified-auditing.non-native)
  + [数据库参数组覆盖](#DBActivityStreams.Overview.unified-auditing.parameter-group)
+ [数据库活动流的异步模式](#DBActivityStreams.Overview.sync-mode)
+ [数据库活动流的要求和限制](#DBActivityStreams.Overview.requirements)
+ [区域和版本可用性](#DBActivityStreams.RegionVersionAvailability)
+ [数据库活动流支持的数据库实例类](#DBActivityStreams.Overview.requirements.classes)

### 数据库活动流的工作原理
<a name="DBActivityStreams.Overview.how-they-work"></a>

Amazon RDS 会近乎实时地将活动推送到 Amazon Kinesis 数据流。系统将自动创建 Kinesis 流。在 Kinesis 中，您可以配置 Amazon 服务（如 Amazon Data Firehose）和 Amazon Lambda 来使用 Kinesis 流并存储数据。

**重要**  
使用 Amazon RDS 中的 数据库活动流功能是免费的，但 Amazon Kinesis 会针对数据流收费。有关更多信息，请参阅 [Amazon Kinesis Data Streams 定价](https://www.amazonaws.cn/kinesis/data-streams/pricing/)。

您可以为合规性管理配置应用程序，以使用数据库活动流。这些应用程序可以使用流生成警报，并审计数据库上的活动。

Amazon RDS 在多可用区部署中支持数据库活动流。在这种情况下，数据库活动流会审计主实例和备用实例。

### Oracle 数据库和 Microsoft SQL Server 数据库中的审计
<a name="DBActivityStreams.Overview.auditing"></a>

审计是监控和记录已配置的数据库操作。Amazon RDS 在默认情况下不捕获数据库活动。您可自行在数据库中创建和管理审核策略。

**Topics**
+ [Oracle 数据库中的统一审计](#DBActivityStreams.Overview.unified-auditing)
+ [Microsoft SQL Server 中的审计](#DBActivityStreams.Overview.SQLServer-auditing)
+ [Oracle 数据库和 SQL Server 的非原生审计字段](#DBActivityStreams.Overview.unified-auditing.non-native)
+ [数据库参数组覆盖](#DBActivityStreams.Overview.unified-auditing.parameter-group)

#### Oracle 数据库中的统一审计
<a name="DBActivityStreams.Overview.unified-auditing"></a>

在 Oracle 数据库中，*统一审核策略*是一组已命名的审核设置，可用于审核某个方面的用户行为。策略可以是简单的审计单个用户的活动。您还可以创建使用条件的复杂审核策略。

Oracle 数据库将审计记录（包括 `SYS` 审计记录）写入*统一审计跟踪记录*。例如，如果在 `INSERT` 语句期间发生错误，标准审计会指示错误编号和所运行的 SQL。审计跟踪记录位于 `AUDSYS` 架构的只读表中。要访问这些记录，请查询 `UNIFIED_AUDIT_TRAIL` 数据词典视图。

通常，您可以按如下方式配置数据库活动流：

1. 使用 `CREATE AUDIT POLICY` 命令创建 Oracle 数据库审核策略。

   Oracle 数据库会生成审计记录。

1. 使用 `AUDIT POLICY` 命令激活审核策略。

1. 配置数据库活动流。

   仅捕获与 Oracle 数据库审核策略匹配的活动，并将其发送到 Amazon Kinesis 数据流。启用数据库活动流后，Oracle 数据库管理员无法更改审核策略或删除审核日志。

要了解有关统一审核策略的更多信息，请参阅 *Oracle Database 安全指南*中的[关于使用统一审核策略和审核审核活动](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-2435D929-10AD-43C7-8A6C-5133170074D0)。

#### Microsoft SQL Server 中的审计
<a name="DBActivityStreams.Overview.SQLServer-auditing"></a>

数据库活动流使用 SQLAudit 功能审计 SQL Server 数据库。

RDS for SQL Server 实例包含以下各项功能：
+ 服务器审计 – SQL Server 审计收集服务器或数据库级操作的单个实例以及一组要监视的操作。服务器级审计 `RDS_DAS_AUDIT` 和 `RDS_DAS_AUDIT_CHANGES` 由 RDS 管理。
+ 服务器审计规范 - 服务器审计规范记录服务器级别的事件。您可以修改 `RDS_DAS_SERVER_AUDIT_SPEC` 规范。该规范链接到服务器审计 `RDS_DAS_AUDIT`。`RDS_DAS_CHANGES_AUDIT_SPEC` 规范由 RDS 管理。
+ 数据库审计规范 - 数据库审计规范记录数据库级别的事件。您可以创建数据库审计规范 `RDS_DAS_DB_<name>` 并将其链接到 `RDS_DAS_AUDIT` 服务器审计。

您可以使用控制台或 CLI 配置数据库活动流。通常，您可以按如下方式配置数据库活动流：

1. （可选）使用 `CREATE DATABASE AUDIT SPECIFICATION` 命令创建数据库审计规范并将其链接到 `RDS_DAS_AUDIT` 服务器审计。

1. （可选）使用 `ALTER SERVER AUDIT SPECIFICATION` 命令修改服务器审计规范并定义策略。

1. 激活数据库和服务器审核策略。例如：

   `ALTER DATABASE AUDIT SPECIFICATION [<Your database specification>] WITH (STATE=ON)`

   `ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC] WITH (STATE=ON)`

1. 配置数据库活动流。

   仅捕获与服务器和数据库审核策略匹配的活动，并将其发送到 Amazon Kinesis 数据流。启用数据库活动流且锁定策略后，数据库管理员无法更改审核策略或删除审核日志。
**重要**  
如果启用了特定数据库的数据库审计规范并且策略处于锁定状态，则无法删除该数据库。

有关 SQL Server 审计的更多信息，请参阅《Microsoft SQL Server 文档》**中的 [SQL Server 审计组件](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16)。



#### Oracle 数据库和 SQL Server 的非原生审计字段
<a name="DBActivityStreams.Overview.unified-auditing.non-native"></a>

启动数据库活动流时，每个数据库事件都会生成相应的活动流事件。例如，数据库用户可能会运行 `SELECT` 和 `INSERT` 语句。数据库会审计这些事件并将结果发送到 Amazon Kinesis 数据流。

活动流中的事件表示为 JSON 对象。JSON 对象包含一个 `DatabaseActivityMonitoringRecord`，其中包含一个 `databaseActivityEventList` 数组。数组中的预定义字段包括 `class`、`clientApplication` 和 `command`。

默认情况下，活动流不包括原生引擎审计字段。您可以配置 Amazon RDS for Oracle 和 SQL Server，使其在 `engineNativeAuditFields` JSON 对象中包含这些额外的字段。

在 Oracle 数据库中，统一审计跟踪中的大多数事件都映射到 RDS 数据活动流中的字段。例如，统一审计中的 `UNIFIED_AUDIT_TRAIL.SQL_TEXT` 字段映射到数据库活动流中的 `commandText` 字段。但是，Oracle 数据库审计字段（如 `OS_USERNAME`）不映射到数据库活动流中的预定义字段。

在 SQL Server 中，SQLAudit 记录的大多数事件字段都映射到 RDS 数据库活动流中的字段。例如，来自审计中 `sys.fn_get_audit_file` 的 `code` 字段映射到数据库活动流中的 `commandText` 字段。但是，SQL Server 数据库审计字段（如 `permission_bitmask`）不映射到数据库活动流中的预定义字段。

有关 databaseActivityEventList 的更多信息，请参阅[数据库活动流的 databaseActivityEventList JSON 数组](DBActivityStreams.AuditLog.databaseActivityEventList.md)。

#### 数据库参数组覆盖
<a name="DBActivityStreams.Overview.unified-auditing.parameter-group"></a>

通常，您可以通过附加参数组来打开 RDS for Oracle 中的统一审计。但是，数据库活动流需要额外的配置。为了改善您的客户体验，Amazon RDS 执行以下操作：
+ 如果激活活动流，RDS for Oracle 将忽略参数组中的审计参数。
+ 如果停用活动流，RDS for Oracle 将停止忽略审计参数。

SQL Server 的数据库活动流与您在 SQL 审计选项中设置的任何参数均无关。

### 数据库活动流的异步模式
<a name="DBActivityStreams.Overview.sync-mode"></a>

Amazon RDS 中的活动流始终是异步的。当数据库会话生成活动流事件时，会话将立即返回到正常活动。在后台，Amazon RDS 使活动流事件成为持久记录。

如果后台任务出错，则 Amazon RDS 将生成事件。此事件指示活动流事件记录可能已丢失的任何时间段的开始和结束时间。异步模式可提高数据库性能，而不是活动流的准确性。

### 数据库活动流的要求和限制
<a name="DBActivityStreams.Overview.requirements"></a>

在 RDS 中，数据库活动流具有以下要求和限制：
+ 数据库活动流需要使用 Amazon Kinesis。
+ 数据库活动流需要使用 Amazon Key Management Service (Amazon KMS)，因为这些活动流始终是加密的。
+ 对 Amazon Kinesis 数据流应用额外加密与数据库活动流不兼容，因为数据库活动流已使用 Amazon KMS 密钥进行了加密。
+ 您可自行创建和管理审核策略。与 Amazon Aurora 不同，RDS for Oracle 默认不捕获数据库活动。
+ 您可自行创建和管理审核策略或规范。与 Amazon Aurora 不同，Amazon RDS 在默认情况下不捕获数据库活动。
+ 在多可用区部署中，仅在主数据库实例上启动数据库活动流。该活动流会自动审计主数据库实例和备用数据库实例。失效转移期间无需执行其他步骤。
+ 重命名数据库实例不会创建新的 Kinesis 流。
+ RDS for Oracle 不支持 CDB。
+ 不支持只读副本。

### 区域和版本可用性
<a name="DBActivityStreams.RegionVersionAvailability"></a>

功能可用性和支持因每个数据库引擎的特定版本以及 Amazon Web Services 区域而异。有关适用于数据库活动流的版本和区域可用性的更多信息，请参阅[支持 Amazon RDS 中数据库活动流的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.DBActivityStreams.md)。

### 数据库活动流支持的数据库实例类
<a name="DBActivityStreams.Overview.requirements.classes"></a>

对于 RDS for Oracle，您可以将数据库活动流与以下数据库实例类一起使用：
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5.\$1large.tpc\$1.mem\$1x
+ db.r5b.\$1large
+ db.r5b.\$1large.tpc\$1.mem\$1x
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.r6i.\$1large.tpc\$1.mem\$1x
+ db.x2idn.\$1large
+ db.x2iedn.\$1large
+ db.x2iezn.\$1large
+ db.z1d.\$1large

对于 RDS for SQL Server，您可以将数据库活动流与以下数据库实例类一起使用：
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5b.\$1large
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.x1e.\$1large
+ db.x2iedn.\$1large
+ db.z1d.\$1large

有关实例类类型的更多信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。