Google Cloud Resource Manager API:测试 IAM 权限

Ken*_*Ken 5 google-api google-cloud-console google-cloud-platform

我正在尝试使用 Google Cloud Resource Manager API 来测试经过身份验证的用户是否对给定项目具有权限。我已阅读Google Cloud Resource Manager API 文档并尝试发送请求,但所有请求均失败并显示以下错误:

{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT" } }

POST 请求是:

https://cloudresourcemanager.googleapis.com/v1/projects/ {projectId}:testIamPermissions

其中 {projectId} 是 Google Cloud Developer Console 中定义的 projectId。我知道我可以使用 project.list 方法并确定给定的 projectId 是否存在于用户的项目列表中。我想了解如何使用 project.testIamPermissions 请求并确定用户对项目具有哪些权限。

luk*_*wam 2

为了使用Cloud Resource Manager API 方法organizations.testIamPermissionsprojects.testIamPermissions,您需要提供要在URL 中签入的资源,然后提供要在正文中签入的权限。

因此,例如,如果我想测试我(经过身份验证的用户)是否有权访问特定compute.instances.create项目(例如)的特定权限(例如my-project),那么我会发布以下内容:

{
 "permissions": [
  "compute.instances.create"
 ]
}
Run Code Online (Sandbox Code Playgroud)

网址

https://cloudresourcemanager.googleapis.com/v1/projects/my-project:testIamPermissions
Run Code Online (Sandbox Code Playgroud)

这会给我以下回应:

{
 "permissions": [
  "compute.instances.create"
 ]
}
Run Code Online (Sandbox Code Playgroud)

因为我实际上有权在my-project. 但是,如果我没有创建新实例的权限,则响应将如下所示:

{
}
Run Code Online (Sandbox Code Playgroud)

通过 API Explorer在这里尝试一下。

如果您的目标是找到用户对项目拥有的所有权限的测试,那么您必须在请求正文中提供所有项目级别权限的完整列表,并且响应将包含用户拥有的这些权限的子集。

希望这可以帮助!