企业文化

通过自动化Amazon RDS安全审计日志导出过程来确保GxP合规性 数据库博客


通过自动化 Amazon RDS 安全审计日志导出过程确保 GxP 合规性

作者:Suresh Poopandi、Abhay Kumar 和 Mansoor Khan,发表于 2023 年 11 月 20 日分类:高级300、Amazon RDS、最佳实践、技术如何做永久链接评论区

关键要点

数据库审计日志是纪录数据库活动和事件的重要工具,提供了对用户交互和系统变更的详细追踪。合规性在制药、生物技术和医疗健康等行业至关重要,自动化审计日志导出过程有助于提高安全性并简化合规工作。本文提供了一种自动启用和捕获 Amazon RDS 审计日志的解决方案,适用于多种数据库引擎。

数据库审计日志是记录数据库系统内部发生的活动和事件的记录。这些日志捕获有关用户交互、系统变更和数据修改的详细信息,为数据库执行的操作提供了全面的追踪。通过仔细维护这些活动的记录,组织可以获得关于谁访问了数据库、采取了哪些操作以及这些操作何时发生的宝贵洞见。

数据库审计日志作为证据,表明组织遵循合规要求,显示出适当的安全措施已到位并得到积极监控。在制药、生物技术和医疗等受监管行业,遵守良好实践GxP指南至关重要。GxP 合规性的一个关键方面是确保数据的安全性和完整性。本文探讨了 Amazon 关系数据库服务Amazon RDS审计日志在 GxP 环境中的重要性,并讨论了自动化日志导出过程如何提升安全性,同时简化合规工作。

国外梯子

挑战

在一个拥有多个 AWS 账户并托管多种工作负载的大型组织中,中央治理团队负责在其管理的所有 AWS 账户中实施 RDS 审计日志过程。启用所有数据库的 RDS 审计日志时,会面临以下额外挑战:

多样的数据库引擎和版本 不同的引擎在审计日志配置上需要不同的方法。中央治理团队需平衡这些不同的配置,确保审计日志符合所有数据库环境的安全标准。自动执行数据库审计日志启用 在各数据库上自动启用审计日志需要精心编排,以避免干扰。中央团队必须设计出能考虑每个数据库复杂性的自动化流程,同时确保强制执行不会意外影响关键操作。日志保留和存储成本 启用审计日志后,日志的累积不可避免,随着日志的增加,存储费用也会随之上涨。需要仔细考虑适当的保留期限,优化存储成本。制定与合规要求和业务需求对齐的保留政策便是一项精确的任务。

在本文中,我们展示了一种解决方案,以自动化启用、捕获和存档 RDS 审计日志,适用于 Amazon Aurora MySQL 兼容版、Amazon Aurora PostgreSQL 兼容版、Amazon RDS for MySQL、Amazon RDS for PostgreSQL、Amazon RDS for SQL Server、Amazon RDS for MariaDB 和 Amazon RDS for Oracle。

解决方案概述

本文结合链接的 开源仓库,提供了一种全面的解决方案,以实现基于 AWS 无服务器 服务的完全自动化 RDS 审计日志启用。

一个 AWS CloudFormation 模板用于工作负载账户,作为栈,通过 CloudFormation StackSets 的能力有效部署到所有工作负载账户。这种和谐的部署方法在配置过程中带来了一致性,减少了管理复杂性,并促进了环境的一致性。

在该架构的核心是 RDS 审计日志自定义 API。这个关键组件由治理团队引入到中央或治理账户中。它由一组 AWS Lambda 函数组成,这些组件通过 AWS Step Functions 的能力进行编排。

治理团队使用 RDS 审计日志自定义 API 来管理工作负载账户,这些账户托管 Amazon RDS 实例。这些工作负载账户通常归属于特定的 组织单位。要部署解决方案,需要指定治理账户编号和组织单位集。

以下图示说明了解决方案架构。

