すべてのプロダクト
Search
ドキュメントセンター

DataWorks:PostgreSQL

最終更新日:Mar 20, 2026

PostgreSQL データソースは、PostgreSQL からのデータ読み取りおよび PostgreSQL へのデータ書き込みのための双方向チャネルを提供します。コードレス UI またはコードエディタを使用して、データ同期タスクを設定できます。本トピックでは、DataWorks が PostgreSQL のデータ同期をどのようにサポートするかについて説明します。

対応バージョン

PostgreSQL バージョン 101112131415、および 16.4 のデータソースを設定できます。ご利用の PostgreSQL データベースのバージョンを確認するには、以下のステートメントを実行します。

SHOW SERVER_VERSION;

制限事項

オフライン読み取りおよび書き込み

説明

ビューからデータを読み取ることができます。

  • PostgreSQL データソースは、SCRAM-SHA-256 方式を含むパスワード認証をサポートしています。PostgreSQL データベースでパスワードまたは認証方式を変更した場合、データソースの構成を更新し、接続テストを再度実行したうえで、関連するタスクを手動で実行して変更内容を検証する必要があります。

  • PostgreSQL のテーブル名またはフィールド名が数字で始まる場合、大文字と小文字を区別する場合、またはハイフン (-) を含む場合、その名前を二重引用符 ("") で囲む必要があります。それ以外の場合、PostgreSQL プラグインはデータを読み取ったり書き込んだりできません。PostgreSQL Reader および Writer プラグインでは、二重引用符 ("") は JSON のキーワードです。そのため、二重引用符をバックスラッシュ (\) でエスケープする必要があります。たとえば、テーブル名が 123Test の場合、エスケープされた名前は \"123Test\" となります。

    説明
    • 開始および終了の二重引用符の両方をバックスラッシュ (\) でエスケープする必要があります。

    • コードレス UI ではエスケープはサポートされていません。エスケープを行うには、コードエディタに切り替える必要があります。

    以下のコードは、コードエディタでのエスケープ文字の使用例です。

    "parameter": {
        "datasource": "abc",
        "column": [
            "id",
            "\"123Test\"", // エスケープ文字を追加します。
    ],
    "where": "",
    "splitPk": "id",
    "table": "public.wpw_test"
    },
  • 一意なインデックスに基づく PostgreSQL データソースのデータ更新はサポートされていません。データを更新するには、まずデータを一時テーブルに書き込んでから、RENAME 操作を使用します。

リアルタイム読み取り

Data Integration におけるリアルタイム同期タスクには、以下の制限が適用されます。

  • Data Integration は、ADD COLUMN に対して特別なサポートを提供します。

    • 制約:単一トランザクション内で、ADD COLUMN 操作を他の ADD COLUMNDROP COLUMN、またはその他のデータ定義言語 (DDL) ステートメントと組み合わせることはできません。

      重要

      ADD COLUMNDROP COLUMN または RENAME COLUMN などの ALTER COLUMN 動作と併用すると、データ同期タスクが失敗します。

    • 制限:Data Integration は、ADD COLUMN 以外の DDL 操作を検出できません。

  • ALTER TABLE および CREATE TABLE 操作はサポートされていません。

  • TEMPORARYUNLOGGED、および Hyper テーブルのレプリケーションはサポートされていません。PostgreSQL には、これらのタイプのテーブルのログを解析してサブスクライブする仕組みが提供されていません。

  • Sequences (serial/bigserial/identity) のレプリケーションはサポートされていません。

  • TRUNCATE 操作はサポートされていません。

  • ラージオブジェクト (Bytea) のレプリケーションはサポートされていません。

  • ビュー、マテリアライズドビュー、および外部テーブルのレプリケーションはサポートされていません。

  • PostgreSQL を単一テーブルまたは全データベースのリアルタイム同期のソースとして使用する場合、構成済みのデータベースユーザーが所有するテーブルのみを同期できます。

対応データ型

ほとんどの PostgreSQL データ型がサポートされています。ただし、一部のデータ型はオフライン読み取りおよび書き込み操作ではサポートされていません。ご利用のデータ型がサポートされていることを確認してください。

以下の表に、PostgreSQL データ型のマッピングを示します。

カテゴリ

PostgreSQL データ型

整数型

BIGINT、BIGSERIAL、INTEGER、SMALLINT、および SERIAL

浮動小数点型

DOUBLE PRECISION、MONEY、NUMERIC、および REAL

文字列型

VARCHAR、CHAR、TEXT、BIT、および INET

日付および時刻型

DATE、TIME、および TIMESTAMP

ブール型

BOOL

バイナリ型

BYTEA

説明
  • 表に記載されていないデータ型はサポートされていません。

  • PostgreSQL Reader の場合、MONEY、INET、および BIT データ型は、a_inet::varchar などの構文を使用して変換する必要があります。

事前準備

DataWorks でデータ同期を実行する前に、このセクションで説明するように PostgreSQL 環境を準備する必要があります。この準備により、PostgreSQL データ同期タスクを想定どおりに設定および実行できるようになります。以下のセクションでは、必要な準備について説明します。

準備 1:アカウントの作成および権限の構成

後続の操作用にデータベースログインアカウントを作成します。このアカウントには、REPLICATION 権限および LOGIN 権限が必要です。

説明

リアルタイム同期は論理レプリケーションのみをサポートしています。論理レプリケーションは、パブリッシュおよびサブスクライブのモデルを使用します。このモデルでは、1 つ以上のサブスクライバーが、パブリッシャーノード上の 1 つ以上のパブリケーションをサブスクライブします。サブスクライバーは、自身がサブスクライブしているパブリケーションからデータをプルします。

テーブルの論理レプリケーションは通常、パブリッシャーのデータベース内のデータのスナップショットを取得し、それをサブスクライバーにコピーすることから開始されます。スナップショットのコピーが完了すると、パブリッシャーでの変更がリアルタイムでサブスクライバーに送信されます。

  1. アカウントを作成します。

    詳細については、「アカウントおよびデータベースの作成」をご参照ください。

  2. 権限を構成します。

    アカウントに replication 権限があるかどうかを確認します。

    select userepl from pg_user where usename='xxx'

    コマンドの戻り値が True の場合、権限が付与されています。False の場合は、権限が付与されていません。権限を付与するには、以下のステートメントを実行します。

    ALTER USER <user> REPLICATION;

準備 2:セカンダリデータベースのサポート状況の確認

SELECT pg_is_in_recovery()

プライマリデータベースのみがサポートされています。コマンドの戻り値は False である必要があります。True の場合は、そのデータベースがセカンダリデータベースであることを意味します。リアルタイム同期はセカンダリデータベースをサポートしていません。データソースの構成を変更して、プライマリデータベースを使用する必要があります。詳細については、「PostgreSQL データソースの構成」をご参照ください。

準備 3:wal_levellogical に設定されているかの確認

show wal_level

wal_level パラメーターは、wal_log のレベルを指定します。コマンドの戻り値は logical である必要があります。それ以外の場合は、論理レプリケーション機構がサポートされていません。

準備 4:wal_sender プロセスの起動可否の確認

-- max_wal_senders を照会します。
show max_wal_senders;

-- pg_stat_replication プロセスの数を照会します。
select count(*) from pg_stat_replication

max_wal_senders の値が空でなく、max_wal_senders の値が pg_stat_replication のエントリ数より大きい場合、アイドル状態の wal_sender プロセスが利用可能です。PostgreSQL データベースは、データ同期プログラムがログをサブスクライバーに送信するために、wal_sender プロセスを起動します。

同期対象の各テーブルについて、ALTER TABLE [tableName] REPLICA IDENTITY FULL ステートメントを実行して、必要な権限を付与する必要があります。それ以外の場合、リアルタイム同期タスクでエラーが報告されます。

リアルタイム PostgreSQL 同期タスクが開始されると、データベース内に自動的にスロットおよびパブリケーションが作成されます。スロット名は di_slot_ + ソリューション ID の形式であり、パブリケーション名は di_pub_ + ソリューション ID の形式です。リアルタイム同期タスクが停止または非公開になった後は、スロットおよびパブリケーションを手動で削除する必要があります。そうしないと、PostgreSQL の Write-Ahead Logging (WAL) が継続して増加する可能性があります。

データソースの追加

DataWorks で同期タスクを開発する前に、データソース管理 の手順に従って、必要なデータソースを DataWorks に追加する必要があります。データソースを追加する際に、DataWorks コンソールの パラメーターの説明を表示することで、各パラメーターの意味を確認できます。

PostgreSQL データベースで SSL 認証が有効になっている場合、DataWorks で PostgreSQL データソースを追加する際にも SSL 認証を有効にする必要があります。詳細については、「付録 2:PostgreSQL データソースへの SSL 認証の追加」をご参照ください。

DataWorks による PostgreSQL 同期タスクの開発ガイド

同期タスクの設定に関するエントリポイントおよび手順については、以下の設定ガイドをご参照ください。

単一テーブルのオフライン同期タスクの設定ガイド

全データベースのオフライン読み取りおよびリアルタイム同期タスクの設定ガイド

詳細については、「全データベースのリアルタイム同期タスクの設定」をご参照ください。

よくある質問

  • アクティブ/スタンバイ同期構成におけるデータ復元

    この問題は、PostgreSQL がアクティブ/スタンバイ災害復旧用に構成されている場合に発生することがあります。この構成では、セカンダリデータベースがプライマリデータベースから継続的にデータを復元します。プライマリデータベースとセカンダリデータベース間のデータ同期には遅延が発生します。ネットワーク遅延などの場合、セカンダリデータベースのデータはプライマリデータベースのデータと大きく異なることがあります。その結果、セカンダリデータベースから同期されたデータは、プライマリデータベースの完全かつ最新のイメージではありません。

  • 整合性制約

    PostgreSQL は、強力なデータ整合性を保証するクエリインターフェイスを提供するリレーショナルデータベース管理システム (RDBMS) です。たとえば、同期タスク実行中に別のプロセスがデータベースにデータを書き込む場合、PostgreSQL Reader はデータベースのスナップショット機能により、更新されたデータを取得しません。

    上記の説明は、シングルスレッドモデルにおける PostgreSQL Reader のデータ整合性に適用されます。PostgreSQL Reader は、設定に応じて並行データ抽出も使用できます。この場合、データ整合性を厳密に保証することはできません。

    PostgreSQL Reader が splitPk パラメーターに基づいてデータをシャーディングすると、複数の並行タスクを起動してデータを同期します。これらの並行タスクは同じ読み取りトランザクションに属しておらず、それぞれに時間的な間隔があります。したがって、同期されたデータは単一の整合性のあるスナップショットからのものではありません。

    マルチスレッド間で整合性のあるスナップショットを実現する技術的ソリューションは、現在提供されていません。この問題はエンジニアリングの観点からのみ解決できます。以下のソリューションにはトレードオフが伴い、要件に応じていずれかを選択できます。

    • データシャーディングを行わないシングルスレッド同期を使用します。この方法は速度が遅くなりますが、整合性が保証されます。

    • 他のデータ書き込みを無効にして、データを静的状態に保ちます。たとえば、テーブルをロックしたり、セカンダリデータベースの同期を無効にしたりできます。この方法はオンラインサービスに影響を与える可能性があります。

  • データベースのエンコーディングの問題

    PostgreSQL サーバーは、簡体中国語向けに EUC_CN および UTF-8 のエンコーディングのみをサポートしています。PostgreSQL Reader は、データ抽出に Java Database Connectivity (JDBC) を使用します。JDBC はさまざまなエンコーディングと互換性があり、下位レイヤーでエンコーディング変換を実行します。したがって、PostgreSQL Reader にはエンコーディングを明示的に指定する必要はありません。PostgreSQL Reader はエンコーディングを自動的に検出し、変換します。

    PostgreSQL の下位レイヤーでの書き込みエンコーディングが、構成済みのエンコーディングと一致しない場合、PostgreSQL Reader はこの問題を特定したり解決策を提供したりできません。その結果、エクスポートされたデータに文字化けが含まれる可能性があります。

  • 増分データ同期の方法

    PostgreSQL Reader は JDBC SELECT ステートメントを使用してデータを抽出します。これにより、SELECT…WHERE… を使用した増分データ抽出が可能になります。

    • オンラインアプリケーションがすべての変更に対してタイムスタンプを含む修正フィールドを設定する場合、PostgreSQL Reader は前回の同期時点のタイムスタンプを使用した WHERE 句を追加して、新しいデータまたは更新されたデータのみを取得できます。

    • ストリームデータの場合、PostgreSQL Reader は前回の同期時点の最大の自動インクリメント ID を使用した WHERE 句を追加できます。

    ビジネスロジックに新規および変更データを区別するフィールドが含まれていない場合、PostgreSQL Reader は増分データ同期を実行できません。この場合、完全データ同期のみが可能です。

  • SQL のセキュリティ

    PostgreSQL Reader は、querySql パラメーターを提供しており、これによりデータ抽出用の SELECT ステートメントをカスタマイズできます。PostgreSQL Reader は、querySql ステートメントに対してセキュリティチェックを一切実行しません。

付録 1:スクリプト例およびパラメーターの説明

コードエディタを使用したバッチ同期タスクの構成

コードエディタを使用してバッチ同期タスクを構成する場合、統一されたスクリプトフォーマット要件に従って、スクリプト内の関連パラメーターを構成する必要があります。詳細については、「コードエディタの使用」をご参照ください。以下では、コードエディタを使用してバッチ同期タスクを構成する際に、データソースに対して構成する必要があるパラメーターについて説明します。

Reader スクリプト例

PostgreSQL データベースからデータを同期および抽出するジョブを構成するには、「コードエディタの使用」の手順に従います。

{
    "type":"job",
    "version":"2.0",// バージョン番号。
    "steps":[
        {
            "stepType":"postgresql",// プラグイン名。
            "parameter":{
                "datasource":"",// データソース。
                "column":[// フィールド。
                    "col1",
                    "col2"
                ],
                "where":"",// フィルター条件。
                "splitPk":"",// データシャーディングに使用するフィールド。データ同期は並行タスクを起動してデータを同期します。
                "table":""// テーブル名。
            },
            "name":"Reader",
            "category":"reader"
        },
        { 
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"// エラーとなるレコード数。
        },
        "speed":{
            "throttle":true, // throttle が false の場合、mbps パラメーターは無効となり、速度制限は無効になります。throttle が true の場合、速度制限が有効になります。
            "concurrent":1, // 並行ジョブ数。
            "mbps":"12"// 速度制限率。1 mbps は 1 MB/s に相当します。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Reader スクリプトパラメーター

パラメーター

説明

必須

デフォルト値

datasource

データソースの名前です。コードエディタではデータソースの追加がサポートされています。このパラメーターの値は、追加したデータソースの名前と同じである必要があります。

はい

なし

table

同期対象のテーブルの名前です。

はい

なし

column

指定されたテーブルから同期するカラムのセットです。フィールド情報を記述するには JSON 配列を使用します。デフォルトでは、すべてのカラムが使用されます (例:[ * ])。

  • 同期するカラムのサブセットを選択できます。

  • カラムの順序を変更できます。カラムはテーブルスキーマと同じ順序である必要はありません。

  • 定数を構成できます。MySQL SQL 構文に従う必要があります。たとえば、["id", "table","1", "'mingya.wmy'", "'null'", "to_char(a+1)", "2.3" , "true"] のようにします。

    • id は通常のカラム名です。

    • table はカラム名であり、予約語でもあります。

    • 1 は整数定数です。

    • 'mingya.wmy' は文字列定数です。シングルクォーテーションで囲む必要があります。

    • 'null' は文字列です。

    • to_char(a+1) は文字列の長さを計算する関数です。

    • 2.3 は浮動小数点数です。

    • true はブール値です。

  • column パラメーターに対してカラムのセットを明示的に指定する必要があります。空にすることはできません。

はい

なし

splitFactor

データ同期のシャード数を指定します。同時実行スレッドを複数構成した場合、データは 同時実行スレッド数 × splitFactor の数だけシャード化されます。たとえば、同時実行スレッド数が 5 で splitFactor が 5 の場合、5 つの同時実行スレッドを使用してシャーディングが行われ、データは 25 (5 × 5) 個のシャードに分散されます。

説明

推奨値は 1 ~ 100 です。大きな値を指定すると、メモリ不足 (OOM) エラーが発生する可能性があります。

いいえ

5

splitPk

PostgreSQL Reader がデータを抽出する際、splitPk パラメーターを指定すると、splitPk で表されるフィールドに基づいてデータをシャーディングすることを意味します。その後、データ同期は並行タスクを起動してデータ同期の効率を向上させます。

  • splitPk をテーブルのプライマリキーに設定することを推奨します。プライマリキーは通常均等に分散されており、シャード内のデータホットスポットを防止するのに役立ちます。

  • splitPk パラメーターは、シャーディング用に整数データのみをサポートします。文字列、浮動小数点数、日付、その他の型はサポートされていません。サポートされていない型を指定した場合、splitPk 機能は無視され、単一チャンネルで同期が実行されます。

  • splitPk パラメーターが指定されていない場合 (つまり、splitPk が指定されていないか、splitPk の値が空の場合)、テーブルのデータ同期は単一チャンネルで実行されます。

いいえ

なし

where

フィルター条件です。PostgreSQL Reader は、指定された columntable、および where パラメーターに基づいて SQL ステートメントを構築し、その SQL ステートメントに基づいてデータを抽出します。たとえば、テスト中には、where 句を使用してビジネスシナリオを指定できます。通常、where 句を id>2 and sex=1 に設定して、当日のデータを同期することが考えられます。

  • where 句は、効果的な増分ビジネス同期に使用できます。

  • where 句が構成されていないか、空の場合、テーブル全体が同期されます。

いいえ

なし

querySql (高度モード。コードレス UI では使用できません。)

一部のビジネスシナリオでは、where パラメーターではフィルター条件を十分に記述できません。このパラメーターを使用して、フィルター用のカスタム SQL を定義できます。このパラメーターを構成すると、データ同期システムはテーブル、カラム、splitPk パラメーターを無視し、このパラメーターの内容を使用してデータをフィルターします。たとえば、複数テーブルの JOIN 後のデータを同期するには、select a,b from table_a join table_b on table_a.id = table_b.id を使用します。querySql を構成すると、PostgreSQL Reader は table、column、where パラメーターを無視します。

いいえ

なし

fetchSize

このパラメーターは、データベースサーバーから一度にフェッチするデータレコード数を定義します。この値は、Data Integration とサーバー間のネットワークインタラクション数を決定し、データ抽出のパフォーマンスを大幅に向上させることができます。

説明

fetchSize の値が大きすぎると (>2048)、データ同期プロセスでメモリ不足 (OOM) エラーが発生する可能性があります。

いいえ

512

Writer スクリプト例

以下のコードは、スクリプト構成の例です。詳細については、以下のパラメーターの説明をご参照ください。

{
  "type":"job",
  "version":"2.0",// バージョン番号。
  "steps":[ 
    {
      "stepType":"stream",
      "parameter":{},
      "name":"Reader",
      "category":"reader"
    },
    {
      "stepType":"postgresql",// プラグイン名。
      "parameter":{
        "datasource":"",// データソース。
        "column":[// フィールド。
          "col1",
          "col2"
        ],
        "table":"",// テーブル名。
        "preSql":[],// データ同期タスク実行前に実行する SQL ステートメント。
        "postSql":[],// データ同期タスク実行後に実行する SQL ステートメント。
      },
      "name":"Writer",
      "category":"writer"
    }
  ],
  "setting":{
    "errorLimit":{
      "record":"0"// エラーとなるレコード数。
    },
    "speed":{
      "throttle":true,// throttle が false の場合、mbps パラメーターは無効となり、速度制限は無効になります。throttle が true の場合、速度制限が有効になります。
      "concurrent":1, // 並行ジョブ数。
      "mbps":"12"// 速度制限率。1 mbps は 1 MB/s に相当します。
    }
  },
  "order":{
    "hops":[
      {
        "from":"Reader",
        "to":"Writer"
      }
    ]
  }
}

Writer スクリプトパラメーター

パラメーター

説明

必須

デフォルト値

datasource

データソースの名前です。コードエディタではデータソースの追加がサポートされています。このパラメーターの値は、追加したデータソースの名前と同じである必要があります。

はい

なし

table

同期対象のテーブルの名前です。

はい

なし

writeMode

インポートモードです。insert モードおよび copy モードがサポートされています。

  • insert:PostgreSQL の insert into...values... ステートメントを実行して、データを PostgreSQL に書き込みます。プライマリキーまたは一意なインデックスの競合が発生した場合、データ行は PostgreSQL への書き込みに失敗し、現在のレコードはダーティデータになります。insert モードを優先することを推奨します。

  • copy:PostgreSQL は、テーブルおよびファイル (標準出力、標準入力) 間のデータコピー用に copy コマンドを提供しています。Data Integration は、copy from を使用してデータをテーブルにロードすることをサポートしています。パフォーマンスの問題が発生した場合、このモードを試すことを推奨します。

いいえ

insert

column

データを書き込む送信先テーブルのフィールドです。フィールドはコンマ (,) で区切ります。たとえば、"column":["id","name","age"] のようにします。すべてのカラムに順番に書き込むには、アスタリスク (*) を使用します。たとえば、"column":["*"] のようにします。

はい

なし

preSql

データ同期タスク実行前に実行する SQL ステートメントです。コードレス UI では、1 つの SQL ステートメントのみ実行できます。コードエディタでは、古いデータをクリアするなど、複数の SQL ステートメントを実行できます。

いいえ

なし

postSql

データ同期タスク実行後に実行する SQL ステートメントです。コードレス UI では、1 つの SQL ステートメントのみ実行できます。コードエディタでは、タイムスタンプを追加するなど、複数の SQL ステートメントを実行できます。

いいえ

なし

batchSize

単一バッチで送信するレコード数です。大きな値を設定すると、Data Integration と PostgreSQL 間のネットワークインタラクションが大幅に削減され、全体的なスループットが向上します。ただし、この値を高すぎると、Data Integration プロセスでメモリ不足 (OOM) エラーが発生する可能性があります。

いいえ

1,024

pgType

PostgreSQL 固有の型の変換設定です。bigint[]、double[]、text[]、Jsonb、JSON 型がサポートされています。以下のコードは設定例です。

{
    "job":
    {
        "content":
        [{
            "reader": {...},
            "writer":
            {
                "parameter":
                {
                    "column":
                    [
                        // 送信先テーブルのフィールドのリスト。
                        "bigint_arr",
                        "double_arr",
                        "text_arr",
                        "jsonb_obj",
                        "json_obj"
                    ],
                    "pgType":
                    {
                        // 特殊な型の設定。キーは送信先テーブルのフィールド名、値はフィールド型です。
                        "bigint_arr": "bigint[]",
                        "double_arr": "double[]",
                        "text_arr": "text[]",
                        "jsonb_obj": "jsonb",
                        "json_obj": "json"
                    }

                }
            }
        }]
    }
}

いいえ

なし

付録 2:PostgreSQL データソースへの SSL 認証の追加

PostgreSQL SSL 認証ファイル

DataWorks で PostgreSQL データソースの接続を作成または変更する際、SSL 認証を構成できます。以下の表に、SSL 認証に関連する設定項目を示します。

PostgreSQL データベース

DataWorks PostgreSQL データソース構成

SSL リンク暗号化

クライアントベースの暗号化

ACL の構成

設定項目

説明

有効

無効

該当なし

Truststore ファイル

任意です。クライアントは、この証明書を使用してサーバーを認証します。

  • 未構成:通常のリンクが使用されます。

  • 構成済み:SSL 暗号化リンクが使用されます。

有効

[ACL の設定]」を優先するように設定します。

  • Keystore ファイル

  • 秘密鍵ファイル

  • 秘密鍵パスワード

Keystore 証明書ファイル および 秘密鍵ファイル は任意です。ACL の構成 を prefer に設定すると、サーバーはクライアントの検証を強制しません。

  • 秘密鍵ファイル が暗号化されていない場合、SSL 暗号化リンクを使用してデータベースに接続し、秘密鍵ファイルが検証されます。

  • 秘密鍵ファイル が暗号化されている場合、秘密鍵パスワード を構成して、秘密鍵ファイル の検証に成功し、接続を確立する必要があります。

ACL の構成 を verify-ca に設定します。

  • Keystore 証明書ファイル:必須です。これは クライアント CA 証明書 です。クライアントは、この証明書を使用してサーバーに対する身分を証明する必要があります。

  • 秘密鍵ファイル:必須です。クライアントはこの秘密鍵ファイルを保持しており、一般には公開されません。これは、サーバーにアップロードされた Keystore 証明書ファイル との身分認証に使用されます。

  • 秘密鍵パスワード:任意です。秘密鍵ファイルがパスワードで保護されている場合、秘密鍵パスワードを入力する必要があります。それ以外の場合は、空白のままにできます。

説明
  • ACL 構成が prefer に設定されている場合、クライアントの内容は強制的に検証されません。

    • SSL 認証用のファイルが構成されていない場合、通常の接続が使用されます。

    • SSL の認証ファイルを追加した場合、表の対応する説明を参照してください。

  • ACL 構成が verify-ca に設定されている場合、データソースを作成するには、Keystore ファイル秘密鍵ファイル、および 秘密鍵パスワード を構成する必要があります。

PostgreSQL SSL 認証ファイルの取得

このセクションでは、ApsaraDB RDS for PostgreSQL インスタンスを例として、SSL 認証証明書を生成する方法を説明します。

  1. Truststore ファイル を取得します。

    Truststore ファイル の取得方法については、「クラウド証明書を使用した SSL 暗号化の迅速な有効化」をご参照ください。

    1. RDS インスタンスページに移動し、対象リージョンの RDS インスタンスを検索して、インスタンス ID をクリックしてインスタンスの詳細ページに移動します。

    2. 保護する接続文字列を選択します (以下の図を参照)。

    image

    説明
    • パブリックエンドポイントが有効になっている場合、内部エンドポイントとパブリックエンドポイントの両方が表示されます。クラウド証明書は、1 つのエンドポイントのみを保護できます。内部エンドポイントは VPC 内でより安全ですが、パブリックエンドポイントはインターネットに公開されているため、保護することを推奨します。内部エンドポイントおよびパブリックエンドポイントの表示方法については、「内部エンドポイントおよびパブリックエンドポイントの表示」をご参照ください。

    • 内部エンドポイントおよびパブリックエンドポイントの両方を保護するには、「カスタム証明書を使用した SSL 暗号化の有効化」をご参照ください。

    • クラウド証明書を構成すると、インスタンスの 実行中のステータスSSL の変更中 に変わります。この処理には約 3 分かかります。ステータスが 操作中 に変わるまで待ってから、次の手順に進んでください。

    CA 証明書のダウンロード をクリックして、Truststore ファイル を取得します。

    image

    ダウンロードされた CA 証明書パッケージには 3 つのファイルが含まれています。DataWorks で PostgreSQL データソースを構成する際は、拡張子が .pem または .p7b のファイルを Truststore ファイル フィールドにアップロードします。

  2. Keystore ファイル秘密鍵ファイル、および 秘密鍵パスワード の取得および構成

    前提条件:「クラウド証明書を使用した SSL 暗号化の迅速な有効化」または「カスタム証明書を使用した SSL 暗号化の有効化」の手順を完了し、OpenSSL ツールがインストールされている必要があります。

    説明

    Linux システムには OpenSSL ツールがデフォルトで含まれています。Windows システムを使用する場合は、「OpenSSL パッケージ」を入手してインストールする必要があります。

    Keystore ファイル秘密鍵ファイル、および 秘密鍵パスワード の取得および構成方法については、「クライアント CA 証明書の構成」をご参照ください。

    1. OpenSSL ツールを使用して、自己署名証明書 (ca1.crt) および秘密鍵 (ca1.key) を生成します。

      openssl req -new -x509 -days 3650 -nodes -out ca1.crt -keyout ca1.key -subj "/CN=root-ca1"
    2. クライアント証明書署名要求 (CSR) ファイル (client.csr) およびクライアント秘密鍵 (client.key) を生成します。

      openssl req -new -nodes -text -out client.csr -keyout client.key -subj "/CN=<クライアントユーザー名>"

      このコマンドでは、-subj パラメーターの後の Common Name (CN) 値を、クライアントがデータベースにアクセスするために使用するユーザー名に設定します。

    3. クライアント証明書 (client.crt) を生成します。

      openssl x509 -req -in client.csr -text -days 365  -CA ca1.crt -CAkey ca1.key -CAcreateserial  -out client.crt
    4. ApsaraDB RDS for PostgreSQL サーバーがクライアント CA 証明書を検証する必要がある場合、生成された自己署名証明書ファイル ca1.crt を開きます。証明書の内容をコピーして、クライアント証明機関からの公開鍵の入力 ダイアログボックスに貼り付けます。image

    5. RDS インスタンスでクライアント CA 証明書を構成した後、クライアント秘密鍵ファイル client.key を PKCS#8 形式 (client.pk8) に変換する必要があります。DataWorks で PostgreSQL データソースを構成する際は、client.pk8 ファイルを 秘密鍵ファイル フィールドにアップロードします。

      cp client.key client.pk8
    6. 秘密鍵パスワードを構成します。

      openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES
      説明

      秘密鍵パスワードを構成するコマンドを実行すると、パスワードの入力を求められます。パスワードを設定した場合、DataWorks の PostgreSQL データソース構成の「秘密鍵パスワード」フィールドに同じパスワードを使用する必要があります。

PostgreSQL SSL 認証ファイルの構成

DataWorks の PostgreSQL データソース構成に証明書ファイルをアップロードする際は、以下の手順に従います。

image

ACL の構成RDS インスタンスページに移動し、対象リージョンの RDS インスタンスを検索して、インスタンス ID をクリックしてインスタンスの詳細ページに移動します。データセキュリティ > ACL の構成 をクリックして設定を変更します。さまざまな SSL 認証方法を選択できます。詳細については、「クライアントに SSL 接続の使用を強制する」をご参照ください。

image

説明
  • ACL 認証方法が prefer に設定されている場合、PostgreSQL サーバーはクライアント証明書を強制的に検証しません。

  • ApsaraDB RDS for PostgreSQL で ACL 認証方法が verify-ca に設定されている場合、DataWorks で PostgreSQL データソースを構成する際に、正しいクライアント証明書をアップロードする必要があります。これにより、サーバーがクライアントの真正性を検証できるようになります。