Db2 审核日志记录 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Db2 审核日志记录

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

设置 Db2 审核日志记录

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

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

步骤 1:创建 Amazon S3 存储桶

如果您尚未完成此操作,请创建一个 Amazon S3 存储桶,以便 Amazon RDS 可以在其中上传您的 RDS for Db2 数据库的审核日志文件。以下限制适用于您用作审核文件目标的 S3 存储桶。

  • 它必须与您的 RDS for Db2 数据库实例位于相同的 Amazon Web Services 区域。

  • 它不得对公众开放。

  • 它不能使用 S3 对象锁定

  • 存储桶拥有者也必须是 IAM 角色拥有者。

要了解如何创建 Amazon S3 存储桶,请参阅《Amazon S3 用户指南》中的创建存储桶

启用审核日志记录后,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 策略

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

创建策略前,请收集以下信息:

  • 存储桶的 ARN。

  • 您的 Amazon Key Management Service(Amazon KMS)密钥的 ARN,如果您的存储桶使用 SSE-KMS 加密。

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

"s3:ListBucket", "s3:GetBucketACL", "s3:GetBucketLocation", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:ListAllMyBuckets"
注意

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

如果您的存储桶使用 SSE-KMS 加密,则还应包括以下权限:

"kms:GenerateDataKey", "kms:Decrypt"

您可以使用 Amazon Web Services Management Console或 Amazon Command Line Interface(Amazon CLI)创建 IAM 策略。

创建 IAM 策略以允许 Amazon RDS 访问 Amazon S3 存储桶
  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择策略

  3. 选择创建策略,然后选择 JSON

  4. 添加操作中,按 S3 进行筛选。添加 ListBucketGetBucketAclGetBucketLocation 访问权限。

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

  6. 选择添加新语句

  7. 添加操作中,按 S3 进行筛选。添加 PutObjectListMultipartUploadPartsAbortMultipartUpload 访问权限。

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

  9. 选择添加新语句

  10. 添加操作中,按 S3 进行筛选。添加 ListAllMyBuckets 访问权限。

  11. 添加资源中,选择添加。在资源类型中,选择所有资源。选择添加资源

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

    1. 选择添加新语句

    2. 添加操作中,按 KMS 进行筛选。添加 GenerateDataKeyDecrypt 访问权限。

    3. 添加资源中,选择添加。在资源类型中,选择所有资源。选择添加资源

  13. 选择下一步

  14. 对于策略名称,输入此策略的名称。

  15. (可选)对于描述,输入此策略的描述。

  16. 选择创建策略

创建 IAM 策略以允许 Amazon RDS 访问 Amazon S3 存储桶
  1. 运行 create-policy 命令。在以下示例中,将 iam_policy_nameamzn-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": [ "*" ] } ] }'
  2. 创建策略后,请记下策略的 ARN。您需要步骤 3:创建 IAM 角色并附加您的 IAM 策略的 ARN。

有关创建 IAM policy 的更多信息,请参阅《IAM 用户指南》中的创建 IAM policy

步骤 3:创建 IAM 角色并附加您的 IAM 策略

此步骤假定您已在步骤 2:创建 IAM 策略中创建了 IAM 策略。在此步骤中,您将为 RDS for Db2 数据库实例创建一个 IAM 角色,然后将 IAM 策略附加到该角色。

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

创建 IAM 角色并向其附加 IAM policy
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择角色

  3. 选择 Create role(创建角色)。

  4. 对于可信实体类型,请选择 Amazon Web Services 服务

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

  6. 选择下一步

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

  8. 选择下一步

  9. 对于 Role name(角色名称),输入一个角色名称。

  10. (可选)在描述中,输入新角色的描述。

  11. 选择 Create role(创建角色)。

创建 IAM 角色并向其附加 IAM policy
  1. 运行 create-role 命令。在以下示例中,将 iam_role_name 替换为您的 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" } ] }'
  2. 创建角色之后,记下该角色的 ARN。在下一步骤步骤 4:为 Db2 审核日志记录配置选项组中,您需要用到此 ARN。

  3. 运行 attach-role-policy 命令。在以下示例中,将 iam_policy_arn 替换为您在步骤 2:创建 IAM 策略中创建的 IAM policy。将 iam_role_name 替换为刚创建的 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 用户委派权限的角色

步骤 4:为 Db2 审核日志记录配置选项组

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

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

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

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

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

在数据库实例的选项组中添加和配置 Db2 审核日志记录
  1. 选择以下选项之一:

    • 使用现有选项组。

    • 创建自定义数据库选项组并使用该选项组。有关更多信息,请参阅 创建选项组

  2. DB2_AUDIT 选项添加到选项组,然后配置选项设置。有关添加选项的更多信息,请参阅 将选项添加到选项组

    • IAM_ROLE_ARN 中,输入您在步骤 3:创建 IAM 角色并附加您的 IAM 策略中创建的 IAM 角色的 ARN。

    • S3_BUCKET_ARN 中,输入要用于 Db2 审核日志的 S3 存储桶的 ARN。存储桶必须与您的 RDS for Db2 数据库实例位于同一区域。与您输入的 IAM 角色关联的策略必须允许对该资源执行所需的操作。

  3. 将选项组应用到新的或现有的数据库实例。选择以下选项之一:

    • 如果您正在创建新的数据库实例,请在启动实例时应用选项组。

    • 在现有数据库实例上,请通过修改实例并附加新的选项组来应用选项组。有关更多信息,请参阅 修改 Amazon RDS 数据库实例

步骤 5:配置审核策略

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

以下示例连接到数据库并为类别为 AUDIT、CHECKING、OBJMAINT、SECMAINT、SYSADMIN 和 VALIDATE 的 testdb 配置审核策略。状态值 BOTH 记录成功和失败,ERROR TYPE 默认情况下为 NORMAL。有关如何使用该存储过程的更多信息,请参阅rdsadmin.configure_db_audit

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

步骤 6:检查审核配置

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

要检查配置,请使用 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 审核日志

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

修改 Db2 审核策略

要修改特定 RDS for Db2 数据库的审核策略,请运行 rdsadmin.configure_db_audit 存储过程。使用此存储过程,您可以更改审核策略的类别、类别设置和错误类型配置。有关更多信息,请参阅 rdsadmin.configure_db_audit

修改日志文件的位置

要更改将您的日志文件上传到其中的 Amazon S3 存储桶,请执行以下操作之一:

  • 修改附加到 RDS for Db2 数据库实例的当前选项组 – 更新 DB2_AUDIT 选项的 S3_BUCKET_ARN 设置以指向新存储桶。此外,请务必更新附加到附加选项组中的 IAM_ROLE_ARN 设置指定的 IAM 角色的 IAM 策略。此 IAM 策略必须为新存储桶提供所需的访问权限。有关 IAM 策略中所需权限的信息,请参阅创建 IAM 策略

  • 将 RDS for Db2 数据库实例附加到其他选项组 - 修改数据库实例以更改附加到该实例的选项组。确保为新选项组配置了正确的 S3_BUCKET_ARNIAM_ROLE_ARN 设置。有关如何为 DB2_AUDIT 选项配置这些设置的信息,请参阅配置选项组

修改选项组后,请确保立即应用更改。有关更多信息,请参阅 修改 Amazon RDS 数据库实例

禁用 Db2 审核日志

要禁用 Db2 审核日志记录,请执行以下操作之一:

  • 禁用 RDS for Db2 数据库实例的审核日志记录 - 修改您的数据库实例并从中删除带有 DB2_AUDIT 选项的选项组。有关更多信息,请参阅 修改 Amazon RDS 数据库实例

  • 禁用特定数据库的审核日志记录 - 使用数据库的数据库名称调用 rdsadmin.disable_db_audit,停止审核日志记录并删除审核策略。有关更多信息,请参阅 rdsadmin.disable_db_audit

    db2 "call rdsadmin.disable_db_audit( 'db_name')"

查看审核日志

启用 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 数据库实例级别日志文件的文件夹列表。

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

选择了对象选项卡的 Amazon S3 控制台,其中显示了 RDS for Db2 数据库实例的数据库级别日志文件。

排查 Db2 审核日志记录问题

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

无法配置审核策略

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

Amazon S3 存储桶中没有数据

如果 Amazon S3 存储桶中缺少日志记录数据,请检查以下内容:

  • Amazon S3 存储桶与您的 RDs for Db2 数据库实例位于同一区域。

  • 您在 IAM_ROLE_ARN 选项设置中指定的角色已配置为具有将日志上传到Amazon S3 存储桶所需的权限。有关更多信息,请参阅 创建 IAM 策略

  • 在与您的 RDS for Db2 数据库实例关联的选项组中,IAM_ROLE_ARNS3_BUCKET_ARN 选项设置的 ARN 正确。有关更多信息,请参阅 配置选项组

您可以通过连接到数据库并运行 SQL 语句来检查审核日志记录配置的任务状态。有关更多信息,请参阅 检查审核配置

您还可以查看事件,详细了解日志可能丢失的原因。有关如何查看事件的信息,请参阅在 Amazon RDS 控制台中查看日志、事件和流