繁体   English   中英

无法在新 GCE 虚拟机上列出服务帐户

[英]Cannot list service accounts on new GCE VM

我在一个谷歌计算引擎项目中创建了一个新的虚拟机。 创建 VM 后,我将“计算引擎”访问 scope 更改为“读写”。

在现有的(长期运行的)VM 上,如果我这样做:

gcloud iam service-accounts list

我看到了该项目的默认服务帐户。

但是,如果我在新创建的 VM 上执行相同的操作,则会收到错误消息:

  gcloud iam service-accounts list
ERROR: (gcloud.iam.service-accounts.list) User [<service-account>] does not have permission to access projects instance [<project>] (or it may not exist): Request had insufficient authentication scopes.

原始 VM 是 ubuntu-16,新 VM 是从 google 映像新创建的 ubuntu-18。

如果我查看项目 IAM 角色,我的用户具有以下角色:

 - Access Approval Config Editor
 - Compute Admin
 - Role Viewer
 - Service Account Admin
 - Owner
 - Organization Administrator

我错过了什么? 两个虚拟机的访问范围是一样的:

 - Compute Engine               Read Write
 - Service Control              Enabled
 - Service Management           Read Only
 - Stackdriver Logging API      Write Only
 - Stackdriver Monitoring API   Write Only
 - Stackdriver Trace            Write Only
 - Storage                      Read Only

除了访问范围之外,还有什么控制单个 VM 的访问?

问题是 SSH window 在服务帐户下运行,而不是我的普通用户帐户。 我需要跑步

gcloud init

重新配置以使用我的常规帐户。

我通过这样做发现了这一点

gcloud config list

在两台机器上。

第1部分

除了访问范围之外,还有什么控制单个 VM 的访问?

Compute Engine 范围和服务帐号权限的结合。

Google Compute Engine 范围限制权限,范围不授予权限。

分配给 Compute Engine 的服务帐号决定了可用的权限/角色。 范围可以限制授予服务帐户的权限。 范围不能授予服务帐户尚未拥有的权限。

范围是一种遗留的授权机制。

第2部分

gcloud iam service-accounts list ERROR: (gcloud.iam.service-accounts.list) 用户 [] 没有访问项目实例 [] 的权限(或者它可能不存在):请求的身份验证范围不足。

这条信息的一部分让大多数人感到困惑。 范围是 Google 在 IAM 之前使用的旧式身份验证机制。 范围类似于权限,在此消息中表示OAuth 2 Permissions

命令gcloud iam service-accounts list需要权限iam.serviceAccounts.list ,该权限存在于角色中,例如名为Service Account Userroles/iam.serviceAccountUser 错误中提到的服务帐户没有授予列出服务帐户权限的角色之一,或者范围正在限制授予服务帐户的权限。 最后阅读我的建议。

服务帐户角色

第 3 部分

如果我查看项目 IAM 角色,我的用户具有以下角色:

分配给用户的角色与分配给 Compute Engine 服务帐号的角色无关。

如果您使用 SSH 登录 Compute Engine 并且没有执行任何其他操作来进行身份验证,那么您使用的是 Compute Engine 默认服务帐户凭据。 服务帐户和范围会影响您的权限。

如果您使用 SSH 登录 Compute Engine 并使用自己的帐户进行身份验证( gcloud auth login或类似帐户),那么您的用户身份使用的是授予您的用户帐户的权限,而不是 Compute Engine 默认服务帐户凭据。

第 4 部分

原始 VM 是 ubuntu-16,新 VM 是从 google 映像新创建的 ubuntu-18。

如果两个 VM 的范围相同,那么您的问题是服务帐户。 通常 Compute Engine 虚拟机使用 Compute Engine 默认服务帐号。 您可以更改分配给每个 VM 的服务帐户。 仔细检查分配给每个 VM 的内容。

概括

我建议您将范围设置为Allow full access to all Cloud APIs ,并通过授予服务帐户的角色控制权限。 不要使用Project OwnerProject Editor等角色。 这些角色非常强大。 对 Compute Engine 需要访问的每个 Google Cloud 服务使用细粒度的权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM