使用 .NET 的 GCP SDK 身份验证

GCP SDK Authentication using .NET

我在 Python 中使用仅列出我的计算实例的 googleapiclient 库编写了一个简单的代码。我没有设置任何身份验证代码,而是第一次 运行 它要求我 approve/consent/grant 访问并且它使用了我已经初始化和存储的 SDK 凭据,我在 gcloud CLI 中使用的凭据。

我正在尝试实现相同的目标,但在 .NET 应用程序中,使用来自 nuget 的 Google.Cloud.Compute.V1 库,但我无法使用我的 SDK 凭据,这是怎么做到的?

我不想为我的应用程序创建 API 密钥,因为它不会被分发,它只是一个 internal/test 项目。我需要我的 .net 代码来使用存储在我的计算机 SDK

上的身份验证

请原谅我的解释,我才刚刚开始......

您使用 Google Python SDK 在代码中观察到的行为是由 Application Default Credentials (ADC) 实现的。

还有另一种机制可以发现凭据(ADC 文档中未涵盖),即使用 gcloud auth application-default login 和未使用 GOOGLE_APPLICATION_CREDENTIALS 时(因此未设置)也是。

这可能是您在 Python 代码中观察到的行为。你 gcloud auth application-default login 而不是设置 GOOGLE_APPLICATION_CREDENTIALS.

这种行为在 SDK 中应该是一致的 但是 使用 gcloud auth application-default login 越来越不被鼓励。它(可能是 ADC 文档未涵盖它的原因):

  • (如您所见)可以“奇迹般地”工作
  • 凭据通常与您的用户帐户的
  • 相匹配过于广泛

在 Linux 上,gcloud application-default login 创建 ${HOME}/.config/gcloud/application_default_credentials.json,这是 SDK 使用的密钥。

我鼓励您创建一个服务帐户作为您的代码的身份,并授予它您的代码所需的最小 IAM roles/permissions 集。

当您的代码在 Google 计算服务(例如计算引擎、云 运行、Kubernetes 引擎...)上运行时,将使用元数据服务自动获取凭据。

当您的代码运行 off-GCP(例如在本地)时,您可以创建一个服务帐户密钥,export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json 和 SDK-based 代码将自动使用这些密钥。

NOTE For completeness, creating Service Account keys is also discouraged. Keys are secrets and should be treated judiciously. A recent, powerful mechanism that provides access to GCP resources for code running off-GCP is to use Workload Identity Federation