Я пытаюсь использовать клиентскую библиотеку Google Cloud Platform Data Loss Prevention (DLP) для Python, работающую через прокси-сервер SSL: https://cloud.google.com/dlp/docs/libraries#client-libraries-usage-python
Я использую фрагмент кода из документа:
# Import the client library
import google.cloud.dlp
import os
import subprocess
import json
import requests
import getpass
import urllib.parse
import logging
logging.basicConfig(level=logging.DEBUG)
# Instantiate a client.
dlp_client = google.cloud.dlp.DlpServiceClient()
# The string to inspect
content = 'Robert Frost'
# Construct the item to inspect.
item = {'value': content}
# The info types to search for in the content. Required.
info_types = [{'name': 'FIRST_NAME'}, {'name': 'LAST_NAME'}]
# The minimum likelihood to constitute a match. Optional.
min_likelihood = 'LIKELIHOOD_UNSPECIFIED'
# The maximum number of findings to report (0 = server maximum). Optional.
max_findings = 0
# Whether to include the matching string in the results. Optional.
include_quote = True
# Construct the configuration dictionary. Keys which are None may
# optionally be omitted entirely.
inspect_config = {
'info_types': info_types,
'min_likelihood': min_likelihood,
'include_quote': include_quote,
'limits': {'max_findings_per_request': max_findings},
}
# Convert the project id into a full resource id.
parent = dlp_client.project_path('my-project-id')
# Call the API.
response = dlp_client.inspect_content(parent, inspect_config, item)
# Print out the results.
if response.result.findings:
for finding in response.result.findings:
try:
print('Quote: {}'.format(finding.quote))
except AttributeError:
pass
print('Info type: {}'.format(finding.info_type.name))
# Convert likelihood value to string respresentation.
likelihood = (google.cloud.dlp.types.Finding.DESCRIPTOR
.fields_by_name['likelihood']
.enum_type.values_by_number[finding.likelihood]
.name)
print('Likelihood: {}'.format(likelihood))
else:
print('No findings.')
Я также установил следующую переменную ENV:
GOOGLE_APPLICATION_CREDENTIALS
Он работает без проблем, когда вы не используете прокси-сервер SSL. Когда я работаю за прокси, я настраиваю 3 переменные ENV:
REQUESTS_CA_BUNDLE
HTTP_PROXY
HTTPS_PROXY
При такой настройке другие библиотеки Python клиента GCP отлично работают за прокси-сервером SSL, например, для хранилища или bigquery).
Для библиотеки python DLP Client я получаю:
E0920 12:21:49.931000000 24852 src/core/tsi/ssl_transport_security.cc:1229] Handshake failed with fatal error SSL_ERROR_SSL: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed.
DEBUG:google.api_core.retry:Retrying due to 503 Connect Failed, sleeping 0.0s ...
E0920 12:21:50.927000000 24852 src/core/tsi/ssl_transport_security.cc:1229] Handshake failed with fatal error SSL_ERROR_SSL: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed.
DEBUG:google.api_core.retry:Retrying due to 503 Connect Failed, sleeping 0.0s ...
Я не нашел в документации объяснения, работает ли библиотека с прокси в качестве одной клиентской библиотеки GCP и как настроить ее для работы с прокси SSL. Библиотека находится в стадии бета-тестирования, поэтому может оказаться, что она еще не реализована.
Кажется, это связано с сертификатом CA и рукопожатием. Нет проблем с тем же ЦС для библиотеки Python BigQuery и Storage Client. Любая идея ?