Crea un detector almacenado de diccionario personalizado

Los detectores de diccionarios personalizados regulares son de gran ayuda cuando tienes una lista corta de palabras o frases sensibles de las que quieres buscar el contenido. Si tienes más que solo algunas palabras o frases para buscar o si tu lista de palabras o frases cambia con frecuencia, considera crear un diccionario personalizado almacenado que pueda buscar hasta decenas de millones de palabras o frases.

En este tema, se describe cómo crear y actualizar diccionarios personalizados almacenados y se cubren varios casos de error.

Anatomía de un diccionario personalizado almacenado

Puede que estés familiarizado con el método de creación de un Infotipo personalizado de diccionario regular o de Infotipo personalizado de regex: debes definir un objeto CustomInfoType que envías al método content.deidentify. Los diccionarios personalizados almacenados son diferentes. Cada diccionario personalizado almacenado tiene dos componentes:

  • Una lista de frases que creas y defines. La lista se almacena como un archivo de texto dentro de Cloud Storage o como una columna en una tabla de BigQuery.
  • Los archivos de diccionario generados por Cloud DLP se basan en tu lista de frases. Los archivos del diccionario se almacenan en Cloud Storage y se componen de una copia de los datos de la frase fuente más los filtros de Bloom que ayudan en la búsqueda y en la detección de coincidencias. No puedes editar estos archivos directamente.

Crea un diccionario almacenado nuevo

En esta sección, se describe cómo crear, editar y actualizar un diccionario almacenado nuevo.

Crea una lista de frases

El primer paso para crear un diccionario personalizado almacenado es crear una lista de palabras y frases. Tienes dos opciones:

  • Colocar un archivo de texto con cada palabra o frase en su propia línea en un depósito de Cloud Storage.
  • Designar una columna de una tabla de BigQuery como contenedor de las frases. Dar a cada frase su propia fila en la columna. Puedes usar una tabla de BigQuery existente, siempre y cuando todas las palabras y frases del diccionario estén en una sola columna.

Ten en cuenta que es posible ensamblar una lista de términos que sea demasiado grande para que se procese en Cloud DLP. Si ves un mensaje de error, consulta "Solución de errores", más adelante en este tema.

Crea el diccionario

Una vez que hayas creado tu lista de términos, usa Cloud DLP para crear un diccionario:

  1. Crea un nuevo directorio para el diccionario en un depósito de Cloud Storage. Cloud DLP crea directorios que contienen los archivos del diccionario en la ubicación que especifiques.
  2. Usa el método de la API de Cloud DLP storedInfoTypes.create para crear el diccionario. El método create toma los siguientes parámetros:
    • Un objeto StoredInfoTypeConfig que contiene la configuración de Infotipo almacenada. Incluye la siguiente información:
      • description: una descripción del diccionario
      • displayName: el nombre que quieres dar al diccionario
      • LargeCustomDictionaryConfig: contiene la configuración del diccionario personalizado almacenado. Incluye la siguiente información:
        • BigQueryField: especificado si tu lista de términos está almacenada en BigQuery. Incluye una referencia de la tabla en la que está almacenada tu lista, más el campo que contiene cada frase del diccionario.
        • CloudStorageFileSet: especificado si tu lista de términos se almacena en Cloud Storage. Incluye la URL a la ubicación de origen en Cloud Storage en el siguiente formato: "gs://[PATH_TO_GS]". Se admiten comodines.
        • outputPath: la ruta de acceso a la ubicación en un depósito de Cloud Storage para almacenar el diccionario creado.
    • storedInfoTypeId: el identificador para el Infotipo almacenado. Este valor es la forma en que harás referencia al Infotipo almacenado cuando lo actualices o borres, o cuando lo utilices en un trabajo de inspección o anulación de la identificación. Si dejas este campo vacío, el sistema generará un identificador para ti.

A continuación, se muestra un JSON de ejemplo que, cuando se envía al método storedInfoTypes.create, crea un diccionario personalizado almacenado nuevo. En este ejemplo, hemos indicado a Cloud DLP que cree un diccionario personalizado almacenado a partir de una lista de términos almacenada en la base de datos de BigQuery de acceso público que contiene todos los nombres de usuario de GitHub que se usan en confirmaciones (bigquery-public-data.samples.github_nested). La ruta de salida para el diccionario generado se establece en un depósito de Cloud Storage denominado dlptesting, mientras que al diccionario personalizado almacenado se le dio el nombre de github-usernames.

Entrada de JSON:

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/storedInfoTypes?key={YOUR_API_KEY}

{
  "config":{
    "displayName":"GitHub usernames",
    "description":"Dictionary of github usernames used in commits",
    "largeCustomDictionary":{
      "outputPath":{
        "path":"gs://[PATH_TO_GS]"
      },
      "bigQueryField":{
        "table":{
          "datasetId":"samples",
          "projectId":"bigquery-public-data",
          "tableId":"github_nested"
        }
      }
    }
  },
  "storedInfoTypeId":"github-usernames"
}

