Google Cloud Platform Postman 仅通过主 Google 帐户而非服务帐户调用功能

Google Cloud Platform Postman Only Calls Function Through Main Google Account And Not Service Account

我在 GCP 中创建了一个服务帐户,旨在 运行 云功能。这是服务帐户,包含我下载的 json 个密钥。

然后我做了这个云函数。它是默认的 python 3.9 函数,它简单地打印出您发送的 message 或者如果没有 message,它只打印“Hello World!”

我设置了一个 HTTP 触发器,要求使用我刚刚创建的服务帐户 second_try 作为云功能的 运行 时间服务帐户进行身份验证。请参阅下面的云功能权限:

当我 运行 Test function 时,即使我从未引用过我的服务帐户凭据,它仍然有效。

我在postman中测试了curl命令:

curl -m 70 -X POST https://us-central1-<MY PROJECT NAME>.cloudfunctions.net/func_two_hg \
-H "Authorization:bearer $(gcloud auth print-identity-token)" \
-H "Content-Type:application/json" \
-d '{}'

即使我没有引用令人困惑的服务帐户凭据,它也能正常工作...

更令人困惑的是,当我尝试引用服务帐户凭据并因此通过服务帐户 运行 函数时,它给出了 401 错误,引用 Your client does not have permission to the requested URL。这是包含服务帐户凭据的 curl 命令:

curl -m 70 -X POST https://us-central1-<MY PROJECT NAME>.cloudfunctions.net/func_two_hg \
-H "Authorization:bearer $(GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json gcloud auth application-default print-access-token)" \
-H "Content-Type:application/json" \
-d '{}'

这是错误:

有什么问题,为什么 运行 无法使用服务帐户凭据?我如何通过服务帐户使此功能仅 运行 可用?

如果您已正确配置所有内容,您应该:

  1. gcloud auth activate-service-account 启用服务帐户。
  2. 然后您可以 gcloud auth print-identity-token --account=${ACCOUNT} 其中 ACCOUNT 是服务帐户电子邮件以获取身份令牌,该身份令牌应该对您进行 Cloud Function 的身份验证。