Google Cloud DLP токенизация табличных данных с CryptoDeterministicConfig и пользовательским инфо-типом - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь токенизировать строковое значение (переданное в табличном формате) с пользовательским инфо-типом регулярного выражения, но возникают проблемы, когда я добавляю более одной строки в таблицу. Если я пропущу одну строку, он успешно токенизирует string_value и возвращает закодированную строку. Для этого я использую библиотеку python.

Пользовательский тип информации в настоящее время имеет любое значение в строке для демонстрационной цели, а упакованный ключ присутствует в облачной KMS (убрал его здесь из соображений безопасности).

Ниже приводится конфигурация, которую я использую:

# Construct FPE configuration dictionary
crypto_replace_ffx_fpe_config = {
    "crypto_key": {
        "kms_wrapped": {
            "wrapped_key": wrapped_key,
            "crypto_key_name": key_name,
        }
    }
}
# Add surrogate type
if surrogate_type:
    crypto_replace_ffx_fpe_config["surrogate_info_type"] = {
        "name": surrogate_type
    }

# Construct inspect configuration dictionary
inspect_config = {
    #"info_types": [{"name": info_type} for info_type in info_types],
    #"min_likelihood": "VERY_UNLIKELY",
    "custom_info_types": [
        {
            "info_type": {
                "name": "custom"
            },
            "exclusion_type": "EXCLUSION_TYPE_UNSPECIFIED",
            "likelihood": "POSSIBLE",
            "regex": {
                "pattern": "(?:.*)"
                #"pattern": ".*"
            }
        }
    ]
}

# Construct deidentify configuration dictionary
deidentify_config = {
    "info_type_transformations": {
        "transformations": [
            {
                "primitive_transformation": {
                    "crypto_deterministic_config": crypto_replace_ffx_fpe_config
                }
            }
        ]
    }
}
item={
    "table":{
        "headers":[{
            "name":header
            } for header in data_headers
        ],
        "rows":[
            {
                "values":[
                    {
                        "string_value":"asa s.com"
                    }
                ]
            },  #Issue starts when the below row is added having any value in string_value
            {
                "values":
                [
                    {
                        "string_value":"14562@gmail.com"
                    }
                ]
            }
        ]
    }
}

    # Call the API
response = dlp.deidentify_content(
    parent,
    inspect_config=inspect_config,
    deidentify_config=deidentify_config,
    item=item,
)

# Print results
return response.item.table

Если я отправляю одну строку данных, получаю ответ как

headers {
  name: "token"
}
rows {
  values {
    string_value: "EMAIL_ADDRESS(XX):XXXXXXXXXXXXXXXXXXX="
  }
}

И когда я отправляю элемент с более чем одной строкой, я получаю то, что я первоначально отправил в API, как он вернулся: например:

headers {
    name: "token"
}
rows {
      values {
        string_value: "asa s.com"
    }
}
rows {
    values {
        string_value: "14562@gmail.com"
    }
}

1 Ответ

0 голосов
/ 16 апреля 2020

Похоже, вы используете InfoTypeTransformations для DeidentifyConfig .

Согласно документации, вы должны использовать RecordTransformations вместо этого, поскольку эта категория преобразования "применяется к значениям в представленных табличных текстовых данных, которые определены как указанный c infoType, или на весь столбец табличных данных "и обрабатывать набор данных как структурированный.

...