【问题标题】:Authentication for multiple projects in GCP using service accounts使用服务帐户对 GCP 中的多个项目进行身份验证
【发布时间】:2022-01-18 16:03:14
【问题描述】:

我有 2 个 GCP 项目,我正在尝试使用 C# 对其执行身份验证。因为项目属于不同的客户,所以我可以访问服务帐户 json 文件。

有没有办法在使用服务帐户 json 文件进行身份验证的两个项目中调用 Compute engine API

来自 Google Cloud 客户端库的示例代码使用

var credential = GoogleCredential.GetApplicationDefault();

GOOGLE_APPLICATION_CREDENTIALS 环境变量加载服务帐户密钥文件的路径。这个 var 是单数的。为了使它工作,我需要加载两个服务帐户 JSON 密钥文件,而不仅仅是一个。

我拒绝混合 json 文件,因为它会带来更大的安全漏洞。

【问题讨论】:

  • 您的问题不清楚。有 2 个 GCP 项目,而您每个 项目都有一个服务帐户(即 2 个服务帐户)?您的代码将需要使用相应的服务帐户(密钥)来访问相应的项目。你不能组合键。您可以(!)拥有一个服务帐户(和密钥)来提供对多个项目的访问权限,但出于安全原因,这似乎是不允许的(这可能很好)。
  • 请参阅“How to Ask”以及链接页面和“MCVE”。我们感谢您可能是新人,但我们确实希望您为此付出努力的证据。你在哪里搜索的?为什么没有帮助?如果是这样,您编写的用于测试所学内容的代码在哪里?如果你不写代码,为什么不呢?如果你这样做了,说明你遇到的问题的最少代码是什么,以及问题的解释,以及最少的输入数据和预期的结果?没有它就很难为您提供帮助。
  • @DazWilkin 出于安全原因,这是不允许的 安全与它无关,客户端库将无法加载它。该文件格式错误,无法解析。
  • @theTinMan 我已经编辑了问题并添加了一行相关的代码。尽管 IMO 他们添加的内容足以理解这个问题。 GOOGLE_APPLICATION_CREDENTIALS 就足够了。
  • @DalmTo 大概(!)“出于安全原因”,该组织要求使用不同的服务帐户来代表不同的客户项目。技术要求和组织要求之间存在差异。

标签: c# google-cloud-platform google-compute-engine google-api-dotnet-client service-accounts


【解决方案1】:

为了帮助那些不理解您的问题的人(来自 cmets)这里是您问题的明确定义。

您有两个要连接的帐户。每个帐户都带有自己的 Json 服务帐户密钥文件。要连接到其中的每一个,您需要为每个使用适当的 json 密钥文件授权的计算引擎服务对象。

google Cloud client library for .net 使用以下行来加载密钥文件。这条线接缝在所有样本中,它们没有显示任何其他加载密钥文件的选项。

var credential = GoogleCredential.GetApplicationDefault();

此方法从机器上设置的 GOOGLE_APPLICATION_CREDENTIALS 环境变量中读取。这只是密钥文件的路径。因此,如果您需要两个,则不能使用 env var,您需要使用自己的 env var 或仅使用常量手动加载它们。

您的想法将两个帐户的 json 数据放在同一个密钥文件中是行不通的,因为客户端库将无法解析它。

解决方案是使用FromFile 而不是使用GetApplicationDefault,这将允许您提供每个密钥文件的路径。

// Explicitly use service account credentials by specifying 
// the private key file.
var credentialAccountOne = GoogleCredential.FromFile(jsonPathAccountOne);
var credentialAccountTwo = GoogleCredential.FromFile(jsonPathAccountTwo);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2017-03-20
    相关资源
    最近更新 更多