Open17

Cloud DLPの検出器と変換パターン

マッケイマッケイ

グローバル

43個の情報タイプが用意されている。

PII(Personally Identifiable Information)に分類されるものを列挙する

概要 説明
広告識別子 Google Play 広告 ID、Amazon 広告 ID、Apple の identifierForAdvertising(IDFA)や identifierForVendor(IDFV)など
年齢 月数または年数で表されます。
出生地 出生地、居住地、市民権に言及するために使用される場合、国
生年月日 コンテキストによって生年月日として識別される日付
メールアドレス ドメイン名の最大長は 255 文字、ローカル部分の最大長は 64 文字
電話番号
女性の名前 一般的な女性の名前
男性の名前 一般的な男性の名前
名前 氏名(名、ミドルネーム、イニシャル、姓などが含まれます)
HTTP 基本認証ヘッダー 基本認証ヘッダーは、サーバーに対してユーザーを特定するために使用する HTTP ヘッダーです。RFC 1945 の HTTP 仕様の一部
HTTP Cookie と set-cookie ヘッダー サーバーに送信された Cookie またはサーバーから送信された Cookie を含むヘッダー
ICCID value for SIM cards SIMカードを一意に識別するもの
スマートフォンの IMEI 番号 携帯電話を識別するために使用される IMEI
User IMSI number 帯電話ネットワークのユーザーを識別するために使用される、IMSI識別子
IP アドレス インターネット プロトコル(IP)アドレス(IPv4 または IPv6)
MAC アドレス ネットワーク アダプタの識別子
ローカル MAC アドレス
番地 住所の番地
車両識別番号 車両識別番号(VIN)は、公道を走る自動車に割り当てられた固有の 17 桁のコード

PIIではないが、機密性が高い情報
これからのデータは大抵、SPII(Sensitive PII)に区分されている。

概要 説明
認証トークン この検出器は OAuth 認証または Bearer 認証に準拠するトークンを識別
AWSの認証情報 AWSののアカウントアクセスキー
Azure JSON ウェブトークン Azure 証明書の認証情報
クレジット カード番号 12〜19 桁のクレジット カード番号
クレジット カード トラック番号 クレジット カード トラック番号は可変長の英数字の文字列です。カード所有者に関する重要な情報の格納に使用されます
暗号鍵
Google Cloud Platform API キー GCPのAPIキー
Google Cloud Platform サービス アカウント認証情報 GCPのサービスアカウント認証情報
OAuthのクライアントシークレット 構成、コード、その他のテキスト内のクリアテキストのパスワード
SSL 証明書 セキュア ソケット レイヤ プロトコルを使用して、本人確認と安全な接続を確立するために使用される暗号証明書
最もよく使われている脆弱なハッシュ化パスワードの上位 100,000 件 ハッシュを簡単に推測できる、よく使用されるパスワード

グローバルで、PIIでかつ機密性が高い情報

  • 健康保険番号(ケベック州)
  • 出生地
  • ICCID value for SIM cards
  • スマートフォンの IMEI 番号
  • User IMSI number
  • 車両識別番号
マッケイマッケイ

Japan

日本で利用されるデータの情報タイプもある。
日本のデータはどれもSPIIに区分されており、機密性はいずれも「高」

概要 説明
銀行口座番号
運転免許証番号
個人番号または「マイナンバー」
パスポート番号 パスポート番号はアルファベット 2 文字と 7 桁の数字で構成される
マッケイマッケイ

カスタム辞書検出器

辞書型のカスタム検出器を作成するには、JSON オブジェクトで任意のプロパティを指定する。

メソッドの説明

  • InfoType: 検出器に付ける名前
  • Likelihood: フィールドを指定しない場合、辞書項目と一致したものについて、デフォルトの値 VERY_LIKELYを返却
    • 検出器の誤検出の閾値を設定
  • DetectionRule: 楽観的なマッチングパターンを設定する
    • 例えば、電話番号を検出するInfoTypeに対して、先頭にTELが付いている場合を許容するなど
  • SensitivityScore: InfoTypeの機密レベルを設定
  • データのプロファイルで使用される
  • WordList: 一致させる文字列
{
  "customInfoTypes":[
    {
      "infoType":{
        "name":"CUSTOM_INFOTYPE_NAME"
      },
      "likelihood":"LIKELIHOOD_LEVEL",
      "detectionRules":[
        {
          "hotwordRule":{
            HOTWORD_RULE
          }
        },
        ...
      ],
      "sensitivityScore":{
          "score": "SENSITIVITY_SCORE"
        },
      "dictionary":
      {
        "cloudStoragePath":
        {
          "path": "gs://PATH_TO_TXT_FILE"
        }
      }
    }
  ],
  ...
}

