Open17

Cloud DLPにドッグフーディング

マッケイマッケイ

Cloud Data Loss Prevention(Cloud DLP)を使用して、個人情報(PII)などのセンシティブ データを匿名化する自動データ変換パイプラインを作成する方法をまとめる。
Cloud DLP では、削除、マスキング、トークン化、バケット化などの方法で匿名化を行うことが可能。

マッケイマッケイ

リファレンス アーキテクチャ
リファレンスアーキテクチャ

  • データ匿名化ストリーミング パイプライン: Dataflow を使用してテキスト内のセンシティブ データを匿名化します。このパイプラインは、複数の変換やユースケースで再利用できます。
  • 構成(DLP テンプレートと鍵)の管理: 匿名化方法と暗号鍵を公開しないように、少数のユーザー グループ(セキュリティ管理者など)のみがアクセスできるマネージドの匿名化構成で構成されます。
  • データ検証と再識別のパイプライン: 匿名化されたデータのコピーを検証し、Dataflow パイプラインを使用して大規模なデータの再識別を行います。
マッケイマッケイ

保存時の暗号化: Cloud Storage

GCPでは、保存されているデータをデフォルトで暗号化している。Cloud Storage バケットにアップロードされたオブジェクトはGoogle が管理する暗号鍵で暗号化される。

転送中の暗号化: Dataflow

転送中のデータの暗号化方法は保存時と異なります。転送中データは、転送時の暗号化という安全なネットワーク プロトコルによって保護されている。デフォルトの設定では、Dataflow は Google が管理する暗号鍵を使用。

マッケイマッケイ

Cloud DLP データ変換

Cloud DLP で行われる変換には主に 2 つのタイプ

レコード変換

レコード変換(RecordTransformations オブジェクト)は、特定の infoType と識別された表形式データ内の値にのみ適用されます。RecordTransformations には、さらに 2 つのサブカテゴリがあります。

  • fieldTransformations[]: さまざまなフィールド変換を適用する変換。
  • recordSuppressions[]: 完全に抑止されるレコードを定義するルール。recordSuppressions[] 内で抑止ルールに一致するレコードは、出力から除外されます。

infoType 変換

リクエストごとに 1 つ以上の infoType 変換を指定できます。各 InfoTypeTransformation オブジェクトに、次の両方を指定します。

  • 変換を適用する 1 つ以上の infoType(infoTypes[] 配列オブジェクト)
  • プリミティブ変換(PrimitiveTransformation オブジェクト)
マッケイマッケイ

匿名化プロセスを複雑な順に示すと、次のようになります。

  • 削除: 機密性の高いコンテンツを置換せずに削除します。
  • マスキング: 機密性の高いコンテンツを特定の文字で置き換えます。
  • 暗号化: 機密性の高いコンテンツを暗号化された文字列で置き換えます。
マッケイマッケイ

変換タイプの決定

  • 双方向トークン化: 元のデータを確定的なトークンに置き換え、参照整合性を維持します。 トークンを使用してデータの結合や集計分析を行うことができます。
    • 確定的暗号化(DE): 元のデータを base64 エンコードの暗号化された値に置き換え、元の文字セットや長さを保持しません。
    • FFX によるフォーマット保持暗号化(FPE-FFX): FFX モードのフォーマット保持暗号化を使用して生成されたトークンで元のデータを置き換えます。認証と初期化ベクトルがないため、出力トークンが長くなる可能性があります。従長さや文字セットの保持が必ずしも必要でない場合には、DE など、より強力なセキュリティを提供する方法をおすすめします。
  • 暗号ハッシュを使用した一方向のトークン化: 元の値をハッシュ値で置き換え、参照整合性を維持します。 ただし、双方向トークン化とは異なり、この方法ではデータを元に戻すことはできません。ハッシュ値は、入力値に SHA-256 ベースのメッセージ認証コード(HMAC-SHA-256)を使用して生成されます。
  • マスキング: 指定した文字で元のデータを部分的または完全に置換します。
  • バケット化: 識別しやすい値を識別しにくい値で置き換えます。
  • 置換: 元のデータをトークンまたは infoType の名前(検出された場合)で置き換えます。
マッケイマッケイ

方法の選択

最適な匿名化方法はユースケースによって異なります。たとえば、従来のアプリで匿名化されたレコードを処理している場合は、形式の保持が重要になります。 厳密にフォーマットされた 10 桁の数値を扱う場合、FPE を使用すると、入力の長さ(10 桁)と文字セット(数値)を保持できます。