图:RDS 审计日志解决方案架构

工作流程步骤如下:

触发 RDS 实例创建的事件 在工作负载账户中,Amazon EventBridge 规则会在每次创建 RDS 实例时触发基于本解决方案开发的自定义审计日志 API。审计日志 API 启动 Step Functions 工作流,启用数据库审计日志并等待成功启用。启用审计日志的 Lambda 函数描述预配的数据库实例,并从 AWS Secrets Manager 中读取关于管理员用户密码的秘钥,与数据库实例建立连接。该函数还会读取与 DB 实例相关的 参数组 和 选项组,并更新启用审计日志的参数。数据库引擎将用户活动记录到 Amazon CloudWatch 日志中作为数据库审计日志。当数据库引擎将第一条记录写入 CloudWatch 日志流时,会创建一个新的日志流。此 CloudWatch 日志流创建事件会触发 Lambda 函数。该函数创建一个新的 Firehose 交付流,将日志从 CloudWatch 流传输到 Amazon S3。Amazon Kinesis 数据 Firehose 从 CloudWatch 日志流读取审计日志,并将数据写入 Amazon 简单存储服务 (Amazon S3)。Amazon RDS for SQL Server 可以使用内置的 SQL Server 审计机制 将审计日志上传到 Amazon S3。默认情况下,CloudWatch 日志会被无限期保留,永不过期。您可以通过选择 10 年到 1 天之间的保留期来调整日志组的保留策略。为了降低成本,本解决方案将 CloudWatch 日志的保留期配置为 1 天。为了优化存储在 S3 上的日志成本,您可以配置 Amazon S3 生命周期策略 或利用 S3 IntelligentTiering 存储类。

该架构设计中的关键组件如上图所示包括:

RDS 审计日志自定义 API Lambda 函数旨在收集有关 RDS 实例或集群的基本信息。它作为启用审计日志工作流的启动器,触发所需的步骤。RDS 审计日志工作流 此 Step Functions 状态机协调启用审计日志 Lambda 函数与验证审计日志函数之间的步骤。由于启用审计日志需要数据库重启,此工作流将在下一个维护窗口内等待重启数据库实例。这可能导致启用和验证函数之间的等待时间较长。Step Functions 状态会通过 简单通知服务Amazon SNS主题通知审计日志启用的成功与失败。

由于启用审计日志的选项根据数据库引擎类型不同而异,此 Lambda 函数会自动检测并应用适当的设置。例如,RDS MySQL 57 需要添加 MARIADBAUDITPLUGIN 选项并配置 ServerAUDITEVENTS 设置。

验证审计日志 该 Lambda 函数负责验证数据库在重启或维护窗口后是否成功应用了参数组。同时确保重启后的正确配置验证。启用审计日志 该 Lambda 函数配置参数组或选项组,并执行一组 SQL 语句,以启用 RDS 数据库实例将审计日志流传输到 CloudWatch Logs 或 S3。在对数据库执行 SQL 语句之前,该 Lambda 函数读取存储在 AWS Secrets Manager 中的数据库管理员凭证。Amazon RDS for SQL Server 引擎直接将日志发送到 S3 存储桶。然而,其他数据库引擎则将日志发送到 CloudWatch 日志组,Kinesis Firehose 将日志从 CloudWatch 日志组导出到 S3。审计日志自动化 CloudFormation 模板 CloudFormation 模板包含以下两个资源:RDS 实例创建 EventBridge 规则 此规则作为 RDS 审计日志 API Lambda 函数的触发机制,存放于治理账户中。每当工作负载账户内创建新的 RDS 实例或集群时激活。创建 Firehose Lambda 函数 该 Lambda 函数在工作负载账户中创建 Kinesis 数据 Firehose 交付流,启用 CloudWatch 日志组到 S3 存储桶的审计日志流传输。该函数的激活由启用审计日志 Lambda 函数在特定命名模式下创建新的日志组触发。

