【问题标题】:Challenge in Implementing Service Account Key Rotation实施服务帐户密钥轮换的挑战
【发布时间】:2020-11-27 17:49:25
【问题描述】:

任何人都对如何为云功能、AppEngine、GKE 中使用的服务帐户凭据实施自动密钥轮换提出了建议。 GCP 已将此添加为云原生服务的推荐安全策略之一。我们可以找到 API/客户端库来为现有服务帐户生成新的私钥。但是我们并不真正了解如何在运行时更新部署在 AppEngine 中的应用程序上的新生成的密钥,云函数。

【问题讨论】:

  • 如果您使用的是 Google 托管服务帐户(Google 为这些服务创建的默认帐户),那么密钥轮换会为您管理。如果您要创建服务帐户,然后将它们分配给服务,则您可以管理轮换。
  • 只是为了确保理解。您已使用服务帐号密钥文件部署了 Cloud Function App Engine 和 GKE 工作负载?
  • @guillaume blaquiere - 是的,我已经使用服务帐户密钥文件部署了我的 CF、App Engine、GKE 工作负载。我的应用程序是使用 nodejs 构建的。 Nodejs 谷歌云客户端库,如云存储、firebase,它都接受服务帐户密钥文件名路径作为参数进行初始化。我找不到正确的方法来更新托管在云上的应用程序已经在使用的服务帐户文件
  • 我不建议使用服务帐户 JSON 密钥文件作为凭据。使用分配给每个服务的默认服务帐户。为您处理安全和密钥轮换。

标签: node.js google-app-engine google-cloud-platform google-cloud-firestore google-cloud-functions


【解决方案1】:

当您使用 Google Cloud 组件时,您不必使用服务帐号密钥文件。这是一种不好的做法(即使在太多教程中,甚至是 Google Cloud 教程中都以“标准”的形式出现!)。

服务帐户密钥文件是管理的噩梦。这是一个文件。你可以复制它,你可以通过电子邮件发送它,你甚至可以将它提交到源存储库(也许是公共存储库!!)。此外,您需要妥善保管并定期轮换...

简化这一点的最佳方法是不使用它们并依赖 Google Cloud 组件标识。 当然,对于所有外部组件,如 CI/CD、本地应用程序(或其他云提供商),服务帐户密钥文件是在 Google Cloud 上进行身份验证的最佳方式

在每种情况下,您都可以在代码中恢复 default credential。 (here an example 一个简单的凭证,没有客户端库,只有 Google OAuth2 库)

注意:对于某些操作,App Engine 默认服务帐户不可用(根据元数据服务器生成身份令牌或更改 access_token 的范围)。为此,我建议您 impersonate service accounts 而不是使用服务帐户密钥文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多