gpt4 book ai didi

ruby-on-rails - 谷歌应用引擎 : Best practice for hiding Rails secret keys?

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:48 25 4
gpt4 key购买 nike

我正在将我的 Rails 应用程序部署到 GAE,其代码存储在 github 中。

显然,我需要隐藏我的 key 和数据库密码。

在 Heroku 中,我可以使用 Heroku GUI 非常轻松且很好地在环境变量中设置它们,因此它不会出现在任何源代码或数据库中。

GAE 呢?我无法在 app.yaml 中设置它们,因为:

  1. .gitignore 不是一个选项:即使我通过 .gitignore 隐藏 app.yaml 文件或替代 json 文件,我也必须将它保存在我的本地计算机中。意思就是只有我可以部署,我得自己做备份。这太可怕了。
  2. 有人说我可以在数据库中存储 secret 值。但我也想隐藏数据库密码。

有什么想法吗?

最佳答案

存储此信息最安全的方法是使用 project metadata .在 Flexible/ManagedVM 环境中,您可以通过 simple http request 访问元数据.

来自谷歌博客文章:

With Compute Engine, Container Engine, and Managed VMs, there is a magic URL you can CURL to get metadata.

ManagedVMs 是现在所谓的“AppEngine 灵活环境”的旧名称。由于您说您在 App Engine 上使用 Ruby,因此您必须使用 Flexible/ManagedVMs。因此,您应该能够使用这些“魔术 URL”。

因此,要在 Ruby 中获取名为 mysecret 的应用程序 secret ,您可以这样做:

Net::HTTP.get(
URI.parse('http://metadata.google.internal/computeMetadata/v1/project/attributes/mysecret'))

(对于@joshlf)以下是如何在 Python 中访问 AppEngine 标准环境中的项目元数据:

# Note that the code will not work on dev_appserver, 
# you will need to switch to some other mechanism
# for configuration in that environment
# Specifically the project_id will resolve to something
# compute engine API will treat as invalid

from google.appengine.api import app_identity
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

compute = discovery.build(
'compute', 'v1', credentials=GoogleCredentials.get_application_default())

def get_project_metadata(metadata_key):
project_id = app_identity.get_application_id()
project = compute.projects().get(project=project_id).execute()
for entry in project['commonInstanceMetadata']['items']:
if entry['key'] == metadata_key:
return entry['value']
return None

get_project_metadata('my_key')

关于ruby-on-rails - 谷歌应用引擎 : Best practice for hiding Rails secret keys?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40968349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com