接下来的部分,我们详细说明在您的环境中实现该解决方案的两步过程。

前提条件

该解决方案要求在治理账户中部署一个 Lambda 函数,用于在工作负载账户中运行启用审计的 SQL 查询。以下配置应已到位,以确保 RDS 审计日志 API 正常工作:

通过自动化Amazon RDS安全审计日志导出过程来确保GxP合规性 数据库博客托管审计启用 Lambda 函数的治理账户的 VPC 必须通过 VPC 对等连接 或 AWS Transit Gateway 具备与所有托管 RDS 数据库实例的工作负载账户的 VPC 连接。所有 RDS 数据库实例应有一个安全组,允许从托管在治理账户上的 Lambda 函数的适当端口的入站连接。

安装 RDS 审计日志 API

要在指定的治理账户中安装 RDS 审计日志 API,请按照以下步骤操作:

确保您的部署环境中已安装 docker 和 Serverless 框架。这两个组件是部署该解决方案所必需的。克隆位于 GitHub 仓库 中的源代码。修改根目录中的 deploymentconfigyml 文件,以具有适当的 VPC、安保组、子网和 S3 存储桶名称的资源值。运行以下命令以在治理账户中安装 API:

shell serverless deploy

配置工作负载账户

此步骤涉及使用提供的审计日志自动化 CloudFormation 模板创建 CloudFormation StackSet。使用以下命令:

shellaws cloudformation createstackset stacksetname YourStackSetName templatebody file//auditlogautomationworkloadaccountsyml parameters ParameterKey=GovernanceAccountIdParameterValue=ltGovernance Account Number(12digit)gt

测试解决方案

要验证 RDS 审计日志解决方案的功能,使用以下 Boto3 代码片段。此代码会启动在指定工作负载账户中创建一个 RDS for MySQL 实例的动作。该操作是激活审计日志工作流的催化剂。

pythonimport boto3conn = boto3client(rds)

response = conncreatedbinstance( AllocatedStorage=10 DBName=test DBInstanceIdentifier=mysql59069 DBInstanceClass=dbt3medium Engine=mysql MasterUsername=root Port=3306 VpcSecurityGroupIds=[] ManageMasterUserPassword=True )

以下屏幕截图展示了治理账户中 Step Functions 状态机的成功启动。此激活促使为最近建立的数据库实例启用审计日志。

在成功激活目标数据库实例的审计日志后,Step Functions 状态机会输出正面响应,确认审计日志已成功启用。

以下屏幕截图通过显示选项组与最近建立的数据库的关联,确认了审计日志激活的完成。

RDS for MySQL 数据库已开始将其审计日志导出到指定的 CloudWatch 日志组。您可以通过 CloudWatch 控制台导航至日志组以获取详细信息。

日志流显示日志事件的详细信息。

在 Amazon S3 控制台中,您可以确认 Kinesis 数据 Firehose 已成功将日志从 CloudWatch 日志组转移到 S3 存储桶中。

清理

请按照以下说明删除本解决方案创建的资源。配置您的无服务器框架指向治理账户并运行以下命令。

shellserverless remove

该命令将删除在治理账户中部署的 RDS 审计日志自定义 API。

运行以下 AWS CLI 命令针对组织的根账户。

shellaws cloudformation deletestackset stacksetname mystackset YourStackSetName

该命令将删除在工作负载账户中创建的资源。

如果您在工作负载账户中创建了任何用于测试的 Amazon RDS 实例,则还需要将其删除。

结论

符合 GxP 的组织必须积极维护其敏感信息,以应对快速变化的数据安全和合规环境。自动化 RDS 安全审计日志导出过程是实现安全 GxP 合规的重要步骤。本文提出了一种利用 AWS 无服务器服务自动化审计日志的解决方案。通过这种自动化,组织可以实现实时日志收集、准确数据分析和简化合规