ERROR: (gcloud.services.enable) User does not have permission to access project (or it may not exist): The caller does not have permission

ERROR: (gcloud.services.enable) User does not have permission to access project (or it may not exist): The caller does not have permission

我正在寻找一个脚本,我可以 运行 来自 Cloud Shell 以在所有项目中启用 API。它成功地完成了每个项目,但我收到了每个项目的权限被拒绝的消息。我是所有者,所以不应该有任何权限问题。

作为权限测试,如果我运行只是"gcloud services enable cloudresourcemanager.googleapis.com",API成功启用。

我错过了什么?

#!/bin/bash
for project in  $(gcloud projects list --format="value(projectId)")
do
    echo "ProjectId:  $project"
    for enableapi in $(gcloud services enable cloudresourcemanager.googleapis.com list --project $project --format=list)
     do
        echo "    -> Enabled $enableapi"
    done
done

Lucas,这个方法可行:

#!/bin/bash
for project in  $(gcloud projects list --format="value(projectId)")
do
    echo "ProjectId:  $project"
    gcloud config set project $project
    gcloud services enable cloudresourcemanager.googleapis.com  --project $project
done

我正在关注 this doc

如果您使用 --project 标志启用服务,则不必设置项目配置。真正的问题是您想在 bash 脚本中启用多个服务,包括一个名为“列表”的服务,该服务不存在。以下是同时正确启用多个 api 的方法:

#!/bin/bash

# Make sure this is a valid bash array!
services=(service1 service2 service3)

# Option 1
for project in  $(gcloud projects list --format="value(projectId)")
do
    gcloud services enable $services --project $project
done

# Option 2
for project in  $(gcloud projects list --format="value(projectId)")
do
    for service in $services
    do
        gcloud services enable $service --project $project
    done
done

请参阅 this 文档。