Actualiza el diccionario

Si deseas agregar o quitar términos o frases de tu diccionario, primero, actualiza tu lista de términos de origen y, luego, indica a Cloud DLP que actualice el diccionario.

  1. Actualiza la lista de términos de origen existente en Cloud Storage o BigQuery. Agrega, quita o cambia los términos o frases, según sea necesario.
  2. Usa el método storedInfoTypes.patch de Cloud DLP para crear una versión nueva del diccionario que reemplace la anterior.

Si lo único que intentas hacer es actualizar el diccionario con términos nuevos, borrados o modificados, solo necesitas llamar al método storedInfoTypes.patch por sí mismo. Asegúrate de propagar el campo name con el nombre del recurso de la organización o del proyecto y del Infotipo almacenado que se actualizará. Proporcionaste el nombre del Infotipo almacenado cuando lo creaste en el parámetro storedInfoTypeId. Si no recuerdas el identificador del Infotipo almacenado que deseas actualizar, llama al método storedInfoTypes.list para ver una lista de todos los Infotipos almacenados actuales.

Los patrones siguientes representan entradas válidas para el campo name:

  • organizations/[ORG_ID]/storedInfoTypes/[STORED_INFOTYPE_ID]
  • projects/[PROJECT_ID]/storedInfoTypes/[STORED_INFOTYPE_ID]

Cuando actualizas un diccionario personalizado almacenado a una versión nueva, se borra la versión anterior del mismo. Mientras Cloud DLP actualiza el diccionario personalizado almacenado, el estado de este es "pendiente". Cuando el estado de la versión nueva del diccionario está pendiente, la versión anterior del diccionario todavía existe. Cualquier análisis que ejecutes mientras se actualiza el diccionario se ejecutará con la versión anterior del diccionario.

Puedes cambiar la lista de términos de origen para un diccionario personalizado almacenado existente desde uno almacenado en una tabla de BigQuery hasta uno almacenado en un depósito de Cloud Storage, y viceversa. Usa el método storedInfoTypes.patch, pero incluye un objeto CloudStorageFileSet en LargeCustomDictionaryConfig donde usaste un objeto BigQueryField antes, o viceversa. También tienes que especificar el parámetro updateMask mediante la configuración del parámetro del diccionario almacenado personalizado que actualizaste en formato FieldMask. Por ejemplo, el JSON siguiente, cuando se envía al método storedInfoTypes.patch, indica en el parámetro updateMask que se actualizó la URL de la ruta de acceso a Cloud Storage (large_custom_dictionary.cloud_storage_file_set.url):

PATCH https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/storedInfoTypes/github-usernames?key={YOUR_API_KEY}

{
  "config":{
    "largeCustomDictionary":{
      "cloudStorageFileSet":{
        "url":"gs://[BUCKET_NAME]/[PATH_TO_FILE]"
      }
    }
  },
  "updateMask":"large_custom_dictionary.cloud_storage_file_set.url"
}

Busca contenido con detectores de diccionarios personalizados almacenados

Buscar contenido mediante un detector de diccionario personalizado almacenado es similar a buscar contenido mediante otro detector de Infotipo personalizado.

El JSON siguiente, cuando se envía al método content.inspect, analiza el fragmento de texto dado con el detector de diccionario personalizado almacenado especificado. Ten en cuenta que el parámetro infoType es obligatorio porque todos los Infotipos personalizados, incluidos los diccionarios personalizados almacenados, deben tener un nombre que no entre en conflicto con Infotipos integrados o con otros Infotipos personalizados. El parámetro storedType contiene la ruta de acceso completa a los recursos del Infotipo almacenado.

Entrada de JSON:

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:inspect?key={YOUR_API_KEY}

{
  "inspectConfig":{
    "customInfoTypes":[
      {
        "infoType":{
          "name":"GITHUB_LOGINS"
        },
        "storedType":{
          "name":"projects/[PROJECT_ID]/storedInfoTypes/github-logins"
        }
      }
    ]
  },
  "item":{
    "value":"The commit was made by githubuser."
  }
}

Soluciona errores

