CData Sync のジョブでは、イベントスクリプトを使って、ジョブのイベントに合わせた処理を実行できます。たとえば、ジョブの完了後に外部の REST API を呼び出すスクリプトでは、API キーなどの認証情報が必要になります。
CData Sync V26.3 までは、こうしたイベントスクリプトで機密情報を扱うには、値をスクリプトに平文で書くか、複雑なスクリプトを組み込んで回避するしかありませんでした。平文で書いた値は、スクリプトを見られる人、エクスポートしたファイル、バックアップなどに残りえます。
CData Sync V26.4 で追加されたキーVault は、こうした値をスクリプトの外に置き、スクリプトからは参照だけで使えるようにする機能です。暗号化アイテムの値は画面に表示されず、解決された値もイベントスクリプトには保存されません。
本記事では、キーVault のユースケースと設定例、運用上の注意点を紹介します。本記事では検証に CData Sync 26.4.9803.0 を使用しています。
全体構成

図のとおり、キーVault は 3 つの要素で構成されます。値を保管する Vault プロバイダー、アイテムを管理する Vault ページ、アイテムを参照する側です。参照する側は、接続プロパティとジョブやパイプラインのイベントスクリプトです。
キーVault の概要
キーVault は、システム設定の Vault タブで管理します。ここで管理した値は、管理コンソール全体で再利用できます。

Vault テーブルには、アプリ上で参照できるすべてのローカル Vault とシステム Vault のアイテムが表示されます。
Vault プロバイダー
v26.4 で使えるプロバイダーは、次の 2 つです。
項目 | ローカル Vault | システム Vault |
|---|
ID | local
| env
|
内容 | Sync が保持するアイテム | ホストの環境変数を取り込んだもの |
書き込み | 可能(唯一の書き込み可能なプロバイダー) | 読み取り専用 |
保存方法 | アプリケーション DB に AES-256 マスターキーで暗号化して保存 | ホストの環境変数から取り込む |
ローカル Vault のプロバイダー自体は常に存在し、プロバイダーとしての編集と削除はできません。ローカル Vault 以外のプロバイダー(v26.4 ではシステム Vault)のアイテムは、すべて読み取り専用です。
ユースケース
キーVault が役立つ主な場面は、次のとおりです。
イベントスクリプトの認証情報を平文で書かない 外部 REST API の API キーやパスワードを、ローカル Vault の暗号化アイテムに置きます。スクリプトには参照だけを書くため、スクリプトに値が残りません。
同じ接続情報を複数の接続・イベントスクリプトで使い回す 認証情報に限らず、URL や ポート番号などの共通の接続情報を Vault アイテムとして登録し、各接続・イベントスクリプトから参照します。値を一か所で更新すれば、参照するすべての接続に反映されます。
ホストの環境変数にある値を参照する システム Vault を使うと、インフラ側ですでに管理しているシークレットを、Sync に重複して保存せずに参照することができます。
設定例
ユースケースのうち、イベントスクリプトから REST API を呼ぶときの API キーを、ローカル Vault の暗号化アイテムで管理する例を示します。
ローカル Vault に暗号化アイテムを登録する
アイテムの追加方法は 2 通りあります。
Vault タブにある「Vault アイテムを追加」ボタンを使う
コネクタページなどのフィールドに値を入力し、キーアイコンから「Vault に追加」を選ぶ
今回は 1 の Vault タブからアイテムを登録していきます。

名前に MyApiKey、種類に「暗号化」を選び、値に API キーを入力して保存します。ラベルは任意です。登録後、暗号化アイテムの値は画面に表示されません。
イベントスクリプトから参照する
イベントスクリプトでは、関数フォーマッタ vault() で [vault(local/アイテム名)] の形式でアイテムを参照します。たとえば、ジョブが成功以外で終了したときに外部の REST API へ通知する Post-Job イベントでは、API キーを Authorization ヘッダーに設定する部分を次のように書けます。URL は例です。
<!-- ジョブが成功以外で終了した場合に、外部の REST API へ通知する -->
<api:if attr="_input.JobStatus" value="SUCCESS" operator="notequals">
<api:set attr="http.url" value="https://api.example.com/notify"/>
<api:set attr="http.contenttype" value="application/json"/>
<!-- API キーは、ローカル Vault のアイテム MyApiKey から取り出す -->
<api:set attr="http.header:name#1" value="Authorization"/>
<api:set attr="http.header:value#1" value="Bearer [vault(local/MyApiKey)]"/>
<api:set attr="http.postdata">
{
"title": "[_input.JobName] - [_input.JobStatus]",
"text": "[_input.Details]"
}
</api:set>
<api:call op="httpPost" in="http"/>
</api:if>
Post-Job イベントのスクリプトは、ジョブの「イベント」タブから編集できます。編集画面では、次のようになります。

MyApiKey の部分は、ローカル Vault へ登録したアイテム名にしてください。解決された値はイベントスクリプトに保存されず、スクリプトに残るのは参照の記述だけです。送信先の API には、実際の値が渡されます。ただし、スクリプトが暗号化アイテムの値を明示的にログへ出力する処理は、Sync では防げません。値はログへ書き出さないようにしてください。
運用上の注意点
権限
Vault の操作権限は、ロールによって次のように分かれます。
操作 | 管理者 | 他のロール |
|---|
ローカル Vault アイテムの作成、更新、削除 | 可能 | 不可 |
システム Vault のパターン変更 | 可能 | 不可 |
アイテムの一覧参照 | 可能 | 可能 |
参照としての利用 | 可能 | 可能 |
ワークスペースとの関係
v26.4 の Vault は、すべてシステム全体で共有されます。ワークスペース単位で Vault を分離する機能はありません。アイテム名は、ワークスペースをまたいで共有される前提で付けてください。
エクスポート
ローカル Vault のアイテムは、通常のエクスポートとは別のオプションで、パスワード保護つきでエクスポートできます。システム Vault の中身は、エクスポートされません。システム Vault を使っている場合は、移行先の環境でも環境変数とパターンを確認してください。
まとめ
キーVault を使うと、イベントスクリプトの機密情報を平文で書かずに済み、接続情報やシークレットも一か所で管理できます。ローカル Vault は Sync が暗号化して保持し、システム Vault は環境変数をそのまま取り込みます。暗号化アイテムの値は画面に表示されず、解決された値もスクリプトには残りません。
接続プロパティでの参照や環境変数の取り込みなど、本記事で触れなかった詳細は、公式ヘルプ(グローバル設定 Vault)と公式ヘルプ(関数フォーマッタ)を参照してください。
CData Sync の 30 日間無償トライアルはこちらからダウンロードいただけます。また、使っていて気になった点やご不明な点があれば、お気軽にテクニカルサポートまでお問い合わせください。