

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 数据库审计日志记录
<a name="db-auditing"></a>

Amazon Redshift 记录您的数据库中的连接和用户活动相关信息。这些日志有助于您监控数据库以确保安全并进行故障排除，该流程称为*数据库审计*。可以存储日志的位置包括：
+ *Amazon S3 存储桶* - 这为负责监控数据库中活动的用户提供了访问权限以及数据安全功能。
+ *Amazon CloudWatch* - 您可以使用 CloudWatch 中内置的功能（例如可视化功能和设置操作）查看审计日志记录数据。

**注意**  
[SYS\$1CONNECTION\$1LOG](https://docs.amazonaws.cn/redshift/latest/dg/SYS_CONNECTION_LOG.html) 收集 Amazon Redshift Serverless 的连接日志数据。请注意，当您收集 Amazon Redshift Serverless 的审计日志记录数据时，无法将其发送到日志文件，只能发送到 CloudWatch。

**Topics**
+ [Amazon Redshift 日志](#db-auditing-logs)
+ [审计日志和 Amazon CloudWatch](#db-auditing-cloudwatch-provisioned)
+ [启用审计日志记录](db-auditing-console.md)
+ [安全日志记录](db-auditing-secure-logging.md)

## Amazon Redshift 日志
<a name="db-auditing-logs"></a>

Amazon Redshift 在以下日志文件中记录信息：
+ *连接日志* – 记录身份验证尝试以及连接与断开连接。
+ *用户日志* – 记录与数据库用户定义更改相关的信息。
+ *用户活动日志* – 记录在数据库中运行之前的每个查询。

连接日志和用户日志主要用于实现安全性。您可以使用连接日志来监控连接到数据库的用户信息以及相关的连接信息。这些信息可能是他们的 IP 地址、发出请求的时间以及使用的身份验证类型等。您可以使用用户日志来监控数据库用户定义更改。

用户活动日志主要用于进行故障排除。它会跟踪用户及系统在数据库中执行的查询类型的相关信息。

连接日志和用户日志均对应于数据库的系统表中存储的信息。您可以使用系统表获取相同的信息，但日志文件可提供更简单的检索和查看机制。日志文件依赖 Simple Storage Service（Amazon S3）权限（而非数据库权限）针对表执行查询。此外，通过查看日志文件中的信息（而非查询系统表），您可以减少与数据库互动产生的任何影响。

**注意**  
日志文件没有系统日志表（即 [STL\$1USERLOG](https://docs.amazonaws.cn/redshift/latest/dg/r_STL_USERLOG.html) 和 [STL\$1CONNECTION\$1LOG](https://docs.amazonaws.cn/redshift/latest/dg/r_STL_CONNECTION_LOG.html)）那么新。早于 (但不包括) 最新记录的记录将被复制到日志文件。

**注意**  
对于 Amazon Redshift Serverless，[SYS\$1CONNECTION\$1LOG](https://docs.amazonaws.cn/redshift/latest/dg/SYS_CONNECTION_LOG.html) 收集连接日志数据。当您收集 Amazon Redshift Serverless 的审计日志记录数据时，无法将其发送到日志文件，只能发送到 CloudWatch。

### 连接日志
<a name="db-auditing-connection-log"></a>

记录身份验证尝试以及连接与断开连接。下表介绍了连接日志中的信息。有关这些字段的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [STL\$1CONNECTION\$1LOG](https://docs.amazonaws.cn/redshift/latest/dg/r_STL_CONNECTION_LOG.html)。有关为 Amazon Redshift Serverless 收集的连接日志数据的更多信息，请参阅 [SYS\$1CONCON\$1LOG](https://docs.amazonaws.cn/redshift/latest/dg/SYS_CONNECTION_LOG.html)。

[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/redshift/latest/mgmt/db-auditing.html)

### 用户日志
<a name="db-auditing-user-log"></a>

 记录数据库用户的以下更改的详细信息。
+ 创建用户
+ 删除用户
+ 更改用户（重命名）
+ 更改用户（更改属性）

[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/redshift/latest/mgmt/db-auditing.html)

查询 [SYS\$1USERLOG](https://docs.amazonaws.cn/redshift/latest/dg/SYS_USERLOG.html) 系统视图，以查找有关用户更改的更多信息。此视图包括来自 Amazon Redshift Serverless 的日志数据。

### 用户活动日志
<a name="db-auditing-user-activity-log"></a>

记录在数据库中运行之前的每个查询。

[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/redshift/latest/mgmt/db-auditing.html)

## 审计日志和 Amazon CloudWatch
<a name="db-auditing-cloudwatch-provisioned"></a>

 在 Amazon Redshift 中，原定设置情况下审计日志记录处于未启用状态。当您针对集群打开日志记录时，Amazon Redshift 将日志导出到 Amazon CloudWatch 中，或创建日志并将其上载到 Simple Storage Service (Amazon S3) 中，以捕获从启用审计日志记录的时间到当前时间的数据。每个日志记录更新都是以前日志的延续。

在 CloudWatch 或 Simple Storage Service (Amazon S3) 中存储审计日志记录是一个可选流程。记录到数据表并非可选流程，而会自动发生。有关系统表日志记录的更多信息，请参阅 Amazon Redshift 数据库开发人员指南中的[系统表参考](https://docs.amazonaws.cn/redshift/latest/dg/cm_chap_system-tables.html)。

您可以通过使用 Amazon Web Services 管理控制台、Amazon Redshift API 参考或 Amazon Command Line Interface (Amazon CLI) 一起启用连接日志、用户日志以及用户活动日志。对于用户活动日志，您还必须启用 `enable_user_activity_logging` 数据库参数。如果您仅启用审计日志记录功能，但不启用相关参数，则数据库审计日志将仅为连接日志和用户日志记录信息，而不为用户活动日志记录信息。`enable_user_activity_logging` 参数预设情况下未启用 (`false`)。您可以将它设置为 `true` 以启用用户活动日志。有关更多信息，请参阅 [Amazon Redshift 参数组](working-with-parameter-groups.md)。

在对 CloudWatch 启用日志记录后，Amazon Redshift 将集群连接、用户和用户活动日志数据导出到 Amazon CloudWatch Logs 日志组。就 架构 而言，日志数据不会改变。CloudWatch 专为监控应用程序而构建，您可以使用它来执行实时分析或将其设置为采取措施。还可以使用 Amazon CloudWatch Logs 在持久性存储中存储日志记录。

使用 CloudWatch 查看日志是在 Simple Storage Service (Amazon S3 )中存储日志文件的推荐替代方法。它不需要太多的配置，而且可能符合您的监控要求，尤其是如果您已经使用它来监控其他服务和应用程序。

### Amazon CloudWatch 中的日志组和日志事件
<a name="db-auditing-cloudwatch-provisioned-log-group"></a>

在选择要导出的 Amazon Redshift 日志后，您可以在 Amazon CloudWatch Logs 中监控日志事件。将使用以下前缀为 Amazon Redshift 无服务器自动创建新的日志组，其中 `log_type` 表示日志类型。

```
/aws/redshift/cluster/<cluster_name>/<log_type>
```

例如，如果您选择导出连接日志，则日志数据将存储在以下日志组中。

```
/aws/redshift/cluster/cluster1/connectionlog
```

使用日志流将日志事件导出到日志组。要在无服务器端点的日志事件中搜索信息，请使用 Amazon CloudWatch Logs 控制台、Amazon CLI 或 Amazon CloudWatch Logs API。有关搜索和筛选日志数据的信息，请参阅[使用筛选条件从日志事件创建指标](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/MonitoringLogData.html)。

在 CloudWatch 中，您可以使用所提供的旨在实现粒度和灵活性的查询语法搜索日志数据。有关更多信息，请参阅 [CloudWatch Logs Insights 查询语法](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html)。

### 迁移到 Amazon CloudWatch 审计日志记录
<a name="db-auditing-cloudwatch-provisioned-migration"></a>

在任何情况下，如果您要向 Simple Storage Service (Amazon S3) 发送日志并更改配置（例如向 CloudWatch 发送日志），保留在 Simple Storage Service (Amazon S3) 中的日志都不会受到影响。您仍可以在日志数据所在的 Simple Storage Service (Amazon S3) 存储桶中查询日志数据。

### Amazon S3 中的日志文件
<a name="db-auditing-manage-log-files"></a>

Simple Storage Service（Amazon S3）中的 Amazon Redshift 日志文件的数量和大小在很大程度上取决于您集群中的活动。如果您有一个活动的集群生成了大量日志，则 Amazon Redshift 可能会更频繁地生成日志文件。对于同一类活动，您可能有一系列日志文件，例如同一个小时有多个连接日志。

当 Amazon Redshift 使用 Simple Storage Service (Amazon S3) 存储日志时，您需要为在 Simple Storage Service (Amazon S3) 中使用的存储支付相应费用。在对 Simple Storage Service (Amazon S3) 配置日志记录之前，应计划需存储日志文件的时长。在此过程中，请确定何时可根据审计需求删除或归档日志文件。您制定的计划在很大程度上取决于您存储的数据类型，例如需满足合规性或法规要求的数据。有关 Simple Storage Service（Amazon S3）定价的更多信息，请转至 [Amazon Simple Storage Service（S3）定价](https://www.amazonaws.cn/s3/pricing/)。

#### 对 Amazon S3 启用日志记录时的限制
<a name="db-auditing-enable-logging-limitations"></a>

审计日志记录具有以下约束：
+ 您只能使用 Amazon S3 托管式密钥（SSE-S3）加密（AES-256）。
+ Amazon S3 桶必须关闭 S3 对象锁定功能。

#### Amazon Redshift 审计日志记录的存储桶权限
<a name="db-auditing-bucket-permissions"></a>

当您对 Simple Storage Service (Amazon S3) 启用日志记录时，Amazon Redshift 会收集日志记录信息并将其上载到 Simple Storage Service (Amazon S3) 中存储的日志文件。您可以使用现有存储桶或新存储桶。Amazon Redshift 需要对存储桶具备以下 IAM 权限：
+ `s3:GetBucketAcl` 该服务要求对 Simple Storage Service（Amazon S3）存储桶具备读取权限，以便可以识别存储桶拥有者。
+ `s3:PutObject` 该服务要求具备放置对象权限，以便上载日志。此外，开启日志记录的用户或 IAM 角色必须具有对 Amazon S3 桶的 `s3:PutObject` 权限。每次上传日志时，该服务就会确定当前存储桶拥有者与启用日志记录时的存储桶拥有者是否一致。如果这些拥有者不匹配，您将收到一条错误。

如果启用审计日志记录时，您选择了创建新存储桶的选项，则会对其应用正确的权限。不过，如果您在 Simple Storage Service（Amazon S3）中创建自己的存储桶或使用现有存储桶，请确保添加包含存储桶名称的存储桶策略。日志使用服务主体凭证传送。对于大多数 Amazon Web Services 区域，您可添加 Redshift 服务主体名称，*redshift t.amazonaws.com*。

**注意**  
中国（北京）区域的 ARN 格式使用 `aws-cn` 标识符，而不是 `aws` 标识符，如以下策略示例所示。  

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Put bucket policy needed for audit logging",
            "Effect": "Allow",
            "Principal": {
                "Service": "redshift.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws-cn:s3:::BucketName",
                "arn:aws-cn:s3:::BucketName/*"
            ]
        }
    ]
}
```

该存储桶策略使用以下格式。*ServiceName* 和 *BucketName* 是您自己的值的占位符。还可在存储桶策略中指定关联的操作和资源。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Put bucket policy needed for audit logging",
            "Effect": "Allow",
            "Principal": {
                "Service": "ServiceName"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::BucketName",
                "arn:aws:s3:::BucketName/*"
            ]
        }
    ]
}
```

------

以下示例就是针对美国东部（弗吉尼亚北部）区域的存储桶策略，该存储桶名为 `AuditLogs`。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Put bucket policy needed for audit logging",
            "Effect": "Allow",
            "Principal": {
                "Service": "redshift.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::AuditLogs",
                "arn:aws:s3:::AuditLogs/*"
            ]
        }
    ]
}
```

------

原定设置情况下未启用的区域（也称为“选择加入”区域）需要特定于区域的服务主体名称。对于这些内容，服务主体名称包括区域，格式为 `redshift.region.amazonaws.com`。例如，*redshift.ap-east-1.amazonaws.com* 针对亚太地区（香港）区域。有关默认情况下未启用的区域列表，请参阅《Amazon Web Services 一般参考》**中的[管理 Amazon Web Services 区域](https://docs.amazonaws.cn/general/latest/gr/rande-manage.html)。

**注意**  
特定于区域的服务主体名称与集群所在的区域对应。

##### 日志文件的最佳实践
<a name="db-auditing-bucket-permissions-confused-deputy"></a>

 当 Redshift 将日志文件上载到 Simple Storage Service（Amazon S3）时，可以分段上载大型文件。如果分段上载不成功，则文件的一部分可能会保留在 Simple Storage Service（Amazon S3）存储桶中。这可能会导致额外的存储成本，因此了解什么情况下分段上载会失败非常重要。有关审计日志的分段上载的详细说明，请参阅[使用分段上载来上载和复制对象](https://docs.amazonaws.cn/AmazonS3/latest/userguide/mpuoverview.html)和[中止分段上载](https://docs.amazonaws.cn/AmazonS3/latest/userguide/abort-mpu.html)。

有关创建 S3 存储桶和添加存储桶策略的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[创建通用存储桶](https://docs.amazonaws.cn/AmazonS3/latest/userguide/create-bucket-overview.html)和 [Amazon S3 的存储桶策略](https://docs.amazonaws.cn/AmazonS3/latest/userguide/bucket-policies.html)。

#### Amazon Redshift 审计日志记录的存储桶结构
<a name="db-auditing-bucket-structure"></a>

预设情况下，Amazon Redshift 通过使用下列存储桶和对象结构在 Simple Storage Service（Amazon S3）存储桶中整理日志文件：``

`AWSLogs/AccountID/ServiceName/Region/Year/Month/Day/AccountID_ServiceName_Region_ClusterName_LogType_Timestamp.gz` 

例如：`AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz`

如果您提供 Simple Storage Service（Amazon S3）键前缀，则该前缀放在密钥开头。

例如，如果指定前缀 myprefix：`myprefix/AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz`

Simple Storage Service（Amazon S3）键前缀不得超过 512 个字符。其中不得包含空格（ ）、双引号（“）、单引号（‘）、反斜杠（\$1）。此外还有很多不得使用的特殊字符和控制字符。这些字符的十六进制代码如下：
+ x00 – x20
+ x 22
+ x 27
+ x5c
+ x7f 或更大

### Amazon S3 中的审计日志记录注意事项
<a name="db-auditing-failures"></a>

 Amazon Redshift 审计日志记录可能会因如下原因而中断：
+  Amazon Redshift 无权将日志上载到 Simple Storage Service（Amazon S3）存储桶中。验证相应存储桶是否配置了适当的 IAM 策略。有关更多信息，请参阅 [Amazon Redshift 审计日志记录的存储桶权限](#db-auditing-bucket-permissions)。
+  存储桶拥有者发生变化。当 Amazon Redshift 上载日志时，它会验证存储桶拥有者与启用日志记录时的存储桶拥有者是否相同。如果存储桶拥有者发生变化，则在您配置其他存储桶以用于审计日志记录之前，Amazon Redshift 不会上载日志。
+  找不到存储桶。如果相应存储桶在 Simple Storage Service（Amazon S3）中已被删除，则 Amazon Redshift 无法上载日志。您必须重新创建该存储桶，或对 Amazon Redshift 进行配置以将日志上载到其他存储桶。

### 使用 Amazon CloudTrail 的 API 调用
<a name="rs-db-auditing-cloud-trail"></a>

Amazon Redshift 与 Amazon CloudTrail 集成，后者是在 Amazon Redshift 中提供用户、角色或 Amazon 服务所采取操作的记录的服务。CloudTrail 将 Amazon Redshift 的所有 API 调用作为事件捕获。有关 Amazon Redshift 与 Amazon CloudTrail 集成的更多信息，请参阅[使用 CloudTrail 进行日志记录](https://docs.amazonaws.cn/redshift/latest/mgmt/logging-with-cloudtrail.html)。

您可以将 CloudTrail 与 Amazon Redshift 数据库审计日志记录一起使用，也可以单独使用前者。

要了解有关 CloudTrail 的更多信息，请参阅 [Amazon CloudTrail 用户指南](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/)。