google-cloud-platform - Google Cloud Platform:如何通过 REST 调用跨所有 GCP 资源获取为特定身份分配的权限
问题描述
GCP IAM:在 IAM 中,访问资源的权限不会直接授予最终用户。相反,权限被分组到角色中,并且角色被授予经过身份验证的成员。IAM 策略定义并强制执行哪些角色被授予哪些成员,并且此策略附加到资源参考:https ://cloud.google.com/iam/docs/overview
所以基本上,谷歌云资源的访问控制是由 IAM 策略管理的。IAM 策略附加到资源。
使用云资源管理器 API,我们可以检索策略并检查分配给用户的权限,但它是以资源为中心的。可以检索组织、文件夹、项目等的策略。示例:https ://cloud.google.com/resource-manager/reference/rest/v1/organizations/getIamPolicy
云资产清单:有一个 API 来搜索所有 iam 策略。使用查询参数,它有一个用户过滤器,但它支持可以为 iam polciy 分配 API 的资源子集: https ://cloud.google.com/asset-inventory/docs/reference/rest/v1/TopLevel/ searchAllIamPolicies 参考:
- https://cloud.google.com/asset-inventory/docs/supported-asset-types
- https://cloud.google.com/iam/docs/resource-types-with-policies
问题: 有没有办法在所有 GCP 资源中获取授予身份的所有权限,而不是检查每个资源的 IAM 政策?
基本上是在 GCP 中寻找授予身份的所有权限的综合视图。问题是为了理解分配给单个资源上的用户的权限,使用 API,我们必须获取所有资源策略并检查它们的绑定
解决方案
到目前为止,还没有 gcloud 或 API 调用可用于根据您的问题的解释轻松检查授予特定资源(例如用户、服务帐户等)的权限。正如您已经知道的,您可以使用相关的gcloud 命令来搜索分配给每个不同资源的特定角色,例如:
gcloud asset search-all-iam-policies --scope='projects/[YOUR-PROJECT-ID]' --query='policy:[YOUR-USERNAME]@[YOUR-DOMAIN]'
导致例如:
---
policy:
bindings:
- members:
- projectOwner:[PROJECT-ID]
- user:[YOUR-USERNAME]@[YOUR-DOMAIN]
role: roles/bigquery.dataOwner
project: projects/[PROJECT-NUMBER]
resource: //bigquery.googleapis.com/projects/[PROJECT-ID]/datasets/[DATASET-NAME]
---
policy:
bindings:
- members:
- user:[YOUR-USERNAME]@[YOUR-DOMAIN]
role: projects/[PROJECT-ID]/roles/[CUSTOM-ROLE-NAME]
- members:
- user:[ANOTHER-USERNAME]@[YOUR-DOMAIN]
- user:[YOUR-USERNAME]@[YOUR-DOMAIN]
role: roles/owner
project: projects/[PROJECT-NUMBER]
并从这些响应中解析与每个资源分配对应的字段,以查看使用相关gcloud 命令role:
为该特定角色分配了哪些权限:
gcloud iam roles describe [CHANGE-FOR-ROLE-(e.g. roles/owner)] --project=[PR0JECT-ID]
includedPermissions:
并检查与字段对应的输出。
因此,我建议您在GCP 的公共问题跟踪器上加注星标并关注此功能请求,以检查此问题在未来实施的可行性(或不可行)。
推荐阅读
- amazon-web-services - AWS 应用程序负载均衡器抛出 net::ERR_CERT_COMMON_NAME_INVALID
- php - 如何在 laravel 模型中实现字符串处理程序
- python - 如何避免新行作为熊猫数据框中的分隔符
- javascript - 正则表达式:从 Y 文件夹中查找 X 扩展名的文件
- android - 如何在以下代码中获取道具值。我在平台状态中得到了值
- sql - SQL:CASE WHEN 以 AVG() 作为条件时没有给出正确的输出
- javascript - 使用 sinon 存根 fs.promises.readFile()
- php - 登录和注册重定向 - 在 WooCommerce 的结帐页面上时不要重定向登录
- javascript - 如何在我的 html 代码中激活 tomtom 的自动完成选项?
- python - 如何包含来自同一文件夹的另一个 python 文件