我有一个Cloud Function,可以与Cloud Storage和BigQuery交互,它们都属于同一个项目。从命令行部署Cloud Function时,通常遵循的方式是:
$ gcloud functions deploy my_function ... --set-env-vars GOOGLE_APPLICATION_CREDENTIALS=my_project_credentials.json
my_project_credentials.json
是一个json密钥文件,其中包含服务帐户和密钥,以允许访问Cloud Storage和BigQuery。
因为这是我此后的工作方式,所以我需要另一种方式来完全避免使用此JSON凭证文件(因为这些交互服务始终属于同一Google Cloud项目)。有这种方法吗?我对Google Cloud有点陌生,所以我对IAM的来龙去脉并不熟悉。
(我需要这样做的另一个原因是,我有一个不满意我的客户端的开发人员可以访问该json密钥,并且他/她不希望将json密钥与功能代码一起部署。请提供一些有关如何在IAM中进行此操作的详细信息,尤其是BigQuery和Cloud Storage,因为我也无法控制IAM。
答案 0 :(得分:2)
在可能的情况下,至少在应用程序在GCP上运行时,不得使用服务帐户密钥文件。 2个原因
所以,我的同伴Gabe和Kolban拥有权利。使用功能标识:
在您的代码中,使用getDefaultCredential
(根据语言,名称略有变化,但含义相同)。如果您查看源代码,将会发现该函数可以执行此操作
gcloud auth application-default login
时,凭据将存储在本地的其他位置。图书馆在寻找他们。没有“魔术”的东西。元数据服务器知道功能的身份,并可以按需生成访问和身份令牌。如果您的代码在GCP上运行,这些库将实现对它的调用-> 这就是为什么,您永远不需要服务帐户密钥文件,元数据服务器在这里为您提供此信息!
答案 1 :(得分:1)
科尔班说的话。部署Cloud Function时,您可以定义要使用的服务帐户,然后所有使用“应用程序默认凭据”的API调用将自动使用该服务帐户,而无需服务帐户承载令牌(json文件)。在此处查看文档:
https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-nodejs