谷歌AppEngine(GAE)上的Django应用中的秘密。

问题描述 投票:0回答:1

我想在GAE上开发一个Django应用,并使用CloudBuild进行CICD。我想知道有什么最好的方法可以将秘密传递给我的应用程序(DB凭证等)。

我能够按照说明在 https:/cloud.google.comcloud-builddocssecuring-buildsus-encrypted-secret-credentials。 来读取我的构建步骤中的秘密,并将其作为环境变量传递到我的应用程序中。虽然有点黑,但很有效。

  - 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

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

那么问题来了

1) 在AppEngine中的应用程序中,将秘密存储在env变量中是否安全,也就是说,通过 "莫名其妙 "的倾倒,它们会被窃取吗?print(dict(os.environ))?

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

3)还是有更好的选择?

谢谢。

django google-app-engine google-app-engine-python google-cloud-build secret-key
1个回答
1
投票

您所做的事情的安全问题不在于环境变量本身,而在于您将秘密的普通解密值存储在环境变量中,从而使其可被用户访问。os.environ 命令,而您的实例正在运行。

更简单的解决方案是将这些敏感信息转储到一个文件中,并将其存储在一个只有你的应用引擎的服务账户才有权限的云存储Bucket上,比如这样。

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

如果你想继续使用环境变量,你可以通过使用Cloud KMS来保持数据加密,你可以找到一个如何 此处,这是你在问题上分享的同一文档的不同部分。

© www.soinside.com 2019 - 2024. All rights reserved.