IBM Optim Data Privacy Solution V2.1(以下、OptimV2.1)は、個人情報などのデータを個人が特定できないようなデータへ変換(マスク、あるいはマスキングと呼びます)することで、個人情報保護のソリューションを提供します。これは、個人情報などの機密情報を含むデータをテストや開発など非本番環境で利用する際に有効です。本稿では、Optim V2.1におけるマスキングの手法(以下、データ・プライバシー・ポリシー)やデータ管理サービスを定義するOptimデザイナーの使用方法について、実際の操作方法を含めて具体的に紹介します。
2. Optimデザイナーとデータ・プライバシー・ポリシーの概要
2.1 IBM Optim Data Privacy Solution V2.1
IBM Optim Data Privacy Solution V2.1 (Optim V2.1)は、データ・プライバシーをSOAとして実現するソリューションです。具体的には以下のコンポーネントを提供しています。
- Optimデザイナー
- Optim管理コンソール
- Optim管理サーバー
- Optimプロキシー
- Optim Executor
機密データをマスクする操作を設計するには、Optimデザイナーを使用して行います。設計したマスクの操作は「データ管理サービス」(あるいは単にサービスと呼びます)として定義されます。サービスはOptimデザイナーからOptim Executorを使用して実行することができます。あるいは、サービスをOptim管理サーバーに公開し、公開されたサービスをOptim管理コンソールから実行することができます。実行の依頼を受けたOptim管理サーバーは、Optimプロキシーに実行要求し、OptimプロキシーはOptim Executorを使用して実行します。
各コンポーネントの詳細や構成方法については、「Optim Data Privacy Solution インストール・ガイド」あるいはdeveloperWorks記事「IBM Optim Data Privacy Solution V2.1のコンポーネントとその機能」を参照して下さい。
2.1節でも述べた通り、OptimデザイナーはOptim V2.1のコンポーネントの1つで、機密データをマスクする操作を「データ管理サービス」として設計することができます。Eclipseプラットフォームを基盤とした開発環境であり、直感的で分かりやすい操作環境を提供しています(図1)。
図1. Optimデザイナー
Optimデザイナーを導入し、サービスを実行するには以下の前提条件が必要です。
【インストール時】
- InfoSphere Data Architect
OptimデザイナーはInfoSphere Data Architect上に導入されるため、前提条件としてInfoSphere Data Architectが導入されている必要があります。
【データ管理サービス実行時】
- Optim Executor・Optim 管理サーバー
サービスの実行はOptim Executorを利用して行われるため、事前にOptim Executorを同じマシンに導入し、そのプログラムをOptimデザイナーに登録しておく必要があります。また、後述する「ルックアップ・ポリシー」をマスクの手法として適用する場合、Optim 管理サーバーを導入し、起動しておく必要があります。
データ・プライバシー・ポリシーとは、Optim V2.1においてデータをマスクする手法のことです。Optim V1.2で定義されていたものと同様のポリシーがV2.1でも用意されています。
データ・プライバシー・ポリシーはOptim V1.2と同様、以下の3タイプがあります
- ルックアップ・ポリシー
- ルール・ベース・ポリシー
- JavaScriptポリシー
各タイプの詳説についてはOptimデザイナー ユーザー・マニュアルあるいは、Optim V1.2を用いたデータ・マスキングについて書かれたdeveloperWorks記事 「データ・プライバシー・ポリシーを使用したデータのマスク手法」 のデータ・マスキングの章を参照して下さい。なお、Optim V1.2にて「インライン式ポリシー」と呼ばれていたポリシーは、V2.1では「JavaScriptポリシー」と名称が変更されています。
2.3.2 Optimデザイナーを使用する際のポリシーのカテゴリー分け
Optimデザイナーを使用してマスクを行う際、データ・プライバシー・ポリシーは以下のようにカテゴリー分けされています。
個人情報マスク・ポリシー
データに含まれるさまざまな個人情報をマスクする事ができます。代表的なものは以下の通りです。例えば、名前であればその国で使われる名前が登録されたルックアップ表にあるものと置き換えます。住所であれば、その国の住所が登録されたルックアップ表にあるものと置き換え、さらに郵便番号、都道府県、市町村の列といった複数の列で構成されている場合はそれらの整合性も保たれます。クレジット・カードであればクレジット・カード提供会社の特性を保った番号にマスクする事ができます。
- 姓名
- Eメール・アドレス
- ID(国民識別番号、保険番号など)
- クレジット・カード番号
- 生年月日
- 住所情報
姓名、住所情報などはルックアップ・ポリシーとして適用され、Eメール・アドレス、ID、クレジット・カード番号などについてはルール・ベース・ポリシーとJavaScriptポリシーとして適用することができます。(ただし2010年4月現在、日本の住基ネットのIDには対応していません。)
スクランブル・マスク・ポリシー
文字および数値データをマスクするために使用するポリシーです。「スクランブル」と「置換」の操作があり、「スクランブル」は使用している文字の順番の入れ替え、「置換」は、アルファベットは別のアルファベット、数字は別の数字、ひらがなは別のひらがなといったように置き換えられます。ルール・ベース・ポリシーとJavaScriptポリシーとして適用可能です。3章では実際にパスポート番号のマスクをする際に適用します。
数値マスク・ポリシー
数値データをマスクするために使用するポリシーです。Optim V1.2での「スクランブル・マスク・ポリシー」の中で、整数や倍精度浮動小数点数を生成するポリシーがOptim V2.1では「数値マスク・ポリシー」とカテゴリー分けされています。ルール・ベース・ポリシーとJavaScriptポリシーとして適用可能です。
日付マスク・ポリシー
指定された範囲の期間でランダムに日付を生成したり、年や月で日付を丸める事ができます。(例:2010年8月21日は、年で丸めると2010年1月1日になり、月で丸めると2010年8月1日になります)クレジット・カードの有効期限や生年月日のマスクに使用できます。ルール・ベース・ポリシーとJavaScriptポリシーとして適用可能です。
Optimデザイナーでは、2.3節で説明したデータ・プライバシー・ポリシーを用いて、マスクされたデータを作成します。マスク後のデータを別の表に生成するサービスを「コピー・サービス」と呼び、同じデータベースの別スキーマや別のデータベースにデータをコピーすることができます。また、ソースのデータをマスクしたものに置き換える「データ変換サービス」というサービスもあります。本稿では、「コピー・サービス」を使ったマスクの方法を取り上げます。手順は図2の通りです。
図2.データ管理サービスの設計と実行手順
- データ・ソース(DB2、Oracleなど)への接続を定義
- データ・ソースのスキーマ情報を基に、マスクしたいデータ(ソース)のスキーマに対し物理データ・モデルを生成
- 物理データ・モデルを論理データ・モデルに変換
- 論理データ・モデルに、「データ・アクセス・計画」と呼ばれる計画を作成し、データに対して適用したいデータ・プライバシー・ポリシーをその計画の中に定義(ルックアップ・ポリシー、ルール・ベース・ポリシーが適用可能)
- マスクデータを作成する先(ターゲット)のスキーマに対して同様にb, cを行い、論理データ・モデルを定義
- データ管理サービスを作成(ソース、ターゲット、作成したデータ・アクセス計画を指定。なお、JavaScriptポリシーはサービス作成後に適用可能)
- 作成したサービスを実行し、ターゲットのスキーマにマスクされたデータを作成
以上の操作により、ソースのスキーマからターゲットのスキーマに、機密情報がマスクされたデータがコピーされます。3章にて、具体的なデータを用いて操作を行っていきます。
3. データ・プライバシー・ポリシーを適用したデータ管理サービスの動作確認
実際に、データのマスクをするデータ管理サービスを作成し、実行してみましょう。以下の例では、実行環境はWindows XP上でDB2を使用している事を前提としています。ここで、架空の顧客データ(表名: DEMO.CUSTOMERS)があると仮定します。Optimデザイナーを使って、顧客番号以外を全てマスクし、DEMOTARGET.CUSTOMERS表にコピーするステップを以下で説明します。 予めSAMPLEデータベースを作成し、データベース上に以下の表を作成してください。 表定義とサンプル・データはこちらからダウンロードできます。作成するにはDB2コマンドにて以下を実行します。
> db2sampl (SAMPLEデータベース未作成の場合) > db2 connect to sample > db2 -vtf create_demo_tables.txt |
最初に、作成したデータ・モデルやサービスを保管するためのデータ設計プロジェクトと、データベースへの接続情報を定義します。Optimデザイナーを起動してワークスペースを開き、まずはデータ設計プロジェクトの作成から行っていきます。[ファイル - 新規 - データ設計プロジェクト]を選択します。[新規データ設計プロジェクト]パネルで、プロジェクト名に「サンプル・プロジェクト」と入力し(図3)、[終了]ボタンをクリックすると、[データ・プロジェクト・エクスプローラー]ビューに作成したプロジェクトが追加されます。
図3. 新規データ設計プロジェクト
次にデータ・ソースの準備です。DB2上のSAMPLEデータベースへの接続情報を定義します。[データ・ソース・エクスプローラー]ビューにて、[データベース]を右クリックして[新規]を選択します。[新規接続]パネル(図4)で[DB2 for Linux、UNIXおよびWindows]を選択して、SAMPLEデータベースに対するドライバー定義を編集します。編集が終わったら [接続のテスト]ボタンをクリックし、「pingが成功しました」というメッセージが表示されたら[新規接続]パネルの[OK]ボタンをクリックします。
これでデータ設計プロジェクトとデータ・ソースの準備は完了です。
図4. 新規データ・ソース
3.2 データ・モデル、データ・アクセス計画、データ・プライバシー・ポリシーの作成
まず、コピー元(ソース)となるデータDEMO.CUSTOMERS表に対する「サンプル・ソース」という名前のデータ・モデル、ならびにモデルに適用されるデータ・アクセス計画とポリシーを定義します。 [データ・プロジェクト・エクスプローラー]ビューにて、先ほど作成したプロジェクトを開きます。[データ・モデル]ノードを右クリックし、[新規 - 物理データ・モデル]コンテキスト・メニューを選択します。[モデル・ファイル]パネルにて(図5)、以下の情報を入力、[リバース・エンジニアリングから作成]ラジオボタンを選択して、[次へ]ボタンをクリックします。
- ファイル名: サンプル・ソース
- データベース: DB2 for Linux、UNIX、およびWindows
- バージョン: ※DB2のバージョンを選択
図5. 「モデル・ファイル」パネル
[ソース]パネルにて、[データベース]ラジオボタンを選択し、[次へ]ボタンをクリックします。 [接続の選択]パネルにて、SAMPLEノードを選択し[次へ]ボタンをクリックした後、[スキーマの選択]パネル(図6)にて、DEMOを選択し[終了]ボタンをクリックします。
図6. スキーマの選択
次に、作成した物理データ・モデルを論理データ・モデルへ変換します。作成された[サンプル・ソース.dbm]を右クリックし、[Optimプロパティーを含む論理データ・モデルに変換]コンテキスト・メニューを選択します。 デフォルト設定のまま、[次へ]ボタンを3回クリックし、図の[出力]パネルで論理データ・モデルへの変換が完了したことを確認した後、[出力]パネルで[終了]ボタンをクリックします。 [ファイル - すべてを保存]メニューを選択し、作成したデータ・モデルすべてを保存します。
作成した論理データ・モデルに対して、データ・アクセス計画とデータをマスクするためのデータ・プライバシー・ポリシーを適用します。 まずは、データ・アクセス計画を作成します。 [データ・プロジェクト・エクスプローラー]ビュー上に作成された論理データ・モデル(ldmファイル)をクリックして展開した後、パッケージ(デフォルト名はPackage1)を展開し、[データ・アクセス計画]ノードを右クリックして[新規 - データ・アクセス計画]コンテキスト・メニューを選択します。 「サンプル計画」と入力し、[終了]ボタンをクリックします。作成したデータ・アクセス計画「サンプル計画」を右クリックし[開く]でエディターを開き、[ポリシーの追加]ボタンをクリックします(図7)。 (新規データ・アクセス計画作成後には自動的にエディターが開かれます)
図7.ポリシーの追加
ここで、サービスの対象となるデータを選択するためのポリシー(選択ポリシー)とデータをマスクするためのデータ・プライバシー・ポリシーを作成していきます。
まず、選択ポリシーを作成します。選択ポリシーで表を選択すると、選択した表と参照制約などで関連付けられた表も自動的に選択されます。ポリシー名として「サンプル選択ポリシー」と入力し[次へ]をクリックします。DEMO.CUSTOMERS表を選択し、[終了]ボタンをクリックします。その後、[選択ポリシー]エディターが表示されるので、その内容を確認し、 [ファイル - すべてを保存]メニューを選択して変更を保存します。
これで、マスクするデータを選択するポリシーができました。次に、データ・プライバシー・ポリシーを適用します。以下の表1の属性に対して適用していきます。
表1. データ・プライバシー・ポリシー
| 列名 | データ・タイプ | 説明 | 適用するポリシー | ポリシー・タイプ |
|---|---|---|---|---|
| CUSTOMER_ID | char(5) | 顧客番号 | (マスクなし) | |
| FAMILY_NAME | varchar(15) | 姓 | 個人情報(personLookupType.LastName) | ルックアップ |
| GIVEN_NAME | varchar(15) | 名 | 個人情報(personLookupType.FirstName) | ルックアップ |
| CREDIT_CARD_NUM | varchar(19) | クレジット・カード番号 | すべての提供者からのクレジット・カードをマスク | ルール・ベース |
| PASSPORT_NUM | char(9) | パスポート番号 | スクランブル(文字の置換) | ルール・ベース |
| BIRTH_DATE | date | 生年月日 | 個人情報(personLookupType.BirthDate) | ルックアップ |
| AGE | int | 年齢 | JavaScriptポリシー(サービス計画で定義) | |
個人情報のルックアップ・ポリシー
ここではハッシュ・ルックアップを用いて、日本の姓名情報と生年月日のマスクを行います。再度[サンプル・計画]エディターを開き、[ポリシーの追加]ボタンをクリックします。[ポリシーの追加]パネルで、ポリシー名として「名前マスク・ポリシー」と入力し[次へ]をクリックします。[ポリシー・カテゴリー・セレクター]パネルで、[個人情報マスク・ポリシー]を選択し、[次へ]をクリックします(図8)。
図8.ポリシー・カテゴリー・セレクター
[ポリシー・セレクター]で[個人 ― 日本の個人情報のマスク]を選択して[次へ]をクリックします。[マスクする項目の選択]パネルで、エンティティーに”Package1/DEMO/CUSTOMERS”を選択して[次へ]をクリックします。[列のマップ]パネル(図9)で表2のようにマップを行います。
表2.列のマップ
| 列名 | ポリシー |
|---|---|
| FAMILY_NAME | personLookupType.LastName |
| GIVEN_NAME | personLookupType.FirstName |
| BIRTH_DATE | personLookupType.BirthDate |
図9.列とポリシーのマップ
[次へ]をクリックし、[マップする項目のオプション]パネルはデフォルトのまま[次へ]をクリックして進みます。[ルックアップ・キー・ジェネレーター]パネルでキー生成メソッドとして[ハッシュ値を計算してキーとして使用]を選択し、[次へ]をクリックします。[ハッシュ値の入力]パネルで、”サンプル・プロジェクト/サンプル・ソース.ldm/Package1/DEMO/CUSTOMERS/CUSTOMERS_ID”を[ >> ]ボタンをクリックして選択し、[終了]ボタンをクリックします。
ルール・ベース・ポリシー:クレジット・カードのポリシー
クレジット・カードのポリシーは、発行者 (American Express、Diners Club、Discover、JCB、 MasterCard、VISA) のクレジット・カード番号 (CCN) をマスクします。各ポリシーは、CCNの発行者 ID 番号の最初の 4 桁を保持し、発行者 ID の残りの 2 桁とCCN に基づくアカウント番号をマスクします。さらに、それぞれの発行者に有効となるようなチェック・ディジットも生成するので、クレジット・カードを処理するアプリケーションのテストでも有効に使用することができます。 先ほどの姓名情報のマスクと同様にして、[ポリシーの追加]をクリック後、ポリシー名を「クレジット・カード・マスク・ポリシー」と入力し、[個人情報マスク・ポリシー]を選択し、次へ進みます。[ポリシー・セレクター]パネルで、[クレジット・カード ― すべての提供者からのクレジット・カードをマスク]を選択して[次へ]をクリックします(図10)。
図10. クレジット・カードのポリシー
[マスクする項目の選択]パネルで、以下の様に情報を入力し[終了]をクリックしてポリシーの追加を完了します。
- エンティティー:サンプル・プロジェクト/サンプル・ソース.ldm/Package1/DEMO/CUSTOMERS
- 属性:CREDIT_CARD_NUM
この例では、クレジット・カード発行者をマスクしない設定をしたため、発行者ID6桁の最後の2桁もマスクされずに元の値が保持されます。
スクランブル・マスク・ポリシー
ここでは、「文字の置換」ポリシーを使ってパスポート番号のマスクを行います。日本のパスポート番号は2文字の英字と7桁の数字で構成されているので、このマスクによって2文字の英字は別の英字に、7桁の数字は別の数字に置き換えられます。 個人情報のマスクと同様にして、[ポリシーの追加]をクリック後、ポリシー名を「パスポート・マスク・ポリシー」と入力し、[スクランブル・マスク・ポリシー]を選択し、次へ進みます。[ポリシー・セレクター]パネルで、[文字の置換]を選択して[次へ]をクリックします。[マスクする項目の選択]パネルで、以下の様に情報を入力します。
- エンティティー:サンプル・プロジェクト/サンプル・ソース.ldm/Package1/DEMO/CUSTOMERS
- 属性:PASSPORT_NUM
[次へ]をクリックし、[マップする項目のオプション]パネルはデフォルトのまま次へ進みます。 先ほども述べたようにパスポート番号は英字と数字で構成されているので、この例では、マスキングに使用される文字として「英語」を選択しています(「日本語」を選択しても結果は同様です)。「日本語」を選択した場合、日本語の文字も変換することができます(漢字は漢字、ひらがなはひらがな、カタカタはカタカナで別の文字に変換)。[言語文字セット]パネルで言語文字セットを「英語」にし、[終了]をクリックしてポリシーの追加を完了します。
アクセス計画で定義するデータ・プライバシー・ポリシーは以上です。JavaScriptポリシーは3.3のサービス作成時に定義します。
次に、コピー先(ターゲット)となるスキーマに対し、「サンプル・ターゲット」という名前のデータ・モデル、ならびにモデルに適用されるデータ・アクセス計画とポリシーを定義します。 手順はソースのスキーマに対して行った操作と同様です。再度[モデル・ファイル]パネルにて、以下の情報を入力、[リバース・エンジニアリングから作成]ラジオボタンを選択して、[次へ]ボタンをクリックします。
- ファイル名: サンプル・ターゲット
- データベース: DB2 for Linux、UNIX、およびWindows
- バージョン: ※DB2のバージョンを選択
[ソース]パネルにて、[データベース]ラジオボタンを選択し、[次へ]ボタンをクリックします。[接続の選択]パネルにて、SAMPLEノードを選択し、[次へ]ボタンをクリックします。[スキーマの選択]パネルにて、DEMOTARGETスキーマのみを選択し、[終了]ボタンをクリックします。 作成された物理データ・モデル(dbmファイル)を右クリックし、[Optimプロパティーを含む論理データ・モデルに変換]コンテキスト・メニューを選択します。 デフォルト設定のまま、[次へ]ボタンを3回クリックし、図の[出力]パネルで論理データ・モデルへの変換が完了したことを確認した後、[出力]パネルで[終了]ボタンをクリックします。 [ファイル - すべてを保存]メニューを選択し、作成したデータ・モデルすべてを保存します。
3.3 データ管理サービスの作成とJavaScriptポリシーの追加
データ管理サービスの作成とJavaScriptポリシーの追加を行います。[データ・プロジェクト・エクスプローラー]ビューにて、[サービス]ノードを右クリックし、[新規 ― サービス]コンテキスト・メニューを選択します。 [新規サービス]パネル(図11)にて、サービス・タイプで「コピー・サービス」を選択し、サービス名に「サンプル・サービス」を入力して、[次へ]ボタンをクリックします。
図11. 新規サービスの作成
[ソース論理データ・モデルの選択]パネル(図12)にて、2.2節にてコピー元(ソース)として作成したデータ・モデル「サンプル・ソース.ldm」を選択して、[次へ]ボタンをクリックします。
図12.[ソース論理データ・モデルの選択]パネル
[データ・アクセス計画の選択]パネルにて、2.2節で作成したデータ・アクセス計画「サンプル計画」を選択し、[次へ]ボタンをクリックします。[ターゲット・モデルのオプション]パネルにて、「ターゲット・モデルを選択し、自動マッピングを実行する」ラジオボタンを選択し、[次へ]をクリックします。 [ターゲット・モデル・セレクター]パネル(図13)にて、コピー先(ターゲット)用に作成したデータ・モデル「サンプル・ターゲット.ldm」を選択し、[ターゲットの操作タイプ]のラジオボタンを[挿入]にした状態で、[終了]ボタンをクリックします。
図13.[ターゲット・モデル・セレクター]パネル
JavaScriptポリシー
JavaScriptポリシーは、サービス作成後、そのサービス計画に追加する形で定義します。1つのJavaScriptポリシーに複数のJavaScriptを追加することができ、JavaScriptを追加する際、マスクする対象のターゲット表の列を選択します。追加したJavaScriptの実行で得られた値がその列にセットされます。ここでは、AGE列に対して「現在の年月日 - マスク後の生年月日」を計算するためのJavaScriptポリシーを追加します。作成されたサービス「サンプル・サービス.svc」をダブルクリックして展開し、[サービス計画]をダブルクリックします。エディター上の[ポリシーの追加]をクリックし(図14)、ポリシー名に「サンプルJavaScript」と入力します。[ポリシー・カテゴリー・セレクター]パネルで、[ターゲット・データ・ソース・ポリシー]を選択し、次の[ポリシー・セレクター]パネルでは[JavaScriptポリシー]を選択し、[終了]をクリックします。
図14. ポリシーの追加
作成したJavaScript ポリシーを選択してJavaScript ポリシー・エディターを開き、[JavaScript の追加]をクリックします。(図15)
図15.JavaScript の追加
[属性の選択]パネルで「AGE」列を選択して次へ進みます。ファイル名はデフォルトのまま[終了]をクリックすると、JavaScriptファイルのエディターが開きます。以下のJavaScript式を入力します。
new Date().getFullYear()
- parseInt(new String (record.getItem('/DEMO/CUSTOMERS/BIRTH_DATE')).substr(0,4))
|
これによって、現在の年月日からマスク後のBIRTH_DATE列の生年月日を引き算した値が、マスク後のAGE列に入ります。[ファイル] > [保存]をクリックして、ファイルを保存します。
3.3節で、作成したサービス「サンプル・サービス.svc」を右クリックし、[Optimサービスの実行]コンテキスト・メニューを選択します(図16)。 [サービス名の検証]パネルにて、[終了]ボタンを押します。Optim Excecutorが起動し、サービスの実行が始まります。ログはコンソールタブをクリックし、確認します。
図16.サービスの実行
実行が正常終了したら、コピー先のDEMOTARGET.CUSTOMERS表に、コピー元のDEMO.CUSTOMERS表の内容がコピーされている事を確認します。 [データ・ソース・エクスプローラー]ビューにて、SAMPLEデータベース内のDEMOTARGETスキーマを展開してCUSTOMERS表を右クリックし、[データ ― サンプル・コンテンツ]コンテキスト・メニューを選択します。(図17)
図17.サンプル・コンテンツの選択
[SQLの結果]ビューに表の中身が表示され、元の表からデータがマスクされている事が分かります。マスク前のデータを図18、マスクされたデータを図19に示します。ランダムなマスクを実行している列は、マスク・データは必ずしも図19の値通りとはなりません。
図18.マスク前のデータ
図19.サービス実行後のマスク結果
IBM Optim Data Privacy Solution V2.1 (Optim V2.1)は、データ・ソース内の機密情報をマスクすることで、データの安全性を保持するソリューションです。Optimデザイナーはそのマスクを適用するデータ管理サービスを設計する事ができます。本稿では、Optimデザイナーを使用したデータのマスク手法を、実際の操作方法を含めて具体的に紹介しました。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| サンプル顧客データ | sample.zip | 2KB | HTTP |