排查访问权限问题

Policy Troubleshooter 可以帮您更轻松地理解用户为何能够访问资源或无权调用 API。给定电子邮件、资源和权限后、政策问题排查工具将能够检查适用于该资源的所有 Identity and Access Management (IAM) 政策。然后,它会显示该主帐号的角色是否包含该资源的权限,如果是,则显示该主帐号通过哪些政策绑定到这些角色。

您可以使用 Cloud Console、gcloud 命令行工具或 REST API 访问 Policy Troubleshooter。对于简单查询,使用 Cloud Console 通常速度最快。对于更复杂的场景,请考虑使用 gcloud 工具或 REST API。

准备工作

  • 启用 Policy Troubleshooter API。

    启用 API

所需权限

Policy Troubleshooter 根据您有权查看的 IAM 政策和角色来分析主帐号对资源的访问权限。如果您没有查看应用于资源的政策的权限,或者没有查看自定义角色的权限,则可能无法确定主帐号是否具有访问权限。

如要全面排查主帐号的访问权限,您需要拥有以下权限的角色:

  • resourcemanager.projects.getIamPolicy
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.organizations.getIamPolicy
  • iam.roles.get
  • iam.roles.list

如要获得这些权限,同时遵循最小权限原则,请让您的管理员在组织级别授予您 Security Reviewer 角色 (roles/iam.securityReviewer)。

或者,管理员也可以向您授予具有所需权限的其他角色,例如自定义角色或更宽松的预定义角色

排查访问权限问题

要排查访问权限问题,您需要以下信息:

  • 主帐号:要检查的电子邮件地址。电子邮件地址必须引用用户或服务帐号。不支持其他类型的主帐号。
  • 资源:资源的完整名称。例如,要检查项目 my-project,请输入 //cloudresourcemanager.googleapis.com/projects/my-project。对于其他类型的资源,请参阅完整资源名称示例
  • 权限:要检查的权限。如果您使用 Cloud Console,则它会在您输入时显示建议列表。有关权限的完整列表,请查看权限参考

控制台

排查访问权限问题

如要排查访问权限问题,请执行以下操作:

  1. 在 Cloud Console 中,转到政策问题排查工具页面。

    转到政策问题排查工具

  2. 接下来,输入要检查的电子邮件、资源名称和权限。

  3. 可选:要检查多项资源和权限,请选择添加其他权限对,并重复上一步骤。

  4. 点击检查 API 调用

了解政策问题排查工具结果

Policy Troubleshooter 结果会告知您主帐号是否具有给定资源的指定权限。还列出了适用于该资源的 IAM 政策以及这些政策中的角色绑定。

默认情况下,结果显示在精简视图中,该视图仅显示包含指定权限的角色的角色绑定。如果您排查多项权限问题,请使用查看方式下拉列表在权限之间切换。

您可以通过点击紧凑视图切换开关来停用精简视图。停用精简视图会在适用于该资源的政策中显示所有角色绑定。

结果页面包含以下信息:

  • 访问权限摘要:主账号访问权限摘要。您可以通过此信息查看主帐号是否拥有该资源的权限。在以下示例中,my-user@example.commy-project 上的 logging.logs.view 权限:

  • 相关政策和角色绑定:适用于给定资源的 IAM 政策的列表,以及每个政策中的角色绑定。每个角色绑定旁边都有一个图标,指示该角色绑定是否向主帐号授予了指定的权限。点击角色绑定即可查看其原始文本。

    在以下示例中,Logs Viewer 角色绑定会授予权限:

  • 相关角色绑定的原始文本:相关角色绑定列表中每个角色绑定的原始文本。如需详细了解角色绑定的结构,请参阅了解政策

    在角色绑定中,突出显示如下行:

    • 绿色:如果行包含指定权限的角色、引用了指定的主帐号或者引用了指定主账号的群组,则以绿色突出显示。
    • 红色:如果其他行包含其他角色、引用另一个主帐号,或引用不包含指定主账号的群组,则以红色突出显示。
    • 黄色:如果某些角色包含您无权查看的详细信息,或您无权查看其成员资格的群组,则以黄色突出显示。

gcloud

首先,确保您的环境设置为可以使用 Policy Troubleshooter。

启用 Policy Troubleshooter API:

gcloud services enable policytroubleshooter.googleapis.com --project=project-id

然后,设置您的项目:

gcloud config set project project-id

完成设置后,您可以使用政策问题排查工具来检查用户是否拥有某项资源的权限。运行以下命令:

gcloud policy-troubleshoot iam resource --principal-email=email \
    --permission=permission

例如,以下命令可检查 foo@example.com 是否有项目 my- project 上的 resourcemanager.projects.getIamPolicy 权限。

gcloud policy-troubleshoot iam //cloudresourcemanager.googleapis.com/projects/my-project \
    --permission=resourcemanager.projects.getIamPolicy --principal-email=foo@example.com

输出是 YAML,它指示用户是否具有权限以及相关原因。输出应如下所示:

access: GRANTED
explainedPolicies:
- access: GRANTED
  bindingExplanations:
  - access: NOT_GRANTED
    memberships:
      serviceAccount:service-123@compute-system.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
    role: roles/compute.serviceAgent
    rolePermission: ROLE_PERMISSION_NOT_INCLUDED
  - access: GRANTED
    memberships:
      serviceAccount:service@my-project.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
      user:foo@example.com: MEMBERSHIP_INCLUDED
    role: roles/owner
    rolePermission: ROLE_PERMISSION_INCLUDED
  fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
  policy:
    bindings:
    - members:
      - serviceAccount:service-123@compute-system.iam.gserviceaccount.com
      role: roles/compute.serviceAgent
    - members:
      - serviceAccount:foo@my-project.iam.gserviceaccount.com
      - user:foo@example.com
      role: roles/owner
    etag: BwWAOWEaIEg=
    version: 1
- access: UNKNOWN_INFO_DENIED
policy: {}

REST API

iam.troubleshoot 方法告诉您主帐号拥有或没有 IAM 权限的原因。

在使用任何请求数据之前,请先进行以下替换:

  • email:您要排查其权限问题的主帐号的电子邮件地址。
  • resource:向其授予权限的资源。
  • permission:您要排查其问题的权限。

HTTP 方法和网址:

POST https://policytroubleshooter.googleapis.com/v1/iam:troubleshoot

请求 JSON 正文:

{
  "accessTuple": {
    "principal": "email",
    "fullResourceName": "resource",
    "permission": "permission"
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "access": "GRANTED",
  "explainedPolicies": [
    {
      "access": "GRANTED",
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
      "policy": {
        "version": 1,
        "etag": "BwWBUZjK9YQ=",
        "bindings": [
          {
            "role": "roles/owner",
            "members": [
              "user:foo@example.com"
            ]
          }
        ]
      },
      "bindingExplanations": [
        {
          "access": "GRANTED",
          "role": "roles/owner",
          "rolePermission": "ROLE_PERMISSION_INCLUDED",
          "rolePermissionRelevance": "HIGH",
          "memberships": {
            "key": "user:foo@example.com",
            "value": {
              "membership": "MEMBERSHIP_INCLUDED",
              "relevance": "HIGH",
            }
          },
        "relevance: HIGH",
        }
      ]
    },
    {
      "access": "UNKNOWN_INFO_DENIED",
      "policy": {}
    }
  ]
}

排查群组成员资格问题

只有在您有权查看某个 Google 群组的成员时,才能排查该群组授予的资源访问权限的问题。

如果您没有权限,则该群组会在 Cloud Console 中以黄色突出显示,并且系统会显示警告,告知您群组是否包含主帐号。如果您使用的是 gcloud 工具或 REST API,响应会包含 UNKNOWN_INFO_DENIEDACCESS_TO_INFO_DENIED

排查群组成员资格问题

Google Workspace 超级用户和群组管理员通常有权查看群组成员资格。如需允许非超级用户或群组管理员的用户排查访问权限的问题,请创建自定义 Google Workspace 管理员角色(该角色拥有 Admin API 权限下的 groups.read 权限),并将该角色授予此用户。这样用户就可以查看您所在网域中所有群组的成员资格,并更有效地排查访问权限问题。

排查条件角色绑定问题

为了排查条件角色绑定问题,政策问题排查工具需要有关请求的其他背景信息。比方说,为了根据日期/时间属性排查条件,政策问题排查工具需要请求的时间。

如需提供额外的背景信息,您可以从任何管理员活动审核日志数据访问审核日志进行问题排查。每个审核日志条目对应于 Google Cloud API 的请求,或 Google Cloud 代表您执行的操作。当您从审核日志进行问题排查时,政策问题排查工具会自动获取有关该请求的其他信息,例如日期和时间,这使政策问题排查工具能够分析条件角色绑定。

此功能仅在 Cloud Console 中提供。

如需排查条件角色绑定问题,请执行以下操作:

  1. 在 Cloud Console 中,转到日志浏览器页面。

    转到日志浏览器

  2. 如果页面标题为旧式日志查看器,请点击升级下拉列表,然后选择升级新的日志浏览器

  3. 如需仅查看管理员活动和数据访问审核日志,请在查询构建器中输入以下查询,然后点击运行查询

    logName=("RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" OR "RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
    

    替换以下值:

    • RESOURCE_TYPE:要为其列出审核日志的资源类型。请使用 projectsfoldersorganizations
    • RESOURCE_ID:您的资源的 ID。
  4. 找到对应于您要排查问题的请求的审核日志条目。如需了解如何使用日志浏览器查找特定日志条目,请参阅使用日志浏览器

  5. 在日志条目的摘要列中,点击 IAM,然后点击排查访问权限问题

    政策问题排查工具会使用日志条目中的信息进行问题排查,然后向您显示结果。额外的上下文会列在访问权限摘要正下方。如需详细了解政策问题排查工具结果页面,请参阅本页面上的排查访问权限问题

  6. 可选:如需排查涉及条件角色绑定的其他请求的问题,请返回日志浏览器页面并重复以上步骤。

后续步骤