为了账号安全,请及时绑定邮箱和手机立即绑定

安全地设置 GOOGLE_APPLICATION_CREDENTIALS

安全地设置 GOOGLE_APPLICATION_CREDENTIALS

PHP
达令说 2021-10-22 14:43:37
我正在尝试以安全的方式使用 Google 云服务。我目前正在通过 putenv('GOOGLE_APPLICATION_CREDENTIALS= path to JSON file ');提供我的凭据;请参阅 https://cloud.google.com/docs/authentication/production我想通过将我的代码放在共享主机/虚拟 Linux 服务器上来公开测试。但是,如果我将 JSON 文件的权限设置为安全,则无法访问它们。如果我公开,我需要包含的 JSON 文件有一个纯文本的私钥。我已经进行了一个小时的搜索,但找不到我应该如何安全地提供凭据。我应该将文件放在我的服务器上的安全位置吗?生产网站是否有替代方法来将公共 URL 传递给 putenv?
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

你的问题没有简单的答案。

第 1 部分 - 您的主机不在 Google Cloud 上

你的主机安全吗?如果是,则可以将服务帐户 JSON 密钥放在无法从面向公众的应用程序访问的目录中。这里我的意思是不要将文件放在与您的网络服务器相同的目录中。使用一个位置/config,然后加强该目录的安全性,以便只有授权用户和您的应用程序才能读取该文件。

确定凭据文件的安全文件位置后,请直接在代码中指定该服务帐户。不要使用环境变量或命令行开关。不要使用GOOGLE_APPLICATION_CREDENTIALS. 有些评论是使用KMS。使用 KMS 是一个好主意,但您面临着先有鸡还是先有蛋的情况。您需要凭据才能使用 KMS 解密。如果不法分子可以访问您的加密凭据,他们还可以访问您的源代码,或对应用程序进行逆向工程,以查看解密方法和用于解密的服务帐户。

注意:为凭证文件指定静态位置不是 DevOps 的最佳实践。您的问题是关于安全性而不是 CI/CD。您正在使用共享服务器,这可能意味着很多事情,并且 DevOps 可能没有集成到您的部署或系统设计中。

如果您的主机不安全,那么您就没有可行的选择。您无能为力,无法阻止“熟练”工程师逆转您的“遮蔽”方法。

第 2 部分 - 您的主机在 Google Cloud 上(Compute Engine、Cloud Run、App Engine 等)

注意:以下技术处于测试阶段。这是谷歌云授权的未来,它是身份基础访问控制,以补充基于角色的访问控制,并在某些情况下取代它。

您可以为主机分配一个具有零权限的服务帐户。注意“分配”而不是“创建”这个词。不涉及任何文件。然后您可以使用基于身份的访问控制(服务账户的 IAM 成员账户 ID)来访问资源。


查看完整回答
反对 回复 2021-10-22
?
喵喔喔

TA贡献1735条经验 获得超5个赞

一种解决方案是将您的凭证 JSON(base64 编码)的内容放入服务器配置界面上的 ENV 变量中,然后我们从 ENV 变量启动服务器清单文件。

例如:echo $CREDENTIALS | base64 -d > /path/to/cred.json,那么 export GOOGLE_APPLICATION_CREDENTIALS="*file_json_path"


查看完整回答
反对 回复 2021-10-22
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

您可以从终端使用“gcloud auth application-default login”来使用最终用户凭据进行身份验证。

通过身份验证后,您可以使用任何 GCP 资源的默认服务对象。


查看完整回答
反对 回复 2021-10-22
  • 3 回答
  • 0 关注
  • 732 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信