如何安全地将我的 Google 云应用程序凭据提供给其他人?

How can I safely give my Google Cloud application credentials to another person?

我正在 IntelliJ 中使用 Java 开发一个小项目,该项目使用 Google Cloud Translation API。为了管理依赖项,我使用 maven。我的目标是创建一个可执行的 jar。

在我目前的情况下,我已经下载了存储私钥的.json文件并设置了指向.json文件位置的环境变量GOOGLE_APPLICATION_CREDENTIALS在我的 IDE 中通过“运行 配置”或在启动可执行 jar 之前在命令行中提示。

但问题来了:它在我自己的电脑上运行良好,但我怎么能让其他人(比如我的主管)在他们的电脑上使用我的应用程序呢?我当然不想将我的凭据上传到 github 存储库,所以我的想法是将 .json 文件发送给他并让他知道他必须自己设置环境变量。

如有任何帮助,我将不胜感激:)

编辑:我尝试说明我的问题 - Google 的预期方式是什么,以便其他人可以 运行 我的应用程序?我应该共享我的服务帐户的凭据,还是可以以某种方式将它们安全地包含在 jar 中?因为不设置环境变量,jar不会启动

Json 文件通常与服务帐户关联,而不是用户(即真实的人),所以我假设您不是在谈论您的私钥,而是服务帐户的私钥。

最简单的选择确实是将带有密钥的 json 文件提供给其他人,并指示他们设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量。

请注意,这将使拥有该 json 文件的任何人都可以访问该服务帐户有权访问的任何内容。 我强烈建议将这些权限限制在最低限度(可能只是翻译 API,仅此而已)。

根据Authentication Best Practices, if you are "developing locally to test or learn", users could login using the gcloud tool with the application-default登录。为方便起见,您可以将这些命令放在 bash 脚本或 readme.md 中:

gcloud auth revoke
gcloud auth application-default revoke
gcloud auth application-default login /
   --billing-project=<BILLING_PROJECT> /
   --scopes=openid,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/cloud-translation.readonly

备注

  • 如果您使用的是 运行ning 翻译 API v3,则需要在命令中提供其范围,但如果您使用的是 运行ning v2,则可能不需要他们根本没有。
  • 为了安全起见,您可以在 git 中的命令中省略计费项目名称,让用户自己输入。
  • 必须先注销当前用户,以确保使用正确的凭据。
  • 您可能还需要向用户授予适当的 Cloud Translation IAM role

当你运行它时会发生什么?

  • 运行 此 CLI 命令将打开浏览器 window 并请求用户登录到 Google Cloud。
  • 可能还会出现安装 Cloud Resource Manager 的提示。这用于管理 GCP 资源(项目、角色、服务等)的层次结构,并且完全免费。
  • 用户登录后,将在本地 Google Cloud SDK 配置文件夹中创建一个名为 application_default_credentials.json 的文件。

服务私钥呢?

如果使用此gcloud 登录方法,则不需要服务的私钥或GOOGLE_APPLICATION_CREDENTIALS 环境变量。但是,如果存在该变量,则将使用它指向的凭据文件。此逻辑是大多数现代 Google 云客户端使用的 Application Default Credentials 工作流程的一部分。

Tl;DR

切勿共享您的凭据:用户帐户凭据密钥和服务帐户凭据密钥均不共享。

备选方案

由于您没有分享太多关于您的应用程序类型及其部署计划的上下文,我会选择一般的替代方法来共享您的用户(和服务)敏感信息。

  1. 指示最终用户使用应用程序默认凭据 (ADC) 作为您正在制作解决方案原型的本地/测试环境的推荐方式。用户应该设置一个启用了计费的 GCP 项目,他们将只需使用以下命令进行身份验证,然后他们就可以 运行 您的应用程序而无需在本地进行任何进一步修改:

    gcloud auth application-default login

  2. 将您的应用程序部署到 Google 云计算系列服务之一。我会推荐 Cloud 运行,因为如果您能够构建一个容器(这可能是正确的 Java申请)。将应用程序部署到安全环境并正确配置其服务帐户后,您就可以与其他用户共享面向应用程序的界面。 同时请注意,如果您只是想让其他人像最终用户一样访问您的应用程序,那么这种方法是可以接受的。