

# Db2 审核日志记录
<a name="Db2.Options.Audit"></a>

借助 Db2 审核日志记录，Amazon RDS 会记录数据库活动，包括登录到数据库的用户和对数据库运行的查询。RDS 使用您提供的 AWS Identity and Access Management（IAM）角色将完成的审核日志上传到 Amazon S3 存储桶。

**Topics**
+ [设置 Db2 审核日志记录](#db2-audit-setting-up)
+ [管理 Db2 审核日志](#db2-audit-managing)
+ [查看审核日志](#db2-audit-viewing-logs)
+ [排查 Db2 审核日志记录问题](#db2-audit-troubleshooting)

## 设置 Db2 审核日志记录
<a name="db2-audit-setting-up"></a>

要为 Amazon RDS for Db2 数据库启用审核日志记录，您需要在 RDS for Db2 数据库实例上启用 `DB2_AUDIT` 选项。然后，配置审核策略以为特定数据库启用该功能。要在 RDS for Db2 数据库实例上启用该选项，您需要为 `DB2_AUDIT` 选项配置选项设置。为此，您可以为 Amazon S3 存储桶提供 Amazon 资源名称（ARN），并向 IAM 角色提供访问存储桶的权限。

要为 RDS for Db2 数据库设置 Db2 审核日志记录，请完成以下步骤。

**Topics**
+ [步骤 1：创建 Amazon S3 存储桶](#db2-audit-create-s3-bucket)
+ [步骤 2：创建 IAM 策略](#db2-audit-create-iam-policy)
+ [步骤 3：创建 IAM 角色并附加您的 IAM 策略](#db2-audit-create-iam-role)
+ [步骤 4：为 Db2 审核日志记录配置选项组](#db2-audit-configure-options-group)
+ [步骤 5：配置审核策略](#db2-audit-configure-audit-policy)
+ [步骤 6：检查审核配置](#db2-audit-check-config-status)

### 步骤 1：创建 Amazon S3 存储桶
<a name="db2-audit-create-s3-bucket"></a>

如果您尚未完成此操作，请创建一个 Amazon S3 存储桶，以便 Amazon RDS 可以在其中上传您的 RDS for Db2 数据库的审核日志文件。以下限制适用于您用作审核文件目标的 S3 存储桶。
+ 它必须与您的 RDS for Db2 数据库实例位于相同的 AWS 区域。
+ 它不得对公众开放。
+ 存储桶拥有者也必须是 IAM 角色拥有者。

要了解如何创建 Amazon S3 存储桶，请参阅《Amazon S3 用户指南》**中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

启用审核日志记录后，Amazon RDS 会自动将日志从您的数据库实例发送到以下位置：
+ 数据库实例级别日志 – `bucket_name/db2-audit-logs/dbi_resource_id/date_time_utc/`
+ 数据库级别日志 - `bucket_name/db2-audit-logs/dbi_resource_id/date_time_utc/db_name/`

请记下存储桶的 Amazon 资源名称（ARN）。这些信息是完成后续步骤所必需的。

### 步骤 2：创建 IAM 策略
<a name="db2-audit-create-iam-policy"></a>

创建一个 IAM 策略，该策略具有将审核日志文件从数据库实例传输到 Amazon S3 存储桶所需的权限。此步骤假定您已创建了 S3 存储桶。

创建策略前，请收集以下信息：
+ 存储桶的 ARN。
+ 您的 AWS Key Management Service（AWS KMS）密钥的 ARN，如果您的存储桶使用 SSE-KMS 加密。

创建包含以下权限的 IAM 策略：

```
"s3:ListBucket",
 "s3:GetBucketAcl",
 "s3:GetBucketLocation",
 "s3:PutObject",
 "s3:ListMultipartUploadParts",
 "s3:AbortMultipartUpload",
 "s3:ListAllMyBuckets"
```

**注意**  
Amazon RDS 需要在内部执行 `s3:ListAllMyBuckets` 操作，以确认同一 AWS 账户是否拥有 S3 存储桶和 RDS for Db2 数据库实例。

如果存储桶使用 SSE-KMS 加密，则还应包括 IAM 角色和 AWS KMS 密钥的以下权限。

在 IAM 角色的策略中包括以下权限。

```
"kms:GenerateDataKey",
 "kms:Decrypt"
```

在 AWS KMS 密钥的密钥策略中包含以下权限。将 *111122223333* 替换为您的账号，并将 *AROA123456789EXAMPLE* 替换为 IAM 角色名称。

```
{
  "Sid": "Allow RDS role to use the key",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:sts::111122223333:assumed-role/AROA123456789EXAMPLE/RDS-Db2Audit",
      "arn:aws:iam::111122223333:role/AROA123456789EXAMPLE"
    ]
  },
  "Action": [
    "kms:GenerateDataKey",
    "kms:Decrypt"
  ],
  "Resource": "*"
}
```

您可以使用 AWS 管理控制台或 AWS Command Line Interface（AWS CLI）创建 IAM 策略。

#### 控制台
<a name="db2-audit-create-iam-policy-console"></a>

**创建 IAM 策略以允许 Amazon RDS 访问 Amazon S3 存储桶**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**策略**。

1. 选择**创建策略**，然后选择 **JSON**。

1. 在**添加操作**中，按 **S3** 进行筛选。添加 **ListBucket**、**GetBucketAcl** 和 **GetBucketLocation** 访问权限。

1. 在**添加资源**中，选择**添加**。在**资源类型**中，选择**存储桶**，然后输入存储桶的名称。选择**添加资源**。

1. 选择**添加新语句**。

1. 在**添加操作**中，按 **S3** 进行筛选。添加 **PutObject**、**ListMultipartUploadParts** 和 **AbortMultipartUpload** 访问权限。

1. 在**添加资源**中，选择**添加**。在**资源类型**中，选择**对象**，然后输入*您的存储桶名称/\$1*。选择**添加资源**。

1. 选择**添加新语句**。

1. 在**添加操作**中，按 **S3** 进行筛选。添加 **ListAllMyBuckets** 访问权限。

1. 在**添加资源**中，选择**添加**。在**资源类型**中，选择**所有资源**。选择**添加资源**。

1. 如果您使用自己的 KMS 密钥来加密数据：

   1. 选择**添加新语句**。

   1. 在**添加操作**中，按 KMS 进行筛选。添加 **GenerateDataKey** 和 **Decrypt** 访问权限。

   1. 在**添加资源**中，选择**添加**。在**资源类型**中，选择**所有资源**。选择**添加资源**。

1. 选择**下一步**。

1. 对于**策略名称**，输入此策略的名称。

1. （可选）对于**描述**，输入此策略的描述。

1. 选择**创建策略**。

#### AWS CLI
<a name="db2-audit-create-iam-policy-cli"></a>

**创建 IAM 策略以允许 Amazon RDS 访问 Amazon S3 存储桶**

1. 运行 [https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html) 命令。在以下示例中，将 *iam\$1policy\$1name* 和 *amzn-s3-demo-bucket* 替换为 IAM 策略的名称以及目标 Amazon S3 存储桶的名称。

   对于 Linux、macOS 或 Unix：

   ```
   aws iam create-policy \
       --policy-name iam_policy_name \
       --policy-document '{
           "Version": "2012-10-17",		 	 	 
           "Statement": [
               {
                   "Sid": "Statement1",
                   "Effect": "Allow",
                   "Action": [
                       "s3:ListBucket",
                       "s3:GetBucketAcl",
                       "s3:GetBucketLocation"
                   ],
                   "Resource": [
                       "arn:aws:s3:::amzn-s3-demo-bucket"
                   ]
               },
               {
                   "Sid": "Statement2",
                   "Effect": "Allow",
                   "Action": [
                       "s3:PutObject",
                       "s3:ListMultipartUploadParts",
                       "s3:AbortMultipartUpload"
                   ],
                   "Resource": [
                       "arn:aws:s3:::amzn-s3-demo-bucket/*"
                   ]
               },
               {
                   "Sid": "Statement3",
                   "Effect": "Allow",
                   "Action": [
                       "s3:ListAllMyBuckets"
                   ],
                   "Resource": [
                       "*"
                   ]
               },
               {
                   "Sid": "Statement4",
                   "Effect": "Allow",
                   "Action": [
                       "kms:GenerateDataKey",
                       "kms:Decrypt"
                   ],
                   "Resource": [
                       "*"
                   ]
               }
           ]
     }'
   ```

   对于：Windows

   ```
   aws iam create-policy ^
       --policy-name iam_policy_name ^
       --policy-document '{
           "Version": "2012-10-17",		 	 	 
           "Statement": [
               {
                   "Sid": "Statement1",
                   "Effect": "Allow",
                   "Action": [
                       "s3:ListBucket",
                       "s3:GetBucketAcl",
                       "s3:GetBucketLocation"
                   ],
                   "Resource": [
                       "arn:aws:s3:::amzn-s3-demo-bucket"
                   ]
               },
               {
                   "Sid": "Statement2",
                   "Effect": "Allow",
                   "Action": [
                       "s3:PutObject",
                       "s3:ListMultipartUploadParts",
                       "s3:AbortMultipartUpload"
                   ],
                   "Resource": [
                       "arn:aws:s3:::amzn-s3-demo-bucket/*"
                   ]
               },
               {
                   "Sid": "Statement3",
                   "Effect": "Allow",
                   "Action": [
                       "s3:ListAllMyBuckets"
                   ],
                   "Resource": [
                       "*"
                   ]
               },
               {
                   "Sid": "Statement4",
                   "Effect": "Allow",
                   "Action": [
                       "kms:GenerateDataKey",
                       "kms:Decrypt"
                   ],
                   "Resource": [
                       "*"
                   ]
               }
           ]
     }'
   ```

1. 创建策略后，请记下策略的 ARN。您需要[步骤 3：创建 IAM 角色并附加您的 IAM 策略](#db2-audit-create-iam-role)的 ARN。

有关创建 IAM policy 的更多信息，请参阅《IAM 用户指南》中的[创建 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

### 步骤 3：创建 IAM 角色并附加您的 IAM 策略
<a name="db2-audit-create-iam-role"></a>

此步骤假定您已在[步骤 2：创建 IAM 策略](#db2-audit-create-iam-policy)中创建了 IAM 策略。在此步骤中，您将为 RDS for Db2 数据库实例创建一个 IAM 角色，然后将 IAM 策略附加到该角色。

您可以使用控制台或 AWS CLI 为数据库实例创建 IAM 角色。

#### 控制台
<a name="db2-audit-create-iam-role-console"></a>

**创建 IAM 角色并向其附加 IAM policy**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**角色**。

1. 选择**创建角色**。

1. 对于**可信实体类型**，请选择 **AWS 服务**。

1. 对于**服务或使用案例**，请选择 **RDS**，然后选择 **RDS – 向数据库添加角色**。

1. 选择**下一步**。

1. 对于**权限策略**，搜索并选择您创建的 IAM policy 的名称。

1. 选择**下一步**。

1. 对于 **Role name**（角色名称），输入一个角色名称。

1. （可选）在**描述**中，输入新角色的描述。

1. 选择**创建角色**。

#### AWS CLI
<a name="db2-audit-create-iam-role-cli"></a>

**创建 IAM 角色并向其附加 IAM policy**

1. 运行 [https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 命令。在以下示例中，将 *iam\$1role\$1name* 替换为您的 IAM 角色的名称。

   对于 Linux、macOS 或 Unix：

   ```
   aws iam create-role \
       --role-name iam_role_name \
       --assume-role-policy-document '{
         "Version": "2012-10-17",		 	 	 
         "Statement": [
           {
             "Effect": "Allow",
             "Principal": {
               "Service": "rds.amazonaws.com"
             },
             "Action": "sts:AssumeRole"
           }
         ]
       }'
   ```

   对于：Windows

   ```
   aws iam create-role ^
       --role-name iam_role_name ^
       --assume-role-policy-document '{
         "Version": "2012-10-17",		 	 	 
         "Statement": [
           {
             "Effect": "Allow",
             "Principal": {
               "Service": "rds.amazonaws.com"
             },
             "Action": "sts:AssumeRole"
           }
         ]
       }'
   ```

1. 创建角色之后，记下该角色的 ARN。在下一步骤[步骤 4：为 Db2 审核日志记录配置选项组](#db2-audit-configure-options-group)中，您需要用到此 ARN。

1. 运行 [https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html) 命令。在以下示例中，将 *iam\$1policy\$1arn* 替换为您在[步骤 2：创建 IAM 策略](#db2-audit-create-iam-policy)中创建的 IAM policy。将 *iam\$1role\$1name* 替换为刚创建的 IAM 角色的名称。

   对于 Linux、macOS 或 Unix：

   ```
   aws iam attach-role-policy \
      --policy-arn iam_policy_arn \
      --role-name iam_role_name
   ```

   对于：Windows

   ```
   aws iam attach-role-policy ^
      --policy-arn iam_policy_arn ^
      --role-name iam_role_name
   ```

有关更多信息，请参阅《IAM 用户指南》**中的[创建向 IAM 用户委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

### 步骤 4：为 Db2 审核日志记录配置选项组
<a name="db2-audit-configure-options-group"></a>

将 Db2 审核日志记录选项添加到 RDS for Db2 数据库实例的过程如下：

1. 创建新的选项组，或者复制或修改现有选项组。

1. 添加和配置所有必需的选项。

1. 将选项组与数据库实例相关联。

在添加 Db2 审核日志记录选项后，您无需重新启动数据库实例。只要选项组处于活动状态，您就可以创建审核并在 S3 存储桶中存储审核日志。

**在数据库实例的选项组中添加和配置 Db2 审核日志记录**

1. 选择以下选项之一：
   + 使用现有选项组。
   + 创建自定义数据库选项组并使用该选项组。有关更多信息，请参阅 [创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 将 **DB2\$1AUDIT** 选项添加到选项组，然后配置选项设置。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。
   + 在 **IAM\$1ROLE\$1ARN** 中，输入您在[步骤 3：创建 IAM 角色并附加您的 IAM 策略](#db2-audit-create-iam-role)中创建的 IAM 角色的 ARN。
   + 在 **S3\$1BUCKET\$1ARN** 中，输入要用于 Db2 审核日志的 S3 存储桶的 ARN。存储桶必须与您的 RDS for Db2 数据库实例位于同一区域。与您输入的 IAM 角色关联的策略必须允许对该资源执行所需的操作。

1. 将选项组应用到新的或现有的数据库实例。选择以下选项之一：
   + 如果您正在创建新的数据库实例，请在启动实例时应用选项组。
   + 在现有数据库实例上，请通过修改实例并附加新的选项组来应用选项组。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### 步骤 5：配置审核策略
<a name="db2-audit-configure-audit-policy"></a>

要为 RDS for Db2 数据库配置审核策略，请使用 RDS for Db2 数据库实例的主用户名和主密码连接到 `rdsadmin` 数据库。然后，使用数据库的数据库名称和适用的参数值调用 `rdsadmin.configure_db_audit` 存储过程。

以下示例连接到数据库并为类别为 AUDIT、CHECKING、OBJMAINT、SECMAINT、SYSADMIN 和 VALIDATE 的 `testdb` 配置审核策略。状态值 `BOTH` 记录成功和失败，`ERROR TYPE` 默认情况下为 `NORMAL`。有关如何使用该存储过程的更多信息，请参阅[rdsadmin.configure\$1db\$1audit](db2-sp-managing-audit-policies.md#db2-sp-configure-db-audit)。

```
db2 "connect to rdsadmin user master_user using master_password"
db2 "call rdsadmin.configure_db_audit('testdb', 'ALL', 'BOTH', ?)"
```

### 步骤 6：检查审核配置
<a name="db2-audit-check-config-status"></a>

要确保您的审核策略设置正确，请检查审核配置的状态。

要检查配置，请使用 RDS for Db2 数据库实例的主用户名和主密码连接到 `rdsadmin` 数据库。然后，使用数据库的数据库名称运行以下 SQL 语句。在以下示例中，数据库名称为 *testdb*。

```
db2 "select task_id, task_type, database_name, lifecycle,
    varchar(bson_to_json(task_input_params), 500) as task_params,
    cast(task_output as varchar(500)) as task_output
    from table(rdsadmin.get_task_status(null,'testdb','CONFIGURE_DB_AUDIT'))"
    
Sample Output
 
TASK_ID              TASK_TYPE            DATABASE_NAME       LIFECYCLE
-------------------- -------------------- --------------- -------------
                   2  CONFIGURE_DB_AUDIT            DB2DB       SUCCESS

... continued ...
TASK_PARAMS                                
-------------------------------------------------------- 
{ "AUDIT_CATEGORY" : "ALL", "CATEGORY_SETTING" : "BOTH" }            

... continued ...
                                        TASK_OUTPUT
---------------------------------------------------
2023-12-22T20:27:03.029Z Task execution has started.

2023-12-22T20:27:04.285Z Task execution has completed successfully.
```

## 管理 Db2 审核日志
<a name="db2-audit-managing"></a>

设置 Db2 审核日志记录后，您可以修改特定数据库的审核策略，或者禁用数据库级别或整个数据库实例的审核日志记录。您也可以更改将日志文件上传到其中的 Amazon S3 存储桶。

**Topics**
+ [修改 Db2 审核策略](#db2-audit-modifying-policy)
+ [修改日志文件的位置](#db2-audit-modifying-location)
+ [禁用 Db2 审核日志](#db2-audit-disabling)

### 修改 Db2 审核策略
<a name="db2-audit-modifying-policy"></a>

要修改特定 RDS for Db2 数据库的审核策略，请运行 `rdsadmin.configure_db_audit` 存储过程。使用此存储过程，您可以更改审核策略的类别、类别设置和错误类型配置。有关更多信息，请参阅 [rdsadmin.configure\$1db\$1audit](db2-sp-managing-audit-policies.md#db2-sp-configure-db-audit)。

### 修改日志文件的位置
<a name="db2-audit-modifying-location"></a>

要更改将您的日志文件上传到其中的 Amazon S3 存储桶，请执行以下操作之一：
+ 修改附加到 RDS for Db2 数据库实例的当前选项组 – 更新 `DB2_AUDIT` 选项的 `S3_BUCKET_ARN` 设置以指向新存储桶。此外，请务必更新附加到附加选项组中的 `IAM_ROLE_ARN` 设置指定的 IAM 角色的 IAM 策略。此 IAM 策略必须为新存储桶提供所需的访问权限。有关 IAM 策略中所需权限的信息，请参阅[创建 IAM 策略](#db2-audit-create-iam-policy)。
+ 将 RDS for Db2 数据库实例附加到其他选项组 - 修改数据库实例以更改附加到该实例的选项组。确保为新选项组配置了正确的 `S3_BUCKET_ARN` 和 `IAM_ROLE_ARN` 设置。有关如何为 `DB2_AUDIT` 选项配置这些设置的信息，请参阅[配置选项组](#db2-audit-configure-options-group)。

修改选项组后，请确保立即应用更改。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### 禁用 Db2 审核日志
<a name="db2-audit-disabling"></a>

要禁用 Db2 审核日志记录，请执行以下操作之一：
+ 禁用 RDS for Db2 数据库实例的审核日志记录 - 修改您的数据库实例并从中删除带有 `DB2_AUDIT` 选项的选项组。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。
+ 禁用特定数据库的审核日志记录 - 使用数据库的数据库名称调用 `rdsadmin.disable_db_audit`，停止审核日志记录并删除审核策略。有关更多信息，请参阅 [rdsadmin.disable\$1db\$1audit](db2-sp-managing-audit-policies.md#db2-sp-disable-db-audit)。

  ```
  db2 "call rdsadmin.disable_db_audit(
      'db_name',
      ?)"
  ```

## 查看审核日志
<a name="db2-audit-viewing-logs"></a>

启用 Db2 审核日志记录后，请至少等待一小时，然后再查看 Amazon S3 存储桶中的审核数据。Amazon RDS 会自动将日志从您的 RDS for Db2 数据库实例发送到以下位置：
+ 数据库实例级别日志 – `bucket_name/db2-audit-logs/dbi_resource_id/date_time_utc/`
+ 数据库级别日志 - `bucket_name/db2-audit-logs/dbi_resource_id/date_time_utc/db_name/`

以下 Amazon S3 控制台屏幕截图示例显示了 RDS for Db2 数据库实例级别日志文件的文件夹列表。

![\[选择了对象选项卡的 Amazon S3 控制台，其中显示了 RDS for Db2 数据库实例级别日志文件的文件夹列表。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/db2-instance-level-audit-logs.png)


以下 Amazon S3 控制台屏幕截图示例显示了 RDS for Db2 数据库实例的数据库级别日志文件。

![\[选择了对象选项卡的 Amazon S3 控制台，其中显示了 RDS for Db2 数据库实例的数据库级别日志文件。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/db2-database-level-audit-logs.png)


## 排查 Db2 审核日志记录问题
<a name="db2-audit-troubleshooting"></a>

可使用以下信息排查 Db2 审核日志记录的常见问题。

### 无法配置审核策略
<a name="db2-audit-troubleshooting-policy-config"></a>

如果调用存储过程 `rdsadmin.configure_db_audit` 返回错误，则可能是包含 `DB2_AUDIT` 选项的选项组未与 RDS for Db2 数据库实例关联。修改数据库实例以添加该选项组，然后尝试再次调用存储过程。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### Amazon S3 存储桶中没有数据
<a name="db2-audit-troubleshooting-missing-data"></a>

如果 Amazon S3 存储桶中缺少日志记录数据，请检查以下内容：
+ Amazon S3 存储桶与您的 RDs for Db2 数据库实例位于同一区域。
+ 您在 `IAM_ROLE_ARN` 选项设置中指定的角色已配置为具有将日志上传到Amazon S3 存储桶所需的权限。有关更多信息，请参阅 [创建 IAM 策略](#db2-audit-create-iam-policy)。
+ 在与您的 RDS for Db2 数据库实例关联的选项组中，`IAM_ROLE_ARN` 和 `S3_BUCKET_ARN` 选项设置的 ARN 正确。有关更多信息，请参阅 [配置选项组](#db2-audit-configure-options-group)。

您可以通过连接到数据库并运行 SQL 语句来检查审核日志记录配置的任务状态。有关更多信息，请参阅 [检查审核配置](#db2-audit-check-config-status)。

您还可以查看事件，详细了解日志可能丢失的原因。有关如何查看事件的信息，请参阅[在 Amazon RDS 控制台中查看日志、事件和流](logs-events-streams-console.md)。