Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 云功能部署中没有GOOGLE_应用程序_凭据_Google Cloud Platform_Google Cloud Functions_Google Cloud Iam - Fatal编程技术网

Google cloud platform 云功能部署中没有GOOGLE_应用程序_凭据

Google cloud platform 云功能部署中没有GOOGLE_应用程序_凭据,google-cloud-platform,google-cloud-functions,google-cloud-iam,Google Cloud Platform,Google Cloud Functions,Google Cloud Iam,我有一个与云存储和BigQuery交互的云函数,它们都属于同一个项目。从命令行部署云功能时,我通常采用的方法是: $ gcloud functions deploy my_function ... --set-env-vars GOOGLE_APPLICATION_CREDENTIALS=my_project_credentials.json 其中my_project_credentials.json是一个json密钥文件,其中包含允许访问云存储和BigQuery的服务帐户和密钥 由于这是我一

我有一个与云存储和BigQuery交互的云函数,它们都属于同一个项目。从命令行部署云功能时,我通常采用的方法是:

$ gcloud functions deploy my_function ... --set-env-vars GOOGLE_APPLICATION_CREDENTIALS=my_project_credentials.json
其中
my_project_credentials.json
是一个json密钥文件,其中包含允许访问云存储和BigQuery的服务帐户和密钥

由于这是我一直以来的做法,我需要的是另一种方式,以避免这个json凭据文件(因为这些交互服务无论如何都属于同一个Google云项目)。有这样的方法吗?我对谷歌云有点陌生,所以我不熟悉IAM的内部和外部


(我需要这一点的另一个原因是,我有一个客户不喜欢我作为开发人员访问该json密钥,而且他/她不希望该json密钥与功能代码一起部署。请提供一些关于如何在IAM中实现这一点的详细信息,特别是对于BigQuery和云存储,因为我无法控制IAM同样)。

Kolban说的。部署云功能时,您可以定义要使用的服务帐户,然后使用应用程序默认凭据的任何API调用都将自动使用该服务帐户,而不需要服务帐户承载令牌(json文件)。请查看以下文档:


如果可以,至少当应用程序在GCP上运行时,不能使用服务帐户密钥文件。2个原因

  • 这是一个用于身份验证的简单文件:您可以轻松地复制它,通过电子邮件发送它,甚至在您的代码存储库中提交它,可能是公共的
  • 这是一个秘密,你必须安全地存储它,并经常轮换它(谷歌建议至少每90天一次)。这很难管理,你想用一个新闻安全文件每隔90天重新部署你的功能
因此,我的同伴Gabe和Kolban有权使用函数标识:

  • 您可以在部署该功能时指定服务帐户电子邮件
  • 或者将使用默认的服务帐户(这是一个compute engine,默认为编辑器角色。不太安全,首选第一个解决方案)
在代码中,使用
getDefaultCredential
(根据语言,名称略有变化,但含义相同)。如果查看源代码,您将看到该函数执行此操作

  • 查看GOOGLE应用程序凭据环境变量是否存在。如果存在,请使用它
  • 查看是否存在“已知文件”。根据操作系统,当您执行
    gcloud auth应用程序默认登录时,凭据将存储在本地的不同位置。库将查找它们
  • 这个链接引用了计算引擎,但其他环境遵循相同的原则

没有“魔法”东西。元数据服务器知道函数的标识,可以按需生成访问和标识令牌。如果您的代码在GCP->上运行,库将实现对它的调用,这就是为什么,您永远不需要服务帐户密钥文件,元数据服务器是为您提供此信息的!

这可能是您需要的…我的想法是创建一个具有执行功能任务所需角色的新服务帐户,然后定义该功能作为新服务帐户运行的标识。