Google cloud platform 如果安装了SDK,如何获取在本地计算机上使用GCP数据丢失预防API的有效令牌?

Google cloud platform 如果安装了SDK,如何获取在本地计算机上使用GCP数据丢失预防API的有效令牌?,google-cloud-platform,request,token,gcloud,google-cloud-dlp,Google Cloud Platform,Request,Token,Gcloud,Google Cloud Dlp,目前,我没有设法让Google Cloud Platform Data Loss Prevention(DLP)python客户端库在SSL代理之后工作(它可以与其他GCP客户端库(例如存储或bigquery)配合使用): 因此,我尝试使用request.post在SSL代理后面使用API url = 'https://dlp.googleapis.com/v2/projects/'+os.environ['PROJECT_ID']+'/content:inspect' headers =

目前,我没有设法让Google Cloud Platform Data Loss Prevention(DLP)python客户端库在SSL代理之后工作(它可以与其他GCP客户端库(例如存储或bigquery)配合使用):

因此,我尝试使用
request.post
在SSL代理后面使用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)上,给我几分钟相同的令牌,每次执行命令时,我都会得到一个新令牌。在我的本地计算机上,如果我用
CloudShell
中的令牌替换头部中的gcloud命令,它将正常工作。我在本地计算机和
CloudShell
上都有最新版本的
SDK

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

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

问题1:每次运行gcloud auth时 本地打印访问令牌(SDK),我们得到一个新令牌吗?(在CloudShell上) 这是相同的令牌,持续几分钟)

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

问题2:生成令牌的最简单/最佳方法是什么?自从 gcloud auth打印访问令牌似乎不是正确的方法 使用本地机器和SDK时。这不是一个富有成效的计划 应用这只是为了测试DLPAPI

从CLI获取令牌只是为了测试。通常的方法是使用SDK。但是,由于您使用的是RESTAPI,请阅读我撰写的这篇文章,其中介绍了如何在自己的代码中创建令牌并在RESTAPI中使用它们。我的文章包括Python源代码和一个调用ComputeAPI列出项目实例的示例


谢谢。对于问题2,很明显,感谢这个伟大的链接。关于问题1,我已经在本地安装了SDK并正在工作。如何查看和控制令牌的有效期?我在gcloud选项中进行了深入研究,但什么都看不到。我尝试在安装SDK的地方本地运行代码。我不知道有任何Google API库支持设置过期。默认值和最大值为3600秒。我的代码允许更改过期时间。要关闭此线程,GCP团队将给出关于为什么每次都要重新生成令牌的答案“我知道您想知道Cloud Shell和Windows的SDK行为是否应该相同。这是一种预期行为,Windows的SDK在每次执行命令时都会重新生成令牌,因为这是一种设计选择。“@Dr.FabienTarrade-当你说“Windows SDK”时,你是指客户端库还是CLI
gcloud
?谷歌的答案必须以令牌的创建方式开头(访问令牌、身份令牌、签名JWT等),按类型(用户/服务帐户)和库。对不起,请在没有上下文的情况下进行复制和粘贴。是的,它正在安装SDK的Windows计算机上使用CLI gcloud(使用服务帐户)。