如何在非交互模式下使用用户帐户向 google-cloud-sdk 进行身份验证

How to authenticate to google-cloud-sdk using user account in non-interactive mode

当我使用 service-account.json 进行身份验证时,我无法访问任何项目,即命令 'gcloud projects list' 结果为

Listed 0 items.

使用命令 'gcloud config set project my-project' 设置 gcloud 项目导致:

WARNING: You do not appear to have access to project [my-project] or it does not exist.

但是这个项目存在于我的服务中-account.json 我正在尝试获取我的 GKE 集群凭据以创建 kubeconfig 条目。 'gcloud container clusters get-credentials my-cluster --zone=us-central1-a'

ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=403, message=Required "container.clusters.get" permission(s) for "projects/my-project/zones/us-central1-a/clusters/my -cluster".

当我使用 gcloud init 登录 GCP 并使用用户帐户登录时,所有这些步骤都获得了成功的结果。但是我应该如何在不打开浏览器的情况下授权用户帐户。我不能使用“--console-only”标志,因为它仍然需要复制粘贴 url 并打开浏览器。我想仅使用脚本自动执行对用户帐户进行身份验证的完整过程

注意:my-cluster GKE集群是在my-project下创建的,是我创建的。

我怀疑(!?)您的服务帐户权限不足(通过角色授予)。

要列出项目 (gcloud projects list),服务帐户列表中的(每个项目)必须有(至少)resourcemanager.projects.get 个。参见:

https://cloud.google.com/resource-manager/docs/access-control-proj#permissions_and_roles

要检索集群权限,它必须具有 container.clusters.get(参见 full list)。

一个兼具两者的好角色是roles/container.clusterAdmin)

服务帐户具有挑战性。它们既是资源(粒子)又是身份(波),并且根据上下文表现不同。

作为资源,服务帐户由项目创建(并拥有),并且可以在任何 项目(不仅仅是所有者)中被授予权限。

作为身份,服务帐户可以被授予角色,将权限聚合到一种方法。我认为您可能缺少这一步。

Google的IAM documentation还不错。