我用 python 开发了一个 Google Cloud Function (GCF)
,我想从部署在 AWS 上的 Web 服务(用 python 编写)访问它。在 GCF
的开发阶段,它的 Cloud Function Invoker
权限设置为 allUsers
。我认为这就是为什么它在调用时没有要求提供授权 token 。
我想撤销此公共(public)访问权限,以便我只能从 Web 服务代码中调用此函数,并且无法公开访问它。
可能的方法:在我的研究中,我发现这可以通过以下步骤来完成:
- 删除所有拥有 GCF 权限的不必要成员。
- 创建一个新的服务帐户,该帐户的访问权限仅限于使用 GCF。
- 下载服务账户 key (json) 并在 AWS Web 应用程序中使用它
- 将环境变量
GOOGLE_APPLICATION_CREDENTIALS
设置为该服务帐户 key (json) 文件的路径。
问题
如何使用服务帐户生成访问 token ,然后将其作为
授权承载
附加到对GCF
进行的HTTP调用中?如果没有此 token ,GCF
将抛出错误。docs说不要将服务帐户 key 放在源代码中。那么最好的方法是什么。他们建议使用 KMS,这似乎有点大材小用。
Do not embed secrets related to authentication in source code, such as API keys, OAuth tokens, and service account credentials. You can use an environment variable pointing to credentials outside of the application's source code, such as Cloud Key Management Service.
- 服务帐户需要的最低权限是什么?
如果您认为我的理解有误,请随时纠正我,并且有更好更好的方法来做到这一点。
更新:AWS 上的 Web 服务将以服务器到服务器的方式调用 GCF
。无需传播客户端(最终用户)凭据。
最佳答案
在您的描述中,您没有提及谁/什么将调用您的 GCF。用户?计算?另一个GCF?然而,这个page可以帮助您找到代码示例
是的,纯文本形式的 secret 并推送到 GIT 上还不是 secret !再次,我不知道是什么在执行调用。如果它是计算、函数、云运行或 GCP 的任何服务,请勿使用 JSON 文件 key ,而应使用组件标识。我想说的是,创建一个服务帐户并将其设置为该组件。如果您需要更多帮助,请告诉我更多关于您在哪里部署的信息!
相关2:如果你有一个服务帐户,最小角色是什么:cloudfunctions.Invoker。这是调用函数的最小角色
gcloud beta functions add-iam-policy-binding RECEIVING_FUNCTION \
--member='serviceAccount:CALLING_FUNCTION_IDENTITY' \
--role='roles/cloudfunctions.invoker'
关于python - 从服务器端保护 Google Cloud Functions 调用,身份验证策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57596041/