0

我尝试在我正在创建的 Winforms C# 应用程序中使用 GCPs Secret Manager,但我首先需要 credentials.json 来访问 Secret Manager。这适用于开发,但不适用于生产。也许我根本不应该使用秘密经理。

目前我有一个本地 C# winforms 应用程序,在本地使用该应用程序的用户(不是管理员的客户)可以从 Windows 文件系统中选择文件并将这些文件上传到 Google Cloud Storage 存储桶。我根本没有服务器,但如果我应该的话,我不确定它里面应该有什么样的逻辑。

从评论中我认为服务器应该是用户登录的中间人,用户获取令牌,然后用户可以使用令牌通过服务器将文件上传到 gcloud 存储桶。这样一来,我从来没有真正给用户一个 credentials.json 文件。

对于这个架构,我认为我应该使用服务帐户,因为服务器将代表经过身份验证的用户进行 gcloud 存储桶上传调用,但是我从 John Hanley 那里看到,假设用户凭据是在不安全的环境中启动的,我d 希望在审核日志中获得“用户做了什么”的信息。

在我的开发版本中,我将credentials.json 存储在我的项目目录之外,并使用环境变量指向它。这可行,但这个答案建议我使用 Google KMS 对其进行加密并在应用程序中解密。

在评论中,我看到这并不安全,因为服务帐户凭据可能会暴露。

根据这个答案dll 可以反编译为等效的 C# 代码,因此任何人都可以看到我用来解密密钥的内容。

  1. 所以现在我想知道我应该在生产中使用什么架构以及如何确保它的安全?
  2. 我正在考虑制作一个 GAE 实例,将用户信息存储在数据库中,为经过身份验证的用户提供令牌,并在调用上传到 gcloud 存储桶时使用此令牌。这对于生产应用程序是否足够?
4

1 回答 1

0

因此,我认为我主要应该通过使用应用程序默认凭据来将 Secret Manager 与服务帐户和 GCP 引擎之一(GAE 或 GCE)一起使用(如果我错了,请纠正我)。

不,您应该使用具有运行工作负载时所需权限的自定义服务帐户。您不应将服务帐户凭据存储在 Secret Manager 中。

于 2021-01-22T15:09:05.837 回答