我如何在 Amazon Redshift 数据库集群中使用日志跟踪活动?

上次更新时间:2019 年 4 月 16 日

我如何在我的 Amazon Redshift 集群上执行数据库审计?

简短描述

Amazon Redshift 提供三个日志记录选项:

  • 审计日志:存储在 Amazon Simple Storage Service (Amazon S3) 存储桶中
  • STL 表:存储在集群中的每个节点上
  • AWS CloudTrail:存储在 Amazon S3 存储桶中

审计日志和 STL 表记录数据库级别的活动,如哪些用户登录及其登录时间,以及这些用户在何时执行了哪些 SQL 活动。CloudTrail 跟踪服务级别的活动。

注意:要使用外部表查看日志,请使用 Amazon Redshift Spectrum。有关更多信息,请参阅使用 Amazon Redshift Spectrum 分析数据库审计日志以确保安全性和合规性

解决方法

审计日志和 STL 表

下表比较了审计日志和 STL 表。选择适合您的使用案例的日志记录选项。

审计日志 STL 表
必须启用。要启用审计日志记录,请遵循使用控制台配置审计使用 Amazon Redshift CLI 和 API 配置审计的步骤。 在数据仓库集群中的每个节点上自动可用。
除非您定义 Amazon S3 生命周期规则以自动存档或删除文件,否则审计日志文件将无限期存储。有关更多信息,请参阅对象生命周期管理 日志历史记录存储 2 到 5 天,具体取决于日志使用情况和可用磁盘空间。要延长保留期,请使用 GitHub 上的 AWS 实验室 Amazon Redshift 系统对象持久化实用工具
访问审计日志文件不需要 Amazon Redshift 数据库访问权限。 访问 STL 表需要 Amazon Redshift 数据库访问权限。
查看 Amazon S3 中存储的日志不需要数据库计算资源。 对 STL 表运行查询需要数据库计算资源,就和运行其他查询一样。
使用时间戳可以关联进程 ID 和数据库活动。集群重启不影响 Amazon S3 中的审计日志。 因为进程 ID 在集群重启时可能回收,所以不一定总能够关联进程 ID 和数据库活动。

在以下日志文件中存储信息:

多个表中存储信息。使用下面的表查看 S3 审计日志中存储的类似信息:
  • SVL_STATEMENTTEXT:提供在系统中已运行的 SQL 命令的完全记录。组合 STL_DDLTEXT、STL_QUERYTEXT 和 STL_UTILITYTEXT 表中的所有行。
  • STL_CONNECTION_LOG:记录身份验证尝试、连接或断开连接。
用户活动日志中记录所有 SQL 语句。 执行的查询记录在 STL_QUERY 中。DDL 语句记录在 STL_DDLTEXT 中。非 SELECT SQL 命令的文本记录在 STL_UTILITYTEXT 中。
Amazon Redshift 一接收到语句就进行记录,但 Amazon S3 上的文件是成批更新的,需要几个小时才会显示。 日志是在每条 SQL 语句执行之后生成的。
记录谁执行了什么操作,该操作何时发生,不记录该操作执行了多少时间。 使用 STARTTIME 和 ENDTIME 列确定活动多少时间完成。要确定是哪个用户执行了操作,请组合使用 SVL_STATEMENTTEXT (userid) 和 PG_USER (usesysid)。
您需要为日志在 Amazon S3 中使用的存储付费。 STL 表存储不需要额外的费用。
记录​仅领导节点查询 不记录仅领导节点查询。

CloudTrail

利用 CloudTrail 收集的信息,您可以确定对 AWS 服务成功发出的请求、发出请求的用户和时间等。有关更多信息,请参阅使用 AWS CloudTrail 记录 Amazon Redshift API 调用

除非您定义生命周期规则以自动存档或删除文件,否则 CloudTrail 日志文件将在 Amazon S3 中无限期存储。有关更多信息,请参阅对象生命周期管理


这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?