安全地设置 GOOGLE_APPLICATION_CREDENTIALS
Set GOOGLE_APPLICATION_CREDENTIALS securely
我正在尝试以安全的方式使用 Google 云服务。我目前通过 putenv('GOOGLE_APPLICATION_CREDENTIALS=path to JSON file'); 提供我的凭证参见 https://cloud.google.com/docs/authentication/production
我想通过将我的代码放在共享主机/虚拟 Linux 服务器上来测试 publicly。但是,如果我将 JSON 文件的权限设置为安全,则无法访问它们。如果我创建 public,我需要包含的 JSON 文件有一个纯文本格式的私钥。
我搜索了一个小时,但找不到我应该如何安全地提供凭据。
- 我是否应该将文件放在我服务器上的安全位置?
- 生产网站是否有替代方法将 public URL 传递给 putenv?
您可以编辑 .bashrc 文件:export GOOGLE_APPLICATION_CREDENTIALS="*file_json_path"
然后使用:source .bashrc
-- linux 薄荷 19
一种解决方案是将您的凭据内容JSON(base64 编码)放入服务器配置界面上的 ENV 变量中,然后我们从 ENV 变量启动服务器清单文件。
例如:echo $CREDENTIALS | base64 -d > /path/to/cred.json
,
然后
export GOOGLE_APPLICATION_CREDENTIALS="*file_json_path"
您可以从您的终端使用 "gcloud auth application-default login" 来使用 end-user 凭据进行身份验证。
通过身份验证后,您可以使用任何 GCP 资源的默认服务对象。
您的问题没有简单的答案。
第 1 部分 - 您的主机不在 Google 云端
您的主机安全吗?如果是,那么可以将服务帐户 JSON 密钥放在您的 [=53] 无法访问的目录中=] 应用程序。这里我的意思是不要将文件放在与您的网络服务器相同的目录中。使用诸如 /config
之类的位置,然后加强该目录的安全性,以便只有授权用户和您的应用程序才能读取该文件。
一旦您确定了凭据文件的安全文件位置,请直接在您的代码中指定该服务帐户。不要使用环境变量或 command-line 开关。不要使用 GOOGLE_APPLICATION_CREDENTIALS
。一些评论是使用KMS。使用 KMS 是个好主意,但您遇到了 chicken-or-the-egg 的情况。您需要凭据才能使用 KMS 解密。如果 bad-actor 可以访问您的加密凭据,他们也可以访问您的源代码或 reverse-engineer 应用程序,以查看解密方法和用于解密的服务帐户。
注意:为凭据文件指定静态位置不是 best-practice DevOps。您的问题是关于安全性的,而不是 CI/CD。您正在使用共享服务器,这可能意味着很多事情,并且 DevOps 可能没有集成到您的部署或系统设计中。
如果您的主机不安全,那么您没有可行的选择。您可以做的任何事情都无法阻止 "skilled" 工程师推翻您 "obscuration".
的方法
第 2 部分 - 您的主机位于 Google 云端(Compute Engine、Cloud 运行、App Engine 等)
注意:以下技术处于测试阶段。这是 Google 云授权的未来,它是基于身份的访问控制,以补充基于角色的访问控制,并在某些情况下取代它。
您可以为主持人分配一个零权限的服务帐户。请注意单词 "assign" 而不是 "create"。不涉及任何文件。然后就可以使用Identity Based access control(服务账号的IAM成员账号ID)来访问资源了。我为 Google Cloud 运行 写了两篇关于此的文章,适用于其他 Google 服务(Compute Engine、Cloud Functions、KMS、Cloud Storage、Cloud Scheduler 等):
我正在尝试以安全的方式使用 Google 云服务。我目前通过 putenv('GOOGLE_APPLICATION_CREDENTIALS=path to JSON file'); 提供我的凭证参见 https://cloud.google.com/docs/authentication/production
我想通过将我的代码放在共享主机/虚拟 Linux 服务器上来测试 publicly。但是,如果我将 JSON 文件的权限设置为安全,则无法访问它们。如果我创建 public,我需要包含的 JSON 文件有一个纯文本格式的私钥。
我搜索了一个小时,但找不到我应该如何安全地提供凭据。
- 我是否应该将文件放在我服务器上的安全位置?
- 生产网站是否有替代方法将 public URL 传递给 putenv?
您可以编辑 .bashrc 文件:export GOOGLE_APPLICATION_CREDENTIALS="*file_json_path" 然后使用:source .bashrc
-- linux 薄荷 19
一种解决方案是将您的凭据内容JSON(base64 编码)放入服务器配置界面上的 ENV 变量中,然后我们从 ENV 变量启动服务器清单文件。
例如:echo $CREDENTIALS | base64 -d > /path/to/cred.json
,
然后
export GOOGLE_APPLICATION_CREDENTIALS="*file_json_path"
您可以从您的终端使用 "gcloud auth application-default login" 来使用 end-user 凭据进行身份验证。
通过身份验证后,您可以使用任何 GCP 资源的默认服务对象。
您的问题没有简单的答案。
第 1 部分 - 您的主机不在 Google 云端
您的主机安全吗?如果是,那么可以将服务帐户 JSON 密钥放在您的 [=53] 无法访问的目录中=] 应用程序。这里我的意思是不要将文件放在与您的网络服务器相同的目录中。使用诸如 /config
之类的位置,然后加强该目录的安全性,以便只有授权用户和您的应用程序才能读取该文件。
一旦您确定了凭据文件的安全文件位置,请直接在您的代码中指定该服务帐户。不要使用环境变量或 command-line 开关。不要使用 GOOGLE_APPLICATION_CREDENTIALS
。一些评论是使用KMS。使用 KMS 是个好主意,但您遇到了 chicken-or-the-egg 的情况。您需要凭据才能使用 KMS 解密。如果 bad-actor 可以访问您的加密凭据,他们也可以访问您的源代码或 reverse-engineer 应用程序,以查看解密方法和用于解密的服务帐户。
注意:为凭据文件指定静态位置不是 best-practice DevOps。您的问题是关于安全性的,而不是 CI/CD。您正在使用共享服务器,这可能意味着很多事情,并且 DevOps 可能没有集成到您的部署或系统设计中。
如果您的主机不安全,那么您没有可行的选择。您可以做的任何事情都无法阻止 "skilled" 工程师推翻您 "obscuration".
的方法第 2 部分 - 您的主机位于 Google 云端(Compute Engine、Cloud 运行、App Engine 等)
注意:以下技术处于测试阶段。这是 Google 云授权的未来,它是基于身份的访问控制,以补充基于角色的访问控制,并在某些情况下取代它。
您可以为主持人分配一个零权限的服务帐户。请注意单词 "assign" 而不是 "create"。不涉及任何文件。然后就可以使用Identity Based access control(服务账号的IAM成员账号ID)来访问资源了。我为 Google Cloud 运行 写了两篇关于此的文章,适用于其他 Google 服务(Compute Engine、Cloud Functions、KMS、Cloud Storage、Cloud Scheduler 等):