您好,我正在使用rest api逗号以下命令在GCP中创建服务帐户密钥。尽管不确定执行是否正确,但可以从云外壳运行命令。
API密钥凭据生成的卷曲POST https://iam.googleapis.com/v1/projects/project_iD/serviceAccounts/serviceaccountID.iam.gserviceaccount.com/keys?key=key
我是服务帐户管理员,但是在云外壳中运行此命令时,出现以下错误。从概念上来说,我拥有服务帐户的所有访问权限,但仍然说需要列表许可。有人可以帮忙吗?
卷曲:(6)无法解析主机:POST {“错误”:{“代码”:403,“消息”:“权限iam.serviceAccountKeys.list需要对服务帐户项目/ pserviceaccountID @@执行此操作dev.iam.gserviceaccount.com。”,“状态”:“ PERMISSION_DENIED”}}
答案 0 :(得分:2)
您的错误有两个部分。第一个:
curl: (6) Could not resolve host: POST
告诉您curl命令无法查找主机名“ POST”,因为您省略了-X参数,因此命令的第一部分应显示为:
curl -X POST
接下来,您拥有的URL格式不正确,因为应该没有URL参数(在本例中为?key=key
部分),因为它是POST请求-来自API的参数将包含在请求的正文中。
但是,我怀疑即使在那种情况下,您也会遇到一个权限被拒绝的错误,因为curl将无法管理此请求正常运行所必需的oauth身份验证和授权-您实际上是在API中显示为未经身份验证。在这种情况下,我建议您使用一个客户端库来执行请求,或者直接使用gcloud命令而不是curl。这些都将大大简化身份验证的管理。
API本身的文档中有C#,Go,Node,Python和其他示例,请在此处查看:https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts.keys/create
使用gcloud完成此操作的文档在这里:https://cloud.google.com/iam/docs/creating-managing-service-account-keys#iam-service-account-keys-create-gcloud
也就是说,如果您真的想使用cloud shell(在其中具有经过身份验证的gcloud会话)的curl进行此操作,则需要执行以下命令:
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl -X POST --header "Authorization: Bearer ${ACCESS_TOKEN}" \
https://iam.googleapis.com/v1/projects/PROJECTID/serviceAccounts/SERVICEACCOUNTNAME@PROJECTID.iam.gserviceaccount.com/keys
如果您不在Cloud Shell机器上,则需要确保首先具有gcloud auth:
gcloud auth login
答案 1 :(得分:0)
您发出请求的服务帐户似乎没有所需的权限。您应该为SA提供[1]中所述的必需IAM角色,或者可以通过执行gcloud auth login user@email.com
来进行呼叫来使用自己的用户。
您还需要服务帐户密钥管理员,因为SA管理员没有iam.serviceAccountKeys.list [2]。
[1] https://cloud.google.com/iam/docs/creating-managing-service-account-keys#required_permissions