Google AppEngine (GAE) 上 Django 应用程序的秘密

Secrets in a Django app on Google AppEngine (GAE)

我正在尝试在 GAE 上开发 Django 应用程序,并为 CI/CD 使用 CloudBuild。我想知道将秘密传递到我的应用程序(数据库凭据等)的最佳方式是什么。

我能够按照 https://cloud.google.com/cloud-build/docs/securing-builds/use-encrypted-secrets-credentials 中的说明在我的构建步骤中读取秘密,并将其作为环境变量传递到我的应用程序。这有点 hacky,但它有效:

  - name: gcr.io/cloud-builders/gcloud
    entrypoint: 'bash'
    args:
    - '-c'
    - |
      TEST_PW=$(gcloud secrets versions access latest --secret=test-key)
      echo "TEST_PASSWORD=$${TEST_PW}" >> env_vars
      unset TEST_PW

但是,我不确定这种做法是否安全。我在我的应用程序中转储了 运行 中的环境变量(使用 print(dict(os.environ)) 并且唯一的敏感值是我传入的秘密(所有其他与 GAE 应用程序相关的值都是非敏感数据)。

所以问题:

1) 在 AppEngine 的应用程序中,将秘密存储在 env 变量中是否安全,即它们是否会被 "somehow" 通过 print(dict(os.environ)) 转储它们窃取?

2) 或者是从 Django 中的 Secret Manager 获取它们的更好选择(例如在 settings.py 中)? (这里担心重启或者版本切换,会不会影响这个选项)

3) 还是有更好的选择?

谢谢。

您正在做的事情的安全问题不是环境变量本身,而是您将秘密的纯解密值存储在其中的事实,使其在您的实例运行时可通过 os.environ 命令访问运行.

一个更简单的解决方案是将该敏感信息转储到一个文件中,并将其存储在只有您的应用引擎的服务帐户有权访问的云存储桶中,如下所示:

TEST_PW=$(gcloud secrets versions access latest --secret=test-key)
echo "TEST_PASSWORD=$${TEST_PW}" >> [YOUR_FILE_URL]
unset TEST_PW

如果您想继续使用环境变量,可以使用 Cloud KMS 来加密数据,您可以找到如何 here,这是您共享的同一文档的不同部分关于你的问题。