在获取gcloud容器集群凭据期间出现"请求权限不足"的403错误

38

从GCE中的虚拟机上,我执行了以下操作

gcloud auth activate-service-account --key-file <blah>
# "blah" is a service account key file (JSON) I generated from the web interface
gcloud config set project <project-name>
gcloud config set compute/zone <zone-name>
gcloud set container/cluster <cluster-name>

然后当我尝试运行时

gcloud container clusters get-credentials <cluster-name>

并且它失败了,并显示以下错误信息:

错误信息:"ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=403, message=Request had insufficient authentication scopes."

该虚拟机与GKE集群位于同一网络上。我试图尝试相同的操作,在来自GCE外部机器上使用相同的服务帐号密钥文件针对“默认”网络上的GKE集群,结果成功了...

4个回答

54

7
如果您正在使用命令行,可以输入以下命令:gcloud compute instances create NAME --scopes=https://www.googleapis.com/auth/cloud-platform。如果您使用的是云控制台,在创建虚拟机时,请查找“身份验证和 API 访问”部分,并选择“允许对所有 Cloud API 进行完全访问”。 - Robert Bailey
2
在创建集群之后,是否可以添加云平台范围? - alphayax
1
你不能将它添加到现有的虚拟机中,但是你可以创建一个新的节点池,并设置其范围(这样它就会应用于那些新的虚拟机),然后将你的工作负载迁移到新的节点池中,并删除旧的节点池。 - Robert Bailey
2
现在您可以在创建之后更改作用域权限。只需关闭计算机,单击编辑,然后进入作用域部分即可。 - Seraf
1
好的一点是,现在你可以使用单个机器停止虚拟机、更改范围并重新启动虚拟机。但是,如果您的虚拟机是托管实例组的一部分(由GKE或其他方式管理),那么我认为您无法使用这种技巧来更改范围,您需要从一开始就创建具有正确范围的新托管实例组。 - Robert Bailey
显示剩余6条评论

4
如果您正在使用Google Kubernetes Engine API,并且是从GCP中的VM中进行访问,那么您首先需要在VM级别上添加所需的范围,即https://www.googleapis.com/auth/projecthosting,cloud-platform。这也可以通过GCP控制台完成。停止VM实例,然后转到编辑选项,在最后您会找到Cloud API访问范围。

1
我打开了“允许完全访问所有云API”的选项,问题得到了解决。 - ekkis

4

现在已经有一种解决方案(仅适用于beta和alpha版本),可以为现有的GCE VM设置范围。只需要在执行命令之前停止VM即可成功。

首先,您应该意识到(并复制)VM的当前范围,以便您可以在使用新范围时将它们与您的新范围一起设置,使用:

gcloud compute instances describe your-instance

底部您应该看到一个作用域列表,请复制它们。

然后,阅读此命令的 beta 版档案(可供所有人使用,但使用时需自行承担风险):https://cloud.google.com/sdk/gcloud/reference/beta/compute/instances/set-scopes

在执行此命令之前,请在 GCE 页面上停止实例并等待其关闭。会出现一个可怕的警告,请注意,如果 VM 在 90 秒内不正常关闭(即所有进程和服务都成功关闭),当强制关闭 VM 时,文件系统可能会损坏。请好好备份重要文件,以免感到不安。

对于我来说,加上现有的作用域和新作用域(cloud-platform),生成的 set-scopes 命令如下所示:

gcloud beta compute instances set-scopes my-instance --zone=us-central1-a --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/cloud-platform 

3

步骤1:gcloud init

步骤2:选择[2]创建新配置

步骤3:输入配置名称。名称以小写字母开头,只包含小写字母a-z、数字0-9和连字符“-”:kubernetes-service-account

步骤4:选择要用于执行此配置操作的帐户:[2]使用新帐户登录

步骤5:您要继续吗(Y/n)? y

步骤6:复制粘贴链接到浏览器并使用用于创建您的Google Cloud帐户的ID进行登录

步骤7:在登录后将由Google提供的验证码复制并粘贴到控制台中。

步骤8:选择要使用的云项目:

步骤9:是否要配置默认计算区域和区域?(Y/n)? y

步骤10:请输入数字选项或文本值(必须与列表项完全匹配):8

您的Google Cloud SDK已配置完成,可以使用!

完成此操作后,请确保为VM配置的服务帐户具有执行所需任务的权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接