例えば、通院患者の治療に使用された病室の情報を含むデータがあった場合、その特定のワードが入っているデータを検出します。

{
  "item":{
    "value":"Patient was seen in RM-YELLOW then transferred to rm green."
  },
  "deidentifyConfig":{
    "infoTypeTransformations":{
      "transformations":[
        {
          "primitiveTransformation":{
            "replaceWithInfoTypeConfig":{

            }
          }
        }
      ]
    }
  },
  "inspectConfig":{
    "customInfoTypes":[
      {
        "infoType":{
          "name":"CUSTOM_ROOM_ID"
        },
        "dictionary":{
          "wordList":{
            "words":[
              "RM-GREEN",
              "RM-YELLOW",
              "RM-ORANGE"
            ]
          }
        }
      }
    ]
  }
}

組み込みの infoType 検出器の拡張することも可能

...
  "inspectConfig":{
    "customInfoTypes":[
      {
        "infoType":{
          "name":"PERSON_NAME"
        },
        "dictionary":{
          "wordList":{
            "words":[
              "quasimodo"
            ]
          }
        }
      }
    ]
  }
...
マッケイマッケイ

カスタム正規表現検出器の作成

正規表現を定義して、パターンマッチングによる検出を行う。

メソッドの説明
~カスタム辞書検出器と重複する箇所は省略~

  • Regex : 正規表現を定義する単一のパターンで構成される
{
  "customInfoTypes":[
    {
      "infoType":{
        "name":"CUSTOM_INFOTYPE_NAME"
      },
      "likelihood":"LIKELIHOOD_LEVEL",
      "detectionRules":[
        {
          "hotwordRule":{
            HOTWORD_RULE
          }
        },
      "sensitivityScore":{
          "score": "SENSITIVITY_SCORE"
        },
      ],
      "regex":{
        "pattern":"REGULAR_EXPRESSION_PATTERN"
      }
    }
  ],
  ...
}
マッケイマッケイ

