Amazon Web Services ブログ
監査のユースケースで Amazon QLDB をAmazon Aurora PostgreSQL に置き換える
本投稿は Replace Amazon QLDB with Amazon Aurora PostgreSQL for audit use cases (記事公開日: 2024 年 7 月 18 日) のブログを翻訳したものです。
Amazon Quantum Ledger Database (Amazon QLDB) はフルマネージド型の台帳データベースサービスで、台帳にコミットされたすべてのトランザクションの完全かつ検証可能な履歴を提供します。Amazon QLDB 台帳の中核となるのがジャーナルです。ジャーナルは追加専用のデータ構造で、ブロックとして保存されたトランザクションの連続的かつイミュータブルなレコードが含まれます。ジャーナル内のブロックは、暗号ハッシュを使用して連結されます。暗号ハッシュチェーンは、暗号検証方法を使用してトランザクションデータの整合性を提供します。トランザクション履歴のイミュータブルで暗号化による検証可能性という 2 つの特性は Amazon QLDB 固有のものであり、お客様が Amazon QLDB を使用してデータの整合性の高い監査と変更履歴を提供する理由でもあります。
この投稿では、監査用に Amazon QLDB の代わりに Amazon Aurora PostgreSQL 互換エディションを使用する方法と、Amazon QLDB が提供する独自の機能の一部を Amazon Aurora PostgreSQL のどの機能に置き換えることができるかについて説明します。
ジャーナルの置き換え
Amazon QLDB では、基になるジャーナルには、クエリステートメントやデータ定義コマンドを含む、コミットされたすべてのトランザクションの不変なレコードが格納されます。ジャーナルのトランザクション履歴は Amazon Simple Storage Service (Amazon S3) バケットにエクスポートして、監査目的でアクセスできます。Amazon Aurora PostgreSQL は、変更に関する永続的で不変なレコードを保持しません。代わりに、その履歴を監査データとして生成し、データベースの外部に保存する必要があります。
Amazon Aurora PostgreSQL は オープンソース監査ロギングエクステンションである pgAudit をサポートしています。これにより、PostgreSQL の標準のロギングと比べてきめ細かなセッションおよびオブジェクトの監査ロギングが可能になります。DDL 操作、読み取り、書き込み、ロールと権限の変更、関数の実行、バキュームやチェックポイントなどのユーザー開始操作などの監査するイベントを選択できます。ログ出力は、Amazon RDS コンソールからアクセスできる標準の postgres.log
ファイルに送信され、最大 7 日間保存できます。監査ログデータを永続的に保持するには、ログを Amazon CloudWatch Logs に送信するように Aurora クラスターを設定して、ログを無期限に保持することができます。Amazon CloudWatch Logs は、ログのクエリ、モニタリング、アラート、および管理機能を提供します。CloudWatch Logs は保存時にログファイルを暗号化します。ログの削除を禁止する機能を含め、AWS Identity and Access Management (IAM) を使用して CloudWatch Logsへのアクセスを管理できます。
CloudWatch Logs は、監査人がデータベース監査を行う際に使用するのが難しいインターフェイスかもしれません。「Amazon S3 と Amazon Athena を使用して Amazon RDS for PostgreSQL の一元化された監査データ収集を構築する」という投稿では、監査人が監査データをクエリするためのわかりやすいインターフェイスを提供するソリューションを提供しています。このソリューションでは、Amazon Data Firehose を使用してデータベースのログを CloudWatch Logs から Amazon S3 に送信し、Amazon Athena を使用して SQL でクエリを実行できます。次の図は、このアーキテクチャを示しています。
history() 関数の置き換え
Amazon QLDB history() 関数を使用すると、テーブル内のすべてのレコードのすべてのリビジョンにアクセスできます。history() 関数を使用して、時間の経過とともにデータレコードがどのように変化したかを確認できます。別のテーブルの行に加えられた変更のコピーを格納する監査テーブルを使用して、この機能を Amazon Aurora PostgreSQL で複製できます。
監査テーブルの従来のアプローチは、監査対象のテーブルの構造を反映したテーブルです。トリガーは、メインテーブルの INSERT、UPDATE、DELETE のたびに実行されて、監査テーブルに変更された行のコピーを送信します。この方法のバリエーションでは、監査された行が JSON として保存されるため、ソーステーブルの構造が変更された場合に監査テーブルの構造を変更する必要がなくなります。テーブル権限は、監査テーブル内の行の変更を禁止するように設定されています。次の図は、この設計を示しています。
このアプローチは、正しい権限があればユーザーが監査テーブルのデータを変更できるという点で Amazon QLDB のHistory とは異なります。データアクセス権限の監査は、監査テーブル内のデータの整合性を維持するために重要です。監査テーブルを安全な専用の監査データベースに分離することで、この問題が解消され、監査データの信頼性が高まります。「Amazon Aurora PostgreSQL テーブルの監査記録を作成する」という投稿では、次の図に示すように、AWS Database Migration Service (AWS DMS) を使用してソースデータベースの変更を取得し、監査データベースに安全に保存するソリューションを提供しています。
Amazon QLDB streamsの置き換え
Amazon QLDB streams は、ニアリアルタイムで台帳イベントを Amazon Kinesis Data Streams にフィードします。ストリームレコードには、台帳へのデータ更新と、データベースで実行されたクエリステートメントのレコードが含まれます。ストリームを使用して、台帳から他のシステムにデータを複製できます。ストリームイベントをニアリアルタイムで分析して、疑わしいアクティビティや重要なテーブルやデータへの変更を特定できます。
データレプリケーション
Aurora をプライマリデータベースとして使用する場合、AWS DMS を使用して Aurora から他のシステムにデータをレプリケーションできます。AWS DMS は、1 回限りのデータ移行用だけではありません。ソースの Aurora PostgreSQL データベースから変更データキャプチャ (CDC) を使用して 1 つ以上のターゲットデータベースへの継続的なレプリケーションをサポートしています。Amazon QLDB ストリームを使用してデータをレプリケートする場合とは異なり、AWS DMS を介して Amazon Aurora PostgreSQL からデータをレプリケートする場合、追加のコーディングは必要ありません。AWS DMS は、宣言型 JSON 構文を使用して、ソースデータベースとターゲットデータベース間でデータをマッピングおよび変換します。
ニアリアルタイムの監査
Amazon Aurora PostgreSQL を使用してニアリアルタイムの監査機能を利用するには、Database Activity Streams を使用できます。Database Activity Streams は、Aurora クラスターから Kinesis Data Stream に低レベルの監査情報をニアリアルタイムでフィードします。Amazon QLDB ストリームと同様に、監査イベントをフィルタリング、分析、処理するカスタム Kinesis Data Stream コンシューマーを構築できます。Database Activity Streams は、Amazon QLDB が提供するものよりもはるかに幅広く監査のデータポイントをキャプチャします。Aurora は Amazon QLDB のように DML イベントと DDL イベントを報告しますが、接続、ロールと権限の変更、関数の実行、バキュームやチェックポイントなどのユーザー開始操作も報告します。Database Activity Streams と Amazon QLDB ストリームの主な違いは、Amazon QLDB はコミットされたトランザクションのアクションのみを報告するため、読み取り後にトランザクションをキャンセルすることで、ユーザーが検出されない読み取りを実行できることです。Aurora は、コミットされていないトランザクションも含め、すべてのアクションをアクティビティストリームに報告します。
Database Activity Streams は、データベース管理者のアクティビティの信頼できるログを提供します。Aurora クラスターのアクティビティストリームのアクティベーションはデータベースの外部で実行され、その操作へのアクセスはデータベース権限ではなく IAM 権限によって制御されます。データベース管理者には、監査データの収集や Kinesis Data Stream への公開を妨げるだけの十分なアクセス権がありません。また、データベース管理者は Kinesis Data Stream 内の監査データにアクセスできないため、そのデータの処理を妨害することはできません。
Amazon QLDB では、基礎となるジャーナルにはコミットされたすべてのトランザクションの不変なレコードが格納されます。ジャーナルのトランザクション履歴には、テーブルの history() 関数をクエリするか、Kinesis Data Streams を介してジャーナルを再ストリーミングすることで、いつでもアクセスできます。この機能は Database Activity Streams には存在しません。
ストリーミングされた監査データの有効期限が切れると、そのデータは失われます。監査データを保持するには、Amazon Data Firehose を使用してストリーミングされた監査イベントを 、Amazon S3 に保存することで無期限に保持できます。「Filter Amazon Aurora database activity stream data for segregation and monitoring」という投稿では、Firehose を使用して監査イベントをフィルタリングして Amazon S3 に送信して長期保存するソリューションを記載しています。
pgAudit と Aurora Database Activity Streams による監査の詳細については、「Part 1: Audit Aurora PostgreSQL databases using Database Activity Streams and pgAudit」を参照してください。
まとめ
この投稿では、監査機能および変更履歴機能を提供する Amazon Aurora PostgreSQL の機能について説明しました。この機能は、監査ユースケース向けに Amazon QLDB が提供する独自の機能の一部に取って代わることができます。
次の記事「Amazon QLDB のAmazon Aurora PostgreSQL への移行」では、Amazon QLDB 台帳から Amazon Aurora PostgreSQL にデータを移行するのに役立つソリューションを提供します。
台帳移行の計画や、Amazon Aurora PostgreSQL が台帳データの適切な保存先であるかどうかの判断については、AWS の担当者にお問い合わせください。
著者について
Dan Blaner は、台帳とリレーショナルデータベースを専門とするプリンシパルソリューションアーキテクトです。彼は学ぶこと、物事を理解すること、他の人が物事を理解するのを助けることを楽しんでいます。休みはベースを弾き、仲の良い友達とbad music 作りを楽しんでいます。