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

DataWorks:PostgreSQL

最終更新日:Apr 23, 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 の場合、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 は、設定に基づいて同時データ抽出を使用することもできます。この場合、データの整合性を厳密に保証することはできません。

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

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

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

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

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

    PostgreSQL サーバーは、簡体字中国語に対して EUC_CN および UTF-8 エンコーディングのみをサポートしています。PostgreSQL Reader は、データ抽出に Java Database Connectivity (JDBC) を使用します。JDBC はさまざまなエンコーディングと互換性があり、下位層でエンコーディング変換を実行します。したがって、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 をカスタマイズできます。このパラメーターが構成されている場合、データ同期システムは tables、columns、および 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 を証明します。

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

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

説明
  • アクセス制御リスト (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 分かかります。ステータスが 操作中に変わるまで待ってから続行してください。

    c. [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 を開きます。証明書の内容をコピーし、[クライアント証明機関からの公開鍵を入力] ダイアログボックスに貼り付けて、クライアント CA 証明書として使用します。image

    5. RDS でクライアント CA 証明書を構成した後、クライアント秘密鍵 client.keyclient.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 インスタンスページに移動し、ターゲットリージョンで ApsaraDB RDS for PostgreSQL インスタンスを見つけ、インスタンス ID をクリックしてインスタンス詳細ページを開きます。 をクリックして設定を変更します。さまざまな SSL 認証方法を選択できます。詳細については、「クライアントに SSL 接続の使用を強制する」をご参照ください。

image

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

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