オブジェクト・ストレージへのPostgreSQLログのエクスポート

PostgreSQLログ(pgaudit拡張によって生成された監査ログを含む)をOracle Cloud Infrastructure Object Storageバケットにエクスポートして、オブジェクト・ストレージから直接アーカイブ、ダウンロードおよびアクセスできるようにし、アクセシビリティとログ管理の面を強化します。

前提条件

PostgreSQLログをオブジェクト・ストレージ・バケットにエクスポートするようにデータベース・システムを構成する前に、バケットが存在し、バケットにアップロードするためのPostgreSQLリソース・アクセス権を持つOCIデータベースに付与する必要があります。新しいバケットを作成する必要がある場合は、オブジェクト・ストレージ・バケットの作成を参照してください。バケットへのリソース・アクセスを許可するポリシーを作成するには、必要なIAMポリシーを参照してください。

必要なIAMポリシー

PostgreSQLを持つOCIデータベースは、リソース・プリンシパルを使用して、オブジェクト・ストレージ・バケットなどの他のOracle Cloud Infrastructureリソースを認証およびアクセスします。データベース・システム、特定のデータベース・システム・セットまたはすべてのデータベース・システムにオブジェクト・ストレージ・バケットへのアクセス権を付与できます。

バケットの読取りおよびバケットへのオブジェクトの書込みに対する特定のデータベース・システム・アクセス権を付与するには、次のポリシーを使用します:

allow any-user to read buckets in compartment <compartment-name> where ALL {request.principal.id = '<dbsystem_OCID>', target.bucket.name = '<bucket_name>'}
allow any-user to manage objects in compartment <compartment-name> where ALL {request.principal.id = '<dbsystem_OCID>', target.bucket.name = '<bucket_name>'}

すべてのデータベース・システムに読取りバケットへのアクセス権を付与し、バケットにオブジェクトを書き込むには、次のポリシーを使用します:

allow any-user to read buckets in compartment <compartment-name> where ALL {request.resource.type = 'postgresqldbsystem', target.bucket.name = '<bucket name>'}
allow any-user to manage objects in compartment <compartment-name> where ALL {request.resource.type = 'postgresqldbsystem', target.bucket.name = '<bucket name>'}

動的グループを使用すると、ユーザー・グループと同様に、PostgreSQLデータベース・システムをプリンシパル・アクターとしてOCIデータベースをグループ化できます。まず、アクセスが必要なデータベース・システムを動的グループに配置し、その動的グループにオブジェクトをバケットにアップロードするためのアクセス権を付与する必要があります。

動的グループのメンバーシップは、定義する基準のセット(一致ルールと呼ばれる)によって異なります。次の例は、定義済コンパートメント内のすべてのデータベース・システムを含む一致ルールを示しています:

all { resource.type='postgresqldbsystem', resource.compartment.id = 'ocid1.compartment.oc1..exampleuniqueID'}

次のように、より具体的なアクセス制御のために動的グループを作成するときに、定義済タグを使用することもできます。

all { resource.type = 'postgresqldbsystem', tag.<tagnamespace>.<tagkey>.value='<tagvalue>'}

詳細は、動的グループの管理および動的グループの作成を参照してください。

バケットの読取りおよびバケットへのオブジェクトの書込みへのアクセス権を動的グループに付与するには、次のようなポリシーを使用します:

Allow dynamic-group <PSQL_DynamicGroup> to read buckets in compartment <compartment-name> where ALL {target.bucket.name = '<bucket name>'}
Allow dynamic-group <PSQL_DynamicGroup> to manage objects in compartment <compartment-name> where ALL {target.bucket.name = '<bucket name>'}

ログ・エクスポート用のデータベース・システムの構成

リソース・プリンシパル・アクセスを設定した後、カスタム構成パラメータを定義してログをオブジェクト・ストレージにエクスポートするように、PostgreSQLデータベース・システムでOCIデータベースを構成します。次の構成パラメータを指定するために、構成を作成またはコピーする必要がある場合があります。

  • oci.log_destination: oci_object_storage
  • oci.log_destination_os_namespace: テナンシのオブジェクト・ストレージ・ネームスペース
  • oci.log_destination_os_bucket_name: ログのエクスポート先のオブジェクト・ストレージ・バケット名

ログ・エクスポートの詳細が指定されている構成が完了したら、その構成をデータベース・システムに適用します。詳細は、データベース・システムに適用される構成の変更を参照してください。

オブジェクトの詳細

ログは、次の命名規則を使用して、指定されたオブジェクト・ストレージ・バケットにアップロードされます:

<DBSYSTEM_ID>/<DB_INSTANCEID>/postgresql-<DATE>_######.csv.gz

  • <DBSYSTEM_ID>: PostgreSQLデータベース・システムを含むOCIデータベースのID。
  • <DB_INSTANCEID>: PostgreSQLデータベースのインスタンスID。
  • <DATE>: ログが生成された日付(YYYY-MM-DD形式)。
  • ######: 順序番号。

たとえば:

mydbsystem/instance123/postgresql-2025-01-27_000001.csv.gz