0

我有一个实例运行访问范围“为每个 API 设置访问权限”,并明确允许具有读写访问权限的 Compute Engine API,如下图所示。

API访问列表

所以我通过 SSH 登录到实例内部,并尝试运行以下命令:-

gcloud compute instances list

我得到了一个错误:

- Required 'compute.zones.list' permission for 'projects/dotted-hxxl-xxx'

我的用户明确允许访问计算引擎 API,但我仍然收到错误消息。我不应该得到这个错误吗?我在这里想念什么?

4

2 回答 2

0

当您登录到实例时,您获得的权限不是您的用户,而是元数据服务器提供的计算引擎的权限。

  • 转到计算引擎详细信息并查看服务帐户部分。
  • 如果有服务帐户,请检查其权限
  • 如果没有,请在您的 VM 上添加一个服务帐户(您需要停止它才能执行此操作)
于 2020-11-30T15:26:45.117 回答
0
  1. 停止计算引擎实例

gcloud compute instances stop instance-1 --zone us-central1-c

  1. 获取实例的服务帐号

gcloud compute instances describe instance-1 --zone us-central1-c | grep email

  1. 将角色分配给roles/compute.instanceAdmin服务帐号

gcloud projects add-iam-policy-binding your_project -- member="serviceAccount:SERVICE_ACCOUNT_ID@your_project.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin"

  1. 启动实例

gcloud compute instances start instance-1 --zone us-central1-c

  1. SSH 到实例

gcloud compute ssh instance-1 --zone us-central1-c

  1. 运行 gcloud 命令

gcloud compute instances list

另请阅读IAM 角色和 OAuth 范围之间的区别

当您将实例设置为作为服务账户运行时,您可以通过授予服务账户的 IAM 角色来确定服务账户的访问级别。如果服务账户没有 IAM 角色,则服务账户不能在该实例上运行任何 API 方法。

此外,实例的访问范围决定了通过 gcloud 工具和实例上的客户端库发出的请求的默认 OAuth 范围。因此,在通过 OAuth 进行身份验证时,访问范围可能会进一步限制对 API 方法的访问

于 2020-11-30T20:59:50.037 回答