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

DataWorks:PostgreSQL データソース

最終更新日:Nov 09, 2025

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 or 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 データの型

整数型

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

浮動小数点型

DOUBLE PRECISION、MONEY、NUMERIC、および REAL

文字列型

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

日付と時刻の型

DATE、TIME、および TIMESTAMP

ブール型

BOOL

バイナリ型

BYTEA

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

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

準備

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 の先行書き込みログ (WAL) が増え続ける可能性があります。

データソースの追加

DataWorks で同期タスクを開発する前に、「データソース管理」の指示に従って、必要なデータソースを DataWorks に追加する必要があります。データソースを追加する際に、DataWorks コンソールでパラメーターのインフォチップを表示して、パラメーターの意味を理解できます

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

データ同期タスクの開発: PostgreSQL 同期ガイド

同期タスクの設定のエントリポイントと手順については、次の設定ガイドをご参照ください。

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

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

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

よくある質問

  • アクティブ/スタンバイ同期設定でのデータ復元。

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

  • 整合性の制約。

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

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

    `splitPk` パラメーターに基づいて PostgreSQL Reader がデータをシャーディングした後、複数の同時タスクを開始してデータを同期します。これらの同時タスクは同じ読み取りトランザクションに属しておらず、それらの間には時間間隔があります。したがって、同期されたデータは単一の一貫したスナップショットからのものではありません。

    複数のスレッドにまたがる一貫したスナップショットのための技術的なソリューションは現在利用できません。この問題は、エンジニアリングの観点からのみ対処できます。以下のソリューションにはトレードオフがあり、要件に基づいて選択できます。

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

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

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

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

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

  • 増分データ同期の方法。

    PostgreSQL Reader は、JDBC SELECT ステートメントを使用してデータを抽出します。これにより、SELECT…WHERE… を使用して次のように増分データ抽出を行うことができます。

    • オンラインアプリケーションがすべての変更に対して `modify` フィールドにタイムスタンプを設定する場合、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

1 つのバッチで送信するレコードの数。値が大きいほど、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 の設定]

設定項目

説明

有効

無効

該当なし

[トラストストア証明書ファイル]

オプション。クライアントはこの証明書を使用してサーバーを認証します。

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

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

有効

[ACL の設定] を prefer に設定

  • [キーストア証明書ファイル]

  • [秘密鍵ファイル]

  • [秘密鍵パスワード]

[キーストア証明書ファイル][秘密鍵ファイル] はオプションです。[ACL の設定] を prefer に設定すると、サーバーはクライアントの検証を強制しません。

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

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

[ACL の設定] を verify-ca に設定

  • [キーストア証明書ファイル]: 必須。これは [クライアント CA 証明書] です。クライアントは、サーバーに自身の ID を証明するためにこの証明書を必要とします。

  • [秘密鍵ファイル]: 必須。クライアントはこの秘密鍵ファイルを保持し、公開されません。これは、サーバーにアップロードされた [キーストア証明書ファイル] との ID 認証に使用されます。

  • [秘密鍵パスワード]: オプション。秘密鍵ファイルがパスワードで保護されている場合は、秘密鍵パスワードを入力する必要があります。そうでない場合は、空白のままにできます。

説明
  • アクセスコントロールリスト (ACL) 設定が `prefer` に設定されている場合、クライアントコンテンツは強制的に検証されません。

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

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

  • ACL 設定が `verify-ca` に設定されている場合は、データソースを作成するために [キーストア証明書ファイル][秘密鍵ファイル]、および [秘密鍵パスワード] を設定する必要があります。

PostgreSQL SSL 認証ファイルの取得

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

  1. [トラストストア証明書ファイル] を取得します。

    [トラストストア証明書ファイル] の取得方法の詳細については、「クラウド証明書を使用して SSL 暗号化を迅速に有効にする」をご参照ください。

    1. RDS インスタンスページに移動し、ターゲットリージョンで RDS インスタンスを見つけ、インスタンス ID をクリックしてインスタンス詳細ページに移動します。

    2. 次の図に示すように、保護する接続文字列を選択します。

    image

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

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

    • クラウド証明書を設定した後、インスタンスの [実行中のステータス][SSL の変更中] に変わります。このプロセスには約 3 分かかります。続行する前に、ステータスが [実行中] に変わるまで待ちます。

    [CA 証明書のダウンロード] をクリックして、[トラストストア証明書] ファイルを取得します。

    image

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

  2. [キーストア証明書ファイル][秘密鍵ファイル]、および [秘密鍵パスワード] を取得して設定します。

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

    説明

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

    [キーストア証明書ファイル][秘密鍵ファイル]、および [秘密鍵パスワード] の取得と設定方法の詳細については、「クライアント 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=<Client username>"

      このコマンドでは、-subj パラメーターの後のコモンネーム (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 データソースを設定する際に正しいクライアント証明書をアップロードする必要があります。この設定により、サーバーはクライアントの信頼性を検証できます。