将 Amazon QLDB 替换为 Amazon Aurora PostgreSQL 用于审计用例
用 Amazon Aurora PostgreSQL 替代 Amazon QLDB 以满足审计需求
由 Dan Blaner 发表于 2024 年 7 月 18 日,来源于 Amazon Aurora,Amazon 量子分类帐数据库 (Amazon QLDB),中级 (200),PostgreSQL 相容,技术操作指南。永久连结评论 分享
主要要点
Amazon QLDB 提供完整且可验证的交易历史,适用于高完整性的审计需求。Amazon Aurora PostgreSQL 可以作为 QLDB 的替代方案,具备多项功能以支援审计。提供的解决方案包括使用 pgAudit 和 Database Activity Streams 进行记录与长期数据保存。Amazon 量子分类帐数据库 (Amazon QLDB) 是一个完全管理的分类帐数据库服务,提供所有交易的完整且可验证历史。Amazon QLDB 的核心是日志,它是一个附加只能的数据结构,包含按顺序排列的不可变交易记录,这些记录以区块形式存储。区块使用加密散列链接在一起,提供了交易数据的完整性。这些特性不可变性和加密可验证性是 Amazon QLDB 的独特之处,使客户能够获得高完整性的数据审计和变更历史。
在本文中,我们将讨论如何使用Amazon Aurora PostgreSQL 相容版本作为 Amazon QLDB 的替代项,以及 Amazon Aurora PostgreSQL 能够替代一些 QLDB 独特功能的特性。
替代日志功能
在 Amazon QLDB 中,基础日志存储所有已提交交易的不可变记录,包括查询语句和数据定义命令。日志的交易历史可以导出到 Amazon S3 桶中,并可用于审计目的。然而,Amazon Aurora PostgreSQL 不会保留永久的不可变更改记录,该历史记录必须生成审计数据并存储在数据库之外。
Amazon Aurora PostgreSQL 支持使用开源审计日志扩展 pgAudit,该扩展提供比 PostgreSQL 标准日志更细粒度的会话和对象审计日志。您可以选择审计的事件,包括 DDL 操作、读取操作、写入操作、角色和权限变更、函数执行以及用户发起的操作如清理和检查点。日志输出发送至标准的 postgreslog 文件,该文件可以从 Amazon RDS 控制台中访问,并且可保留最多 7 天。为了永久保留审计日志数据,您可以配置 Aurora 集群以将日志发送到 Amazon CloudWatch 日志,在那里可以无限期保留。 Amazon CloudWatch 日志 提供日志的查询、监控、警报和管理功能,并对日志文件进行静态加密。您可以使用 AWS 身份与访问管理 管理 CloudWatch 中的日志访问,包括限制删除日志的能力。
对于审计人员而言,CloudWatch 日志可能是一个难以使用的介面来进行数据库审计。帖子使用 Amazon S3 和 Amazon Athena 构建中心化审计数据收集提供了一个解决方案,使审计人员可以轻松查询审计数据。该解决方案使用 Amazon Data Firehose 将数据库日志从 CloudWatch 日志发送到 Amazon S3,以便使用 SQL 进行查询,如下图所示。
替代历史记录功能
Amazon QLDB的history()函数能够访问表中每条记录的所有修订版本,让用户能够查看数据记录随时间如何变化。您可以使用审计表来模拟这一功能,审计表存储对其他表中行变更的副本。
常规的审计表设计是建立一个结构与被审计的表相似的表。每当主表进行 INSERT、UPDATE 或 DELETE 时,触发器会将修改的行副本发送到审计表中。该方法的变体将审计行存储为 JSON,这样就不需要改变审计表的结构以应对源表结构变更。表的权限设定为禁止对审计表中的行进行修改,设计如下图所示。
该方法与 Amazon QLDB 的历史记录的不同之处在于,在正确的权限设置下,用户可以修改审计表中的数据。审计数据访问权限的审核对于维护审计表中的数据完整性至关重要。将审计表分离到一个安全的专用审计数据库中,可以消除这一问题并提高对审计数据的信任。帖子为 Amazon Aurora PostgreSQL 表创建审计跟踪提供了一个解决方案,它利用 AWS 数据库迁移服务 (AWS DMS) 捕获源数据库的变更,并安全地将其存储在审计数据库中,如下图所示。
飞鱼加速npv替代 Amazon QLDB 流
Amazon QLDB 流提供近乎即时的分类帐事件馈送到 Amazon Kinesis 数据流。流记录包含对分类帐的数据更新和执行的查询语句记录。您可以使用流将数据从分类帐复制到其他系统,并实时分析流事件以识别可疑活动或对关键表或数据的更改。
数据复制
在使用 Aurora 作为主数据库时,您可以使用 AWS DMS 将数据从 Aurora 复制到其他系统。AWS DMS 不仅支持一次性数据迁移,还支持通过改变数据捕获 (CDC) 进行持续的数据复制到一个或多个目标数据库。与通过 Amazon QLDB 流复制数据不同,通过 AWS DMS 从 Amazon Aurora PostgreSQL 复制数据不需要自定义编码,AWS DMS 使用声明式的 JSON 语法来映射和转换源与目标数据库之间的数据。
近即时审计
要使用 Amazon Aurora PostgreSQL 获得近即时审计能力,您可以使用数据库活动流。数据库活动流提供来自 Aurora 集群的低层次审计信息的即时馈送到 Kinesis 数据流。与 Amazon QLDB 流类似,您可以构建自定义的 Kinesis 数据流消费者,以过滤、分析和处理审计事件。数据库活动流捕获的审计数据点范围比 Amazon QLDB 提供的更广。Aurora 报告 DML 和 DDL 事件,还报告连接、角色和权限的变更、函数执行以及用户主导的操作如清理和检查点。数据库活动流与 Amazon QLDB 流的一个主要区别在于,Amazon QLDB 仅报告已提交交易的操作,因此用户有可能在读取后取消交易,进而未被检测到。而 Aurora 报告所有动作,包括未提交的交易。
数据库活动流提供了可信的数据库管理员活动日志。为 Aurora 集群启用活动流是在数据库外执行的,并且对该操作的访问由 IAM 权限控制,而非数据库权限。数据库管理员无法干扰审计数据的收集或其发布进入 Kinesis 数据流,他们也无法访问 Kinesis 数据流内的审计数据。
在 Amazon QLDB 中,基础日志存储所有已提交交易的不可变记录,日志的交易历史可以随时通过查询表的 history() 函数或通过 Kinesis 数据流重新流式传输访问。这一功能在数据库活动流中并不存在;一旦流式的审计数据过期,数据就不再可用。要保留审计数据,您可以使用 Amazon Data Firehose 将流式的审计事件存储到 Amazon S3 中,这样可以无限期保留。帖子筛选 Amazon Aurora 数据库活动流数据以进行分隔和监控提供了一个解决方案,用于筛选审计事件并通过 Firehose 发送到 Amazon S3,以实现长期保存。
有关使用 pgAudit 和 Aurora 数据库活动流进行审计的更多信息,请参见第 1 部分:使用数据库活动流和 pgAudit 审计 Aurora PostgreSQL 数据库。
总结
在本文中,我们演示了 Amazon Aurora PostgreSQL 的功能,这些功能可替代一些 Amazon QLDB 提供的独特能力,以满足审计需求。
在我们的下一篇文章中,将 Amazon QLDB 分类帐迁移到 Aurora PostgreSQL,我们将提供帮助您将数据从 Amazon QLDB 分类帐迁移到 Amazon Aurora PostgreSQL 的解决方案。
如需帮助规划您的分类帐迁移或决定 Amazon Aurora PostgreSQL 是否是您分类帐数据的正确目的地,请联系您的 AWS 代表。

关于作者
Dan Blaner 是一位专注于分类帐和关系型数据库的首席解决方案架构师。他喜欢学习、解决问题,并帮助他人找到解决方案。在空闲时间,他演奏电子低音,并乐于与好友们制作音乐。