python - 从服务器端保护 Google Cloud Functions 调用,身份验证策略?

标签 python amazon-ec2 google-cloud-platform google-cloud-functions service-accounts

我用 python 开发了一个 Google Cloud Function (GCF),我想从部署在 AWS 上的 Web 服务(用 python 编写)访问它。在 GCF 的开发阶段,它的 Cloud Function Invoker 权限设置为 allUsers。我认为这就是为什么它在调用时没有要求提供授权 token 。

我想撤销此公共(public)访问权限,以便我只能从 Web 服务代码中调用此函数,并且无法公开访问它。

可能的方法:在我的研究中,我发现这可以通过以下步骤来完成:

  1. 删除所有拥有 GCF 权限的不必要成员。
  2. 创建一个新的服务帐户,该帐户的访问权限仅限于使用 GCF。
  3. 下载服务账户 key (json) 并在 AWS Web 应用程序中使用它
  4. 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为该服务帐户 key (json) 文件的路径。

问题

  1. 如何使用服务帐户生成访问 token ,然后将其作为授权承载附加到对GCF进行的HTTP调用中?如果没有此 token ,GCF 将抛出错误。

  2. 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。无需传播客户端(最终用户)凭据。

    最佳答案

    1. 在您的描述中,您没有提及谁/什么将调用您的 GCF。用户?计算?另一个GCF?然而,这个page可以帮助您找到代码示例

    2. 是的,纯文本形式的 secret 并推送到 GIT 上还不是 secret !再次,我不知道是什么在执行调用。如果它是计算、函数、云运行或 GCP 的任何服务,请勿使用 JSON 文件 key ,而应使用组件标识。我想说的是,创建一个服务帐户并将其设置为该组件。如果您需要更多帮助,请告诉我更多关于您在哪里部署的信息!

    3. 相关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/

    相关文章:

    amazon-web-services - 自动化 Opsworks : How do you execute recipes?

    google-cloud-platform - Bitbucket 使用 terraform 进行源 repo 镜像

    Python - 函数实现的求和

    python3如何将unicode代码点转换为unicode char

    php - 云架构堆栈意见 - EC2 与 Azure

    python - 数据流: Look up a previous event in an event stream

    google-cloud-platform - 403 : Permission iam. serviceAccounts.create需要在项目项目/xyz上执行此操作

    Python 安装工具 : package directory does not exist

    python - 如何估计密度函数并计算其峰值?

    hadoop - HDFS未格式化,但没有错误