如何在Google App Engine

时间:2017-03-18 14:42:54

标签: java spring google-app-engine google-cloud-platform

问题是如何设置应用程序机密以使其在application.yml 中可用?

在heroku上我只是通过为dyno设置环境变量来做到这一点,并将其作为:

进行访问
server:
  port: ${PORT}
security:
  user:
    password: ${USERPASSWORD}

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  instance:
    hostname: localhost
    securePortEnabled: true
  password: ${EUREKAPASSWORD}

如何在Google App Engine中实现这一目标?我正在尝试使用datastoreenter image description here

我不知道如何将这些值注入我的* .yml文件中。

编辑:

要添加的一件更重要的事情。我使用maven appengine插件通过CI管道部署我的应用程序,因此我无法将app.yaml文件推送到App Engine

3 个答案:

答案 0 :(得分:1)

如果您想在运行时存储应用程序可用的机密,将它们保存在数据存储区中并不是一个坏主意。我知道许多应用程序都是这样做的。

这是一个app used by the Khan Academy,这是在数据存储区中存储秘密凭据的一个很好的例子。它是在Python中,但你可以得到一般的想法。请注意,在first admin login上,它会提示存储密码。

答案 1 :(得分:1)

Google还提供了有关如何存储加密机密的教程。 https://cloud.google.com/kms/docs/store-secrets

TLDR:用于存储加密机密的单独存储桶,实例在需要时下载,使用Google KMS解密(https://cloud.google.com/kms/)并在之后删除。

答案 2 :(得分:0)

最好且安全的方法是使用GCP KMS或某些第三方机密管理器产品,例如vault

GCP KMS

  1. 我们需要使用具有加密和解密权限(角色)的服务帐户来加密凭据(秘密)文件。
  2. 将加密的凭证文件上传到GCS
  3. 在运行时使用应用程序代码从GCS中获取加密的凭据,然后解密并解析(例如,解析为纯java对象)。

数据存储

是的。我们可以将凭据/秘密环境变量存储到数据存储中,并在运行时在应用程序代码中获取它们。

优点:

  1. 简单
  2. 它几乎可以在任何地方使用,GAE标准环境,GAE灵活环境,GCE,GCF,GKE,Cloud Run。

缺点:

  1. 安全性不如KMS。

GCE元数据

我曾经使用GCE元数据服务器存储我的秘密环境变量。

优点:

  1. 它支持GAE,GCE,GKE。

  2. 非常简单。我们只需要向http://metadata.google.internal/computeMetadata/v1/端点发送HTTP请求即可获取我们的自定义元数据(秘密环境变量)。

缺点:

  1. 去年,GCE元数据不支持Cloud Function。 (运行时:nodejs10)。我无法从云函数中的GCE元数据获取自定义机密环境变量。但是可以获取内置的元数据,例如projectId

  2. 安全性不如KMS。

配置映射和秘密(仅适用于GKE)

可以使用简单的base64加密。使用难度中等。安全性不如KMS。

另一种黑客方式

我还在这里为此问题创建了一个帖子:How to pass system environment variables to app.yaml?

是的,Linux脚本方法可以完成所有操作。但是我不喜欢这些黑客方式。