ただし、Card Holder's Name 列の値のように、従来のフォーマットを厳密に維持する必要ない場合は、より強力な認証方法である DE をおすすめします。FPE と DE は、トークンの復元またはトークン化の解除を行うことができます。トークン化の解除が必要ない場合は、暗号ハッシュを使用すると整合性が維持されます。ただし、トークンを元に戻すことはできません。

完全な整合性を維持する必要のない値に対しては、マスキング、バケット化、日付シフト、置換などの方法が適しています。たとえば、年齢の値(例: 27)を年齢層(20〜30)にバケット化しても、個人の特定につながる可能性があります。

マッケイマッケイ

アーキテクチャ

アーキテクチャ

  1. JDBC を使用してリレーショナル データベースからデータを抽出する。
  2. データベースの LIMIT 句を使用してレコードをサンプリングする。
  3. Cloud DLP API を使用してレコードを処理し、機密カテゴリを識別する。
  4. 結果を BigQuery テーブルと Data Catalog に保存する。

sample-and-identify パイプラインは、次のファイルを Cloud Storage に出力します。

  • ソースのスキーマの Avro スキーマ(同等)
  • 各入力列(PERSON_NAME、PHONE_NUMBER、STREET_ADDRESS)の検出した infoTypes データ
マッケイマッケイ

目標

  • Data Catalog タグとエンティティ グループを作成する
  • サンプリングと識別のパイプラインをデプロイする
  • カスタム Data Catalog エンティティを作成する
  • カスタム Data Catalog エンティティに機密タグを適用する
  • 機密タグのデータも BigQuery に存在することを確認する
マッケイマッケイ

sampling-and-identify パイプラインを実行する

サンプリングと Cloud DLP 識別のパイプラインは、次の順序で次のタスクを実行します。

  1. 指定されたソースからレコードを抽出します。たとえば、Cloud DLP の識別メソッドではフラットなテーブルのみをサポートしており、パイプラインは Avro、Parquet、または BigQuery のレコードをネストしています。これらのレコードには、ネストされたフィールドと繰り返しフィールドを含めることが可能です。
  2. null 値や空の値を除く、必要なサンプルの個々の列をサンプリングします。
  3. Cloud DLP を使用して、サンプルをバッチ処理で Cloud DLP で許容されるバッチサイズ(500 KB 未満、50,000 値未満)にして、機密 infoTypes データを識別します。
  4. 後で参照するためにレポートを Cloud Storage と BigQuery に書き込みます。
  5. タグ テンプレートとエントリ グループ情報を指定すると、Data Catalog エンティティが作成されます。この情報を指定すると、パイプラインは Data Catalog 内のエントリ用の機密タグを適切な列に対して作成します。
マッケイマッケイ

上記の方法は失敗

{
insertId: "1trgmlrcdih"
labels: {4}
logName: "projects/hybrid-chess-379402/logs/dataflow.googleapis.com%2Fjob-message"
receiveTimestamp: "2023-05-30T07:12:45.982203534Z"
resource: {2}
severity: "ERROR"
textPayload: "Failed to start the VM, launcher-2023053000122812280768720064269652, used for launching because of status code: UNAVAILABLE, reason: One or more operations had an error: 'operation-1685430749838-5fce3ed233be2-43afc5a9-f5105bb6': [UNAVAILABLE] 'HTTP_503'.."
timestamp: "2023-05-30T07:12:44.317955461Z"
}
マッケイマッケイ

テンプレートから作成する試み
Data Masking/Tokenization from Cloud Storage to BigQuery (using Cloud )

マッケイマッケイ

こちらも失敗、

{
insertId: "1ohrzb9a3"
labels: {4}
logName: "projects/hybrid-chess-379402/logs/dataflow.googleapis.com%2Fjob-message"
receiveTimestamp: "2023-05-30T07:49:09.810502402Z"
resource: {2}
severity: "ERROR"
textPayload: "Workflow failed. Causes: Project hybrid-chess-379402 has insufficient quota(s) to execute this workflow with 5 instances in region us-central1. Quota summary (required/available): 5/24 instances, 20/24 CPUs, 4150/4096 disk GB, 0/500 SSD disk GB, 1/100 instance groups, 1/50 managed instance groups, 1/100 instance templates, 5/8 in-use IP addresses.

Please see https://cloud.google.com/compute/docs/resource-quotas about requesting more quota."
timestamp: "2023-05-30T07:49:08.185699259Z"
}