当我遇到另一个问题时,我正在将
gcloud
与服务帐户一起使用,试图找出为什么我的 API 网关端点不起作用。首先我运行了这个export GOOGLE_APPLICATION_CREDENTIALS=/path/to/credential/fils/PROJECTNAME-hash.json
。然后我运行 gcloud services list --available
,我在终端中得到了这个:
ERROR: (gcloud.services.list) User [<SERVICE ACCOUNT NAME>@<MY PROJECT NAME>.iam.gserviceaccount.com] does not have permission to access projects instance [<MY PROJECT NAME>] (or it may not exist): Permission denied to list services for consumer container [projects/<MY PROJECT ID>]
Help Token: <WHAT LOOKS LIKE AN API KEY>
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- subject: ?error_code=110002&service=cloudresourcemanager.googleapis.com&permission=serviceusage.services.list&resource=projects/<MY PROJECT NAME>
type: googleapis.com
- '@type': type.googleapis.com/google.rpc.ErrorInfo
domain: serviceusage.googleapis.com
metadata:
permission: serviceusage.services.list
resource: projects/<MY PROJECT NAME>
service: cloudresourcemanager.googleapis.com
reason: AUTH_PERMISSION_DENIED
那么为什么我会收到此错误以及如何让
gcloud services list --available
使用选定的服务帐户?
这个问题似乎源于我需要将服务帐户设置为具有
serviceusage.serviceUsageViewer
的角色。为此,我需要运行 add-iam-policy-binding
命令,但该命令需要使用具有帐户所有者/编辑者权限的帐户运行。
第 1 步是将 gcloud 中的帐户切换到我注册 GCP 服务的主 gmail 帐户。
我使用
gcloud config set account <MASTER GMAIL ACCOUNT>
将我的 gcloud“帐户”设置为我的主 Gmail 帐户。然后我就跑了:
gcloud projects add-iam-policy-binding <PROJECT ID> \
--member "serviceAccount:<SERVICE ACCOUNT>@<PROJECT ID>.iam.gserviceaccount.com" \
--role "roles/serviceusage.serviceUsageViewer"
该命令成功了。我使用
gcloud config set account <SERVICE ACCOUNT EMAIL>
将 gcloud 帐户设置回服务帐户,然后运行 gcloud services list --available
。这次这个命令起作用了。
对我来说,我必须创建一个计费帐户并将其与新项目关联。