Si cuando intentas crear un diccionario almacenado personalizado ves un error que explica que Cloud DLP no puede crear un diccionario desde tu lista de términos basados en Cloud Storage, existen algunas causas posibles:

  • Alcanzaste el límite superior para los diccionarios personalizados almacenados. Según el problema, hay varias soluciones:
    • Si alcanzas el límite superior para un único diccionario personalizado almacenado en Cloud Storage (200 MB), puedes intentar dividir el archivo en varios archivos. Aun así, puedes usar estos archivos para ensamblar un único diccionario personalizado, siempre que el tamaño total de los archivos no exceda el tamaño máximo combinado para todos los archivos de diccionarios personalizados almacenados en Cloud Storage (1 GB).
    • BigQuery no tiene los mismos límites que Cloud Storage. Considera mover los términos a una tabla de BigQuery, pero ten en cuenta tanto el tamaño máximo de la columna del diccionario personalizado almacenado en BigQuery (1 GB) como el número máximo de filas (5,000,000).
    • Si el archivo de tu lista de términos excede todos los límites aplicables de las listas de términos de origen del diccionario personalizado almacenado, debes dividir el archivo de lista de términos en varios archivos de Cloud Storage, crear un diccionario para cada archivo y, luego, crear un trabajo de análisis por separado para cada diccionario creado.
  • Uno o más de tus términos no contienen, al menos, una letra o número. Cloud DLP no puede analizar términos que estén compuestos solo de espacios o símbolos. Debe tener al menos una letra o número. Mira tu lista de términos y fíjate si hay alguno de esos términos incluido y, luego, corrígelo o bórralo.
  • Tu lista de términos contiene una frase con demasiados "componentes". Un componente en este contexto es una secuencia continua que contiene solo letras, números o caracteres que no tienen letras ni dígitos, como espacios o símbolos. Mira tu lista de términos y fíjate si hay alguno de esos términos incluido y, luego, corrígelo o bórralo.
  • La cuenta de servicio DLP no tiene acceso a los datos de origen del diccionario ni al depósito de Cloud Storage para almacenar archivos de diccionario. Para solucionar este problema, otorga a la cuenta de servicio de DLP la función de administrador de Cloud Storage o las funciones de dataOwner y jobUser de BigQuery.

Descripción general de la API

Un diccionario personalizado almacenado se considera un Infotipo almacenado debido a su tamaño y complejidad. En este momento, los diccionarios personalizados almacenados son el único tipo de Infotipo almacenado.

Un Infotipo almacenado se representa en Cloud DLP con el objeto StoredInfoType. Se acompaña de los siguientes objetos relacionados:

  • StoredInfoTypeConfig contiene la configuración del Infotipo almacenado que incluye detalles como el nombre y descripción.
  • StoredInfoTypeVersion contiene más información sobre el Infotipo almacenado como la fecha y hora de creación y los últimos cinco mensajes de error que se generaron cuando se creó la versión actual del Infotipo almacenado.
  • StoredInfoTypeState contiene el estado de la versión más actual y cualquier versión pendiente del Infotipo almacenado. La información de estado incluye si el Infotipo almacenado está en proceso de actualización, si está listo para usar o si es no válido.

Para crear, editar o borrar un Infotipo almacenado, utiliza los siguientes métodos:

  • storedInfoTypes.create: crea un Infotipo almacenado nuevo dado el StoredInfoTypeConfig que especifiques.
  • storedInfoTypes.patch: actualiza el Infotipo almacenado con una StoredInfoTypeConfig nueva que especifiques, o, si no se especifica ninguna, crea una versión nueva del Infotipo almacenado con la StoredInfoTypeConfig existente.
  • storedInfoTypes.get: recupera la StoredInfoTypeConfig y cualquier versión pendiente del Infotipo almacenado especificado.
  • storedInfoTypes.list: enumera todos los Infotipos almacenados actuales.
  • storedInfoTypes.delete: borra el Infotipo almacenado especificado.

Además de las API de Infotipo almacenado que se describen aquí, el objeto siguiente se aplica de manera específica a los diccionarios personalizados almacenados:

  • LargeCustomDictionaryConfig especifica las siguientes ubicaciones:
    • Dónde se almacena tu lista de frases dentro de Cloud Storage o BigQuery.
    • Dónde se almacenan los archivos de diccionario generados en Cloud Storage.

Detalles de coincidencias en el diccionario

Aquí tienes una guía sobre cómo Cloud DLP detecta coincidencias entre palabras y frases del diccionario. Estos puntos se aplican a los diccionarios personalizados normales y almacenados:

  • Las palabras del diccionario no distinguen entre mayúsculas y minúsculas. Si tu diccionario incluye Abby, coincidirá con abby, ABBY, Abby, etcétera.
  • Todos los caracteres, en los diccionarios o en el contenido que se va a analizar, excepto las letras y los dígitos en el plano multilingüe básico de Unicode, se consideran como espacios en blanco cuando se buscan coincidencias. Si tu diccionario busca Abby Abernathy, coincidirá con abby abernathy, Abby, Abernathy, Abby (ABERNATHY), etcétera.
  • Los caracteres que rodean cualquier coincidencia deben ser de un tipo diferente (letras o dígitos) de los caracteres adyacentes dentro de la palabra. Si tu diccionario busca Abi, coincidirá con los tres primeros caracteres de Abi904, pero no de Abigail.
  • Las palabras del diccionario que contienen una gran cantidad de caracteres que no son letras o dígitos pueden generar resultados inesperados, ya que esos caracteres se tratan como espacios en blanco.
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación sobre prevención de pérdida de datos