【问题标题】:Cannot list service accounts on new GCE VM无法在新 GCE 虚拟机上列出服务帐户
【发布时间】:2021-03-10 17:21:06
【问题描述】:

我在一个谷歌计算引擎项目中创建了一个新的虚拟机。创建 VM 后,我将“Compute Engine”访问范围更改为“Read Write”。

在现有的(长期运行的)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.

原来的虚拟机是 ubuntu-16,新的虚拟机是 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 的访问?

【问题讨论】:

    标签: list permissions google-compute-engine roles google-cloud-iam


    【解决方案1】:

    第 1 部分

    除访问权限外,控制单个虚拟机访问权限的因素 范围?

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

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

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

    作用域是一种遗留的授权机制。

    第 2 部分

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

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

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

    Service Account Roles

    第 3 部分

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

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

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

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

    第 4 部分

    原来的虚拟机是ubuntu-16,新的虚拟机是ubuntu-18 从谷歌图片创建。

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

    总结

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

    【讨论】:

    • 谢谢,对工作原理的非常有用的解释。由于我以自己的身份登录并在 console.cloud.google.com/compute 上创建了 VM,我原以为单击新 VM 上的 SSH 按钮会像我一样打开 SSH 会话,但事实并非如此。合理,但违反直觉。
    • @GaryAitken 单击 Google Cloud Console SSH 按钮使用您的 Web 浏览器用户身份使用 SSH 连接到 VM,仅此而已。这不会影响您登录后使用的凭据。通过 SSH 登录后,您将使用 Compute Engine 身份。然后,您可以通过 gcloud auth login 更改它以获取新凭据。
    【解决方案2】:

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

    gcloud init
    

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

    我是通过这样做发现的

    gcloud config list
    

    在两台机器上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2021-04-06
      相关资源
      最近更新 更多