Db2 監査ログ記録
Amazon RDS では、Db2 監査プラグインを使用して、データベースへのユーザーのログオンやデータベースに対して実行されたクエリなどのデータベースアクティビティを記録します。RDS は、完了した監査ログを Amazon S3 バケットにアップロードします。この際、指定された AWS Identity and Access Management (IAM) ロールを使用します。
Db2 監査ログのセットアップ
Amazon RDS for Db2 データベースの監査ログを有効にするには、RDS for Db2 DB インスタンスで DB2_AUDIT
オプションを有効にします。次に、監査ポリシーを設定して、特定のデータベースの機能を有効にします。RDS for Db2 DB インスタンスでオプションを有効にするには、DB2_AUDIT
オプションのオプション設定を行います。そのためには、Amazon S3 バケットの Amazon リソースネーム (ARN) と、バケットへのアクセス許可を持つ IAM ロールを指定します。
RDS for Db2 データベースの Db2 監査ログを設定するには、次のステップを実行します。
トピック
ステップ 1: Amazon S3 バケットを作成する
まだ作成していない場合は、Amazon RDS が RDS for Db2 データベースの監査ログファイルをアップロードできる Amazon S3 バケットを作成します。監査ファイルのターゲットとして使用する S3 バケットには、以下の制限が適用されます。
-
RDS for Db2 DB インスタンスと同じ AWS リージョン にある必要があります。
-
公開することは禁止されています。
-
バケット所有者は IAM ロール所有者でもある必要があります。
S3 バケットを作成するには、「Amazon S3 ユーザーガイド」の「バケットの作成」を参照してください。
監査ログ記録を有効にすると、Amazon RDS は DB インスタンスから次の場所にログを自動的に送信します。
-
DB インスタンスレベルのログ –
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 ポリシーを作成する
DB インスタンスから Amazon S3 バケットに監査ログファイルを転送するために必要なアクセス許可を持つ IAM ポリシーを作成します。このステップは、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 では、同じ AWS アカウント が S3 バケットと RDS for Db2 DB インスタンスの両方を所有していることを確認するために、内部での s3:ListAllMyBuckets
アクションが必要です。
バケットが SSE-KMS 暗号化を使用している場合は、次のアクセス許可も含めてください。
"kms:GenerateDataKey", "kms:Decrypt"
IAM ポリシーは、AWS Management Console または AWS Command Line Interface (AWS CLI) を使用して作成できます。
Amazon S3 バケットへのアクセスを Amazon RDS に許可する IAM ポリシーを作成するには
AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで、[ポリシー] を選択します。
-
[ポリシーを作成] を選択し、[JSON] を選択します。
-
[アクションを追加] で、「S3」でフィルタリングします。アクセス ListBucket、GetBucketAcl、GetBucketLocation を追加します。
-
[リソースを追加] で、[追加] を選択します。[リソースタイプ] で、[バケット] を選択し、バケットの名前を入力します。[リソースを追加] を選択します。
-
[新しいステートメントを追加] を選択します。
-
[アクションを追加] で、「S3」でフィルタリングします。アクセス PutObject、ListMultipartUploadParts、AbortMultipartUpload を追加します。
-
[リソースを追加] で、[追加] を選択します。[リソースタイプ] で、[オブジェクト] を選択し、
バケット名/*
を入力します。[リソースを追加] を選択します。 -
[新しいステートメントを追加] を選択します。
-
[アクションを追加] で、「S3」でフィルタリングします。アクセス ListAllMyBuckets を追加します。
-
[リソースを追加] で、[追加] を選択します。[リソースタイプ] には、[すべてのリソース] を選択します。[リソースを追加] を選択します。
-
独自の KMS キーを使用してデータを暗号化する場合:
-
[新しいステートメントを追加] を選択します。
-
[アクションを追加] で、「KMS」でフィルタリングします。アクセス GenerateDataKey、Decrypt を追加します。
-
[リソースを追加] で、[追加] を選択します。[リソースタイプ] には、[すべてのリソース] を選択します。[リソースを追加] を選択します。
-
-
[Next] を選択します。
-
[ポリシー名] にこのポリシーの名前を入力します。
-
(オプション) [Description (説明)] に、ポリシーの説明を入力します。
-
[Create policy] を選択します。
Amazon S3 バケットへのアクセスを Amazon RDS に許可する IAM ポリシーを作成するには
-
create-policy コマンドを実行します。次の例では、
iam_policy_name
と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": [ "*" ] } ] }' -
ポリシーが作成されたら、ポリシーの ARN を書き留めます。ステップ 3: IAM ロールを作成して IAM ポリシーをアタッチする の ARN が必要です。
IAM ポリシーの作成については、「IAM ユーザーガイド」の「IAM ポリシーの作成」を参照してください。
ステップ 3: IAM ロールを作成して IAM ポリシーをアタッチする
このステップは、IAM ポリシーを「ステップ 2: IAM ポリシーを作成する」で作成したことを前提としています。このステップでは、RDS for Db2 DB インスタンスの IAM ロールを作成し、ロールに IAM ポリシーをアタッチします。
コンソールまたは AWS CLI を使用して、DB インスタンスの IAM ロールを作成できます。
IAM ロールを作成して IAM ポリシーをアタッチするには
AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで [Roles] (ロール) を選択します。
-
[ロールの作成] を選択します。
-
[信頼されたエンティティタイプ] で、[AWS のサービス] を選択します。
-
[サービスまたはユースケース] で、[RDS] を選択し、[RDS - データベースにロールを追加] を選択します。
-
[Next] を選択します。
-
[アクセス許可ポリシー] で、作成した IAM ポリシーの名前を検索して選択します。
-
[Next] を選択します。
-
[ロール名] に、ロールの名前を入力します。
-
(オプション) [説明] には、新しいロールの説明を入力します。
-
[ロールの作成] を選択します。
IAM ロールを作成して IAM ポリシーをアタッチするには
-
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" } ] }' -
ロールが作成されたら、このロールの ARN を書き留めます。この ARN は次のステップ「ステップ 4: Db2 監査ログ記録のオプショングループを設定する」で必要になります。
-
attach-role-policy コマンドを実行します。次の例では、
iam_policy_arn
を ステップ 2: IAM ポリシーを作成する で作成した IAM ポリシーの ARN に置き換えます。iam_role_name
は、先ほど作成した IAM ロールの名前に置き換えます。Linux、macOS、Unix の場合:
aws iam attach-role-policy \ --policy-arn
iam_policy_arn
\ --role-nameiam_role_name
Windows の場合:
aws iam attach-role-policy ^ --policy-arn
iam_policy_arn
^ --role-nameiam_role_name
詳細については、IAM ユーザーガイドの「IAM ユーザーにアクセス許可を委任するロールの作成」を参照してください。
ステップ 4: Db2 監査ログ記録のオプショングループを設定する
Db2 監査ログ記録オプションを RDS for Db2 DB インスタンスに追加するプロセスは次のとおりです。
-
新しいオプショングループを作成するか、既存のオプショングループをコピーまたは変更します。
-
すべての必須オプションを追加して構成します。
-
オプショングループを DB インスタンスに関連付けます。
Db2 監査ログ記録オプションを追加した後に DB インスタンスを再起動する必要はありません。オプショングループがアクティブになった時点で、監査を作成して監査ログを S3 バケットに保存できるようになります。
DB インスタンスのオプショングループに Db2 監査ログ記録を追加して設定するには
-
次のいずれかを選択します。
-
既存のオプショングループを使用します。
-
カスタムの DB オプショングループを作成し、そのオプショングループを使用します。詳細については、「オプショングループを作成する」を参照してください。
-
-
オプショングループに [DB2_AUDIT] オプションを追加し、オプション設定を構成します。オプションの追加方法の詳細については、「オプショングループにオプションを追加する」を参照してください。
-
[IAM_ROLE_ARN] に、「ステップ 3: IAM ロールを作成して IAM ポリシーをアタッチする」で作成した IAM ロールの ARN を入力します。
-
[S3_BUCKET_ARN] に、Db2 監査ログに使用する S3 バケットの ARN を入力します。バケットは RDS for Db2 DB インスタンスと同じリージョンにある必要があります。入力した IAM ロールに関連付けられたポリシーでは、このリソースで必要なオペレーションが許可されている必要があります。
-
-
新規または既存の DB インスタンスに、DB オプショングループを適用します。次のいずれかを選択します。
-
新しい DB インスタンスを作成する場合は、インスタンスを起動するときにオプショングループを適用します。
-
既存の DB インスタンスで、インスタンスを変更し、新しいオプショングループをアタッチして、オプショングループを適用します。詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。
-
ステップ 5: 監査ポリシーを設定する
RDS for Db2 DB データベースの監査ポリシーを設定するには、RDS for Db2 インスタンスのマスターユーザー名とマスターパスワードを使用して rdsadmin
データベースに接続します。次に、データベースの DB 名と該当するパラメータ値を使用して、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
usingmaster_password
" db2 "call rdsadmin.configure_db_audit('testdb
', 'ALL', 'BOTH', ?)"
ステップ 6: 監査設定を確認する
監査ポリシーが正しく設定されていることを確認するには、監査設定のステータスを確認します。
設定を確認するには、RDS for Db2 DB インスタンスのマスターユーザー名とマスターパスワードを使用して、rdsadmin
データベースに接続します。次に、データベースの DB 名を使用して次の SQL ステートメントを実行します。次の例では、DB 名は 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 監査ログ記録を設定したら、特定のデータベースの監査ポリシーを変更したり、データベースレベルまたは DB インスタンス全体の監査ログ記録を無効にしたりできます。ログファイルがアップロードされる Amazon S3 バケットを変更することもできます。
Db2 監査ポリシーの変更
特定の RDS for Db2 データベースの監査ポリシーを変更するには、rdsadmin.configure_db_audit
ストアドプロシージャを実行します。このストアドプロシージャでは、監査ポリシーのカテゴリ、カテゴリ設定、エラータイプの設定を変更できます。詳細については、「rdsadmin.configure_db_audit」を参照してください。
ログファイルの場所の変更
ログファイルがアップロードされる Amazon S3 バケットを変更するには、次のいずれかを実行します。
-
RDS for Db2 DB インスタンスにアタッチされている現在のオプショングループを変更する – 新しいバケットを指すように
DB2_AUDIT
オプションのS3_BUCKET_ARN
設定を更新します。また、アタッチされたオプショングループのIAM_ROLE_ARN
設定で指定された IAM ロールにアタッチされた IAM ポリシーを必ず更新してください。この IAM ポリシーで、必要なアクセス許可を新しいバケットに提供する必要があります。IAM ポリシーのアクセス許可の詳細については、「IAM ポリシーを作成する」を参照してください。 -
RDS for Db2 DB インスタンスを別のオプショングループにアタッチする – DB インスタンスを変更して、アタッチされているオプショングループを変更します。新しいオプショングループが、正しい
S3_BUCKET_ARN
およびIAM_ROLE_ARN
設定で設定されていることを確認します。DB2_AUDIT
オプションこれらの設定方法については、「オプショングループを設定する」を参照してください。
オプショングループを変更する場合は、変更をすぐに適用してください。詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。
Db2 監査ログ記録の無効化
Db2 監査ログ記録を無効にするには、次のいずれかを実行します。
-
RDS for Db2 DB インスタンスの監査ログ記録を無効にする – DB インスタンスを変更し、
DB2_AUDIT
オプションを持つオプショングループをそのインスタンスから削除します。詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。 -
特定のデータベースの監査ログ記録を無効にする – 監査ログ記録を停止し、データベースの DB 名で
rdsadmin.disable_db_audit
を呼び出して監査ポリシーを削除します。詳細については、「rdsadmin.disable_db_audit」を参照してください。db2 "call rdsadmin.disable_db_audit( '
db_name
', ?)"
監査ログの表示
Db2 監査ログ記録を有効にしてから、Amazon S3 バケットの監査データを表示するまで少なくとも 1 時間待ちます。Amazon RDS は、RDS for Db2 DB インスタンスから次の場所にログを自動的に送信します。
-
DB インスタンスレベルのログ –
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 DB インスタンスレベルのログファイルのフォルダのリストを示しています。
![[オブジェクト] タブが選択された Amazon S3 コンソール。RDS for Db2 DB インスタンスレベルのログファイルのフォルダのリストが表示されています。](images/db2-instance-level-audit-logs.png)
次の Amazon S3 コンソールのスクリーンショット例は、RDS for Db2 DB インスタンスのデータベースレベルのログファイルを示しています。
![[オブジェクト] タブが選択された Amazon S3 コンソール。RDS for Db2 DB インスタンスのデータベースレベルのログファイルが表示されています。](images/db2-database-level-audit-logs.png)
監査ログ記録のトラブルシューティング
次の情報を使用して、Db2 監査ログ記録で発生する一般的な問題をトラブルシューティングします。
監査ポリシーを設定できない
ストアドプロシージャ rdsadmin.configure_db_audit
を呼び出すとエラーが返される場合、DB2_AUDIT
オプションを持つオプショングループが RDS for Db2 DB インスタンスに関連付けられていない可能性があります。DB インスタンスを変更してオプショングループを追加し、ストアドプロシージャを再度呼び出してください。詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。
Amazon S3 バケットにデータがない
Amazon S3 バケットにログ記録データがない場合は、以下を確認してください。
-
Amazon S3 バケットが RDS for Db2 DB インスタンスと同じリージョンにある。
-
IAM_ROLE_ARN
オプション設定で指定したロールに、Amazon S3 バケットにログをアップロードするために必要なアクセス許可が設定されている。詳細については、「IAM ポリシーを作成する」を参照してください。 -
RDS for Db2 DB インスタンスに関連付けられたオプション設定
IAM_ROLE_ARN
とS3_BUCKET_ARN
の ARN が正しい。詳細については、「オプショングループを設定する」を参照してください。
監査ログ記録設定のタスクステータスを確認するには、データベースに接続して SQL ステートメントを実行します。詳細については、「監査設定を確認する」を参照してください。
イベントをチェックして、ログが欠落している理由の詳細を確認することもできます。イベントを表示する方法については、「Amazon RDS コンソールでのログ、イベント、およびストリーミングの表示」を参照してください。