1

现在我没有设法让用于 python 的 Google Cloud Platform Data Loss Prevention (DLP) 客户端库在 SSL 代理后面工作(它可以与其他 GCP 客户端库一起正常工作,例如用于存储或 bigquery): https://cloud .google.com/dlp/docs/libraries#client-libraries-usage-python

所以我尝试使用request.postSSL 代理背后的 API

url = 'https://dlp.googleapis.com/v2/projects/'+os.environ['PROJECT_ID']+'/content:inspect'

headers = {
    'Content-Type': 'application/json',
    'Authorization':  'Bearer {}'.format(subprocess.run('gcloud auth print-access-token', shell=True, check=True, stdout=subprocess.PIPE).stdout.decode().replace('\n', '').replace('\r', ''))
}

}
json_response = requests.post(url=url, json=parsed, headers=headers, proxies=proxies, verify=True)
json.loads(json_response.text)

CloudShell这在我安装的本地机器上工作正常,但不是SDK。原因在于CloudShell

gcloud auth print-access-token

在我的本地机器(Windows 或 Mac)上给我相同的令牌几分钟,每次我执行命令时,我都会得到一个新的令牌。在我的本地机器上,如果我在标头中用令牌替换 gcloud 命令,CloudShell它工作正常。我的SDK本地机器和CloudShell.

问题1:预计每次我们在gcloud auth print-access-token本地运行时(SDK),我们都会得到一个新的token?(在CloudShell几分钟内它是相同的令牌)

问题 2:生成令牌的最简单/最佳方法是什么?因为gcloud auth print-access-token在使用本地机器和SDK. 这不是一个高效的应用程序。这只是为了测试 DLP API。

4

1 回答 1

2

问题1:预计每次我们在本地(SDK)运行gcloud auth print-access-token,我们都会得到一个新的token?(在 CloudShell 上,它在几分钟内是相同的令牌)

答案取决于您运行代码的位置。从 Google 计算服务(Cloud Shell 是一个 VM)运行时,令牌来自元数据服务器。我现在确定令牌是否缓存或缓存多长时间。令牌有一个过期时间(默认 3600 秒),因此元数据服务器很容易缓存令牌。如果您的代码在 Google Cloud 之外运行,则答案取决于使用的库。

问题 2:生成令牌的最简单/最佳方法是什么?因为 gcloud auth print-access-token 在使用本地机器和 SDK 时似乎不是正确的方法。这不是一个高效的应用程序。这只是为了测试 DLP API。

从 CLI 获取令牌仅用于测试。正常的方法是使用SDK。但是,由于您使用的是 REST API,请阅读我写的这篇文章,了解如何在您自己的代码中创建令牌并在 REST API 中使用它们。我的文章包括 Python 源代码和一个调用 Compute API 以列出项目中的实例的示例。

Google Cloud – 为 REST API 调用创建 OAuth 访问令牌

于 2019-09-17T17:37:13.937 回答