匿名下手法の種類

  • 削除: 検出された機密値のすべてまたは一部を削除します。
  • 置換: 検出された機密値を指定されたサロゲート値に置換します。
  • マスキング: 機密値の文字数をハッシュ(#)やアスタリスク(*)などの指定された代替文字に置き換えます。
  • 暗号ベースのトークン化: 暗号鍵を使用して元の機密値を暗号化します。Cloud DLP は、逆行または「再識別」できる変換を含む数種類のトークン化をサポートしています。
  • バケット化: 機密値をある範囲の値に置き換えることによって「一般化」します(たとえば、特定の年齢を年齢の範囲に、気温を「暑い」「ふつう」「寒い」に対応する範囲に置き換えます)。
  • 日付シフト: 機密の日付値をランダムな日数だけシフトします。
  • 時間抽出: 日付と時刻の値の指定部分を抽出または保存します。
マッケイマッケイ

削除

検出したパターンを削除します。

DLP API: RedactConfig

Input
{
  "item":{
    "value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
  },
  "deidentifyConfig":{
    "infoTypeTransformations":{
      "transformations":[
        {
          "infoTypes":[
            {
              "name":"EMAIL_ADDRESS"
            }
          ],
          "primitiveTransformation":{
            "redactConfig":{
            }
          }
        }
      ]
    }
  },
  "inspectConfig":{
    "infoTypes":[
      {
        "name":"EMAIL_ADDRESS"
      }
    ]
  }
}
Output
{
  "item":{
    "value":"My name is Alicia Abernathy, and my email address is ."
  },
}
マッケイマッケイ

置換

検出したパターンを任意の文字列で置換します。

DLP API: ReplaceValueConfig

Input
{
  "item":{
    "value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
  },
  "deidentifyConfig":{
    "infoTypeTransformations":{
      "transformations":[
        {
          "infoTypes":[
            {
              "name":"EMAIL_ADDRESS"
            }
          ],
          "primitiveTransformation":{
            "replaceConfig":{
              "newValue":{
                "stringValue":"[email-address]"
              }
            }
          }
        }
      ]
    }
  },
  "inspectConfig":{
    "infoTypes":[
      {
        "name":"EMAIL_ADDRESS"
      }
    ]
  }
}

Output
{
  "item":{
    "value":"My name is Alicia Abernathy, and my email address is [email-address]."
  },
}

辞書置換も可能。

その場合、wordListで指定されたものがランダムで出力される

Input
{
  "item": {
    "value": "My name is Alicia Abernathy, and my email address is aabernathy@example.com."
  },
  "deidentifyConfig": {
    "infoTypeTransformations": {
      "transformations": [
        {
          "infoTypes": [
            {
              "name": "EMAIL_ADDRESS"
            }
          ],
          "primitiveTransformation": {
            "replaceDictionaryConfig": {
              "wordList": {
                "words": [
                  "izumi@example.com",
                  "alex@example.com",
                  "tal@example.com"
                ]
              }
            }
          }
        }
      ]
    }
  },
  "inspectConfig": {
    "infoTypes": [
      {
        "name": "EMAIL_ADDRESS"
      }
    ]
  }
}
マッケイマッケイ

マスキング

検出した文字を、*#で置換する。

置換と異なるのは、一部だけ適応するなどの処理が可能。

DLP API: CharacterMaskConfig

メソッド

  • maskingCharacter: 置換文字
  • numberToMask: 先頭(または後尾)からのマスキング文字数
  • reverseOrder: 逆順にすると、一致した値の文字は値の終わりから始まりに向かってマスキングされる
  • charactersToIgnore: マスキングを無視する文字列。
Input
{
  "item":{
    "value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
  },
  "deidentifyConfig":{
    "infoTypeTransformations":{
      "transformations":[
        {
          "infoTypes":[
            {
              "name":"EMAIL_ADDRESS"
            }
          ],
          "primitiveTransformation":{
            "characterMaskConfig":{
              "maskingCharacter":"#",
              "reverseOrder":false,
              "charactersToIgnore":[
                {
                  "charactersToSkip":".@"
                }
              ]
            }
          }
        }
      ]
    }
  },
  "inspectConfig":{
    "infoTypes":[
      {
        "name":"EMAIL_ADDRESS"
      }
    ]
  }
}
Output
{
  "item":{
    "value":"My name is Alicia Abernathy, and my email address is ##########@#######.###."
  },
  ...
}
マッケイマッケイ

暗号ベースのトークン化変換

暗号ベースのトークン化(「仮名化」とも呼ばれます)変換を行う。

  • 暗号ハッシュ
  • フォーマット保持暗号化
  • 確定的暗号化

暗号ハッシュ

DLP API: CryptoHashConfig

暗号ハッシュ変換を行うと、検出された情報をBase64 エンコードで変換して出力します。

以下の注意点があります。

  • 入力値は暗号化されずにハッシュされます。
  • この操作は元に戻せません。
  • ハッシュできるのは文字列と整数値のみです。

フォーマット保持暗号化

DLP API: CryptoReplaceFfxFpeConfig

入力値(Cloud DLP が検出した機密データの一部)を受け取り、それを FFX モードのフォーマット保持暗号化と CryptoKey を使用して元の値を暗号化された値(トークン)に置き換えます。

生成されるトークンは次のとおりです。

  • 暗号化された入力値です。
  • 暗号化後の文字セット(「アルファベット」)と入力値の長さを保持します。

確定的暗号化

検出した情報を、[AES-SIV[(https://datatracker.ietf.org/doc/html/rfc5297)とCryptoKeyで暗号化してから、元の値を Base64 エンコードの暗号化された値に置換します。

生成されるトークンは次のとおりです。

  • 暗号化された値の Base64 エンコード表現です。
  • 暗号化後の文字セット(「アルファベット」)と入力値の長さを保持しません。
  • CryptoKey に基づき SIV モードでの AES 暗号化(AES-SIV)を使用して計算されます。
Input
{
  "deidentifyConfig":{
    "infoTypeTransformations":{
      "transformations":[
        {
          "infoTypes":[
            {
              "name":"PHONE_NUMBER"
            }
          ],
          "primitiveTransformation":{
            "cryptoDeterministicConfig":{
              "cryptoKey":{
                "unwrapped":{
                  "key":"[CRYPTO_KEY]"
                }
              },
              "surrogateInfoType":{
                "name":"PHONE_SURROGATE"
              }
            }
          }
        }
      ]
    }
  },
  "inspectConfig":{
    "infoTypes":[
      {
        "name":"PHONE_NUMBER"
      }
    ]
  },
  "item":{
    "value":"My phone number is 206-555-0574, call me"
  }
}
output
My phone number is PHONE_SURROGATE(36):ATZBu5OCCSwo+e94xSYnKYljk1OQpkW7qhzx, call me

ちなみに、暗号鍵があれば戻る。

INPUT
{
  "reidentifyConfig":{
    "infoTypeTransformations":{
      "transformations":[
        {
          "infoTypes":[
            {
              "name":"PHONE_SURROGATE"
            }
          ],
          "primitiveTransformation":{
            "cryptoDeterministicConfig":{
              "cryptoKey":{
                "unwrapped":{
                  "key":"[CRYPTO_KEY]"
                }
              },
              "surrogateInfoType":{
                "name":"PHONE_SURROGATE"
              }
            }
          }
        }
      ]
    }
  },
  "inspectConfig":{
    "customInfoTypes":[
      {
        "infoType":{
          "name":"PHONE_SURROGATE"
        },
        "surrogateType":{

        }
      }
    ]
  },
  "item":{
    "value":"My phone number is [PHONE_SURROGATE](36):ATZBu5OCCSwo+e94xSYnKYljk1OQpkW7qhzx, call me"
  }
}
Output
My phone number is 206-555-0574, call me
マッケイマッケイ

バケット

バケット変換は、数値データを範囲ごとに「バケット化」することによる数値データの匿名化手法。

Cloud DLP: FixedSizeBucketingConfig, BucketingConfig

Input
"bucketingConfig":{
  "buckets":[
    {
      "min":{
        "integerValue":"1"
      },
      "max":{
        "integerValue":"30"
      },
      "replacementValue":{
        "stringValue":"LOW"
      }
    },
    {
      "min":{
        "integerValue":"31"
      },
      "max":{
        "integerValue":"65"
      },
      "replacementValue":{
        "stringValue":"MEDIUM"
      }
    },
    {
      "min":{
        "integerValue":"66"
      },
      "max":{
        "integerValue":"100"
      },
      "replacementValue":{
        "stringValue":"HIGH"
      }
    }
  ]
}
Output
1〜30: LOW で置換
31〜65: MEDIUM で置換
66~100: HIGHで置換
マッケイマッケイ

日付シフト

日付がランダムな日数だけシフトされる

DLP API: DateShiftConfig

Input
deidentify_config {
  record_transformations {
    field_transformations {
      fields {
        name: "date"
      }
      primitive_transformation {
        date_shift_config {
          upper_bound_days: 100
          lower_bound_days: -100
          entity_field_id {
            name: "user_id"
          }
          crypto_key {
            unwrapped {
              key: "123456789012345678901234567890ab"
            }
          }
        }
      }
    }
  }
}

日付シフト手法では、日付のセットがランダムにシフトされますが、期間の順序と持続時間は保持されます。通常、日付シフトは、個人またはエンティティのコンテキストで使用されます。つまり、各個人の日付は、その個人に固有の時間だけシフトされます。

user_id date action
1 2009-06-09 run
1 2009-06-03 walk
1 2009-05-23 crawl
2 2010-11-03 crawl
2 2010-11-22 walk

日付シフトを適用します。

user_id date action
1 2009-07-17 run
1 2009-07-11 walk
1 2009-06-30 crawl
2 2011-01-26 crawl
2 2011-02-14 walk

日付は変わりましたが、順序と持続時間は保持されていることに注目してください。日付がシフトされた量は user_id 1 と 2 で異なります。

マッケイマッケイ

時間抽出

日付、時刻、タイムスタンプに一致した値の箇所が保持されます。
DLP API: TimePartConfig

元の値 変換後の値
9/21/1976 1976
6/7/1945 1945
1/20/2009 2009
7/4/1776 1776
8/1/1984 1984
4/21/1982 1982

TimePartで抽出する条件を指定できます。

Enums
TIME_PART_UNSPECIFIED Unused
YEAR [0-9999]
MONTH [1-12]
DAY_OF_MONTH [1-31]
DAY_OF_WEEK [1-7]
WEEK_OF_YEAR [1-53]
HOUR_OF_DAY [0-23]