Как узнать местоположение отсканированного файла при использовании Google Cloud DLP API?

Я сканирую вложенный каталог в облачном хранилище. Результат не содержит соответствующего значения (цитата), хотя у меня есть include_quote. Кроме того, как я могу получить имя файлов, у которых есть соответствие наряду с соответствующими значениями? Я использую Python. Это то, что я до сих пор. Как видите, API нашел соответствие, но я не получаю информацию о том, какие слова (и файлы) были помечены.

inspect_job = {
  'inspect_config': {
      'info_types': info_types,
      'min_likelihood': MIN_LIKELIHOOD,
      'include_quote': True,
      'limits': {
          'max_findings_per_request': MAX_FINDINGS
      },
  },
  'storage_config': {
      'cloud_storage_options': {
          'file_set': {
              'url':
                  'gs://{bucket_name}/{dir_name}/**'.format(
                      bucket_name=STAGING_BUCKET, dir_name=DIR_NAME)
          }
      }
  }


operation = dlp.create_dlp_job(parent, inspect_job)
dlp.get_dlp_job(operation.name)

Вот результат:

result {
processed_bytes: 64
total_estimated_bytes: 64
info_type_stats {
  info_type {
    name: "EMAIL_ADDRESS"
  }
  count: 1
}
info_type_stats {
  info_type {
    name: "PHONE_NUMBER"
  }
  count: 1
}
info_type_stats {
  info_type {
    name: "FIRST_NAME"
  }
  count: 2
}

3 ответа

Решение

Вам нужно следовать разделу "Получение результатов проверки" в https://cloud.google.com/dlp/docs/inspecting-storage и указать действие сохранения результатов https://cloud.google.com/dlp/docs/reference/rest/v2/InspectJobConfig

Я думаю, что вы не получаете значение цитаты, потому что ваш inspectConfig не совсем прав: в соответствии с документами, расположенными по адресу https://cloud.google.com/dlp/docs/reference/rest/v2/InspectConfig вы должны установить

  "includeQuote": true 

Изменить: добавление информации о получении файлов: следующий пример: https://cloud.google.com/solutions/automating-classification-of-data-uploaded-to-cloud-storage

Код для облачной функции resol_DLP получает имя файла из деталей задания, как это

def resolve_DLP(data, context):
...
job = dlp.get_dlp_job(job_name)
...
file_path = (
      job.inspect_details.requested_options.job_config.storage_config
      .cloud_storage_options.file_set.url)
  file_name = os.path.basename(file_path)
...

Изменить 2: теперь я вижу, что последний клиент Python API, который использует "include_quote": в качестве ключа dict.... так что это не так...

Изменить 3: из кода API Python:

message Finding {
  // The content that was found. Even if the content is not textual, it
  // may be converted to a textual representation here.
  // Provided if `include_quote` is true and the finding is
  // less than or equal to 4096 bytes long. If the finding exceeds 4096 bytes
  // in length, the quote may be omitted.
  string quote = 1;

Так что, возможно, небольшие файлы приведут к кавычкам

Рондо, спасибо за ваш вклад. Я полагаю, что пример облачного хранилища, который вы упомянули, сканирует только один файл для каждой работы. Он не использует объект savefindings.

Джош, ты прав. Кажется, нужно направить вывод в Bigquery или Pub/sub, чтобы увидеть полный результат.

С https://cloud.google.com/dlp/docs/inspecting-storage:

Для получения полных результатов проверки у вас есть два варианта. В зависимости от выбранного вами действия, инспекционные задания:

Сохранено в BigQuery (объект SaveFindings) в указанной таблице. Перед просмотром или анализом результатов сначала убедитесь, что задание выполнено, используя метод projects.dlpJobs.get, который описан ниже. Обратите внимание, что вы можете указать схему для хранения результатов, используя объект OutputSchema. Публикуется в облачной публикации / подразделе (объект PublishToPubSub). В теме должны быть предоставлены права доступа к публикации для учетной записи службы Cloud DLP, на которой выполняется DlpJob, отправляющий уведомления.

Я получил его, изменив решение. Как сканировать таблицу BigQuery с помощью DLP в поисках конфиденциальных данных?,

Вот мой последний рабочий скрипт:

import google.cloud.dlp
dlp = google.cloud.dlp.DlpServiceClient()

inspect_job_data = {
    'storage_config': {
      'cloud_storage_options': {
          'file_set': {
              'url':
                  'gs://{bucket_name}/{dir_name}/**'.format(
                      bucket_name=STAGING_BUCKET, dir_name=DIR_NAME)
          }
      }
  },
'inspect_config': {
    'include_quote': include_quote,
    'info_types': [
        {'name': 'ALL_BASIC'},
    ],
},
'actions': [
    {
        'save_findings': {
            'output_config':{
                'table':{
                    'project_id': GCP_PROJECT_ID,
                    'dataset_id': DATASET_ID,
                    'table_id': '{}_DLP'.format(TABLE_ID)
                }
            }

        },
    },
]

}

operation = dlp.create_dlp_job(parent=dlp.project_path(GCP_PROJECT_ID), 
inspect_job=inspect_job_data)
Другие вопросы по тегам