查看和应用建议

本页介绍了如何查看、理解和应用 IAM Recommender 提供的建议。通过确保成员只能有他们实际需要的权限,IAM Recommender 可以帮助您实施最小权限原则。

准备工作

查看和应用建议

查看和应用建议的最简单方法是使用 Google Cloud Console。您必须使用 Cloud Console 来完成一些任务:

  • 查看有关您为何会收到建议的详细信息
  • 忽略建议
  • 在您应用建议时自动创建自定义角色

您还可以使用 gcloud 命令行工具和 Recommender API 查看和应用建议。

控制台

  1. 在 Cloud Console 中,转到 IAM 页面。

    转到 IAM 页面

  2. 在项目成员的列表中,找到已分析的权限数量列。

    对于授予成员的每个角色,此列会显示余出的权限数量,以及角色中的权限总数:

    有建议可用 图标表示某个角色有建议可用,要么是撤消该角色,要么是将其替换为权限较少的角色。

  3. 如果有待查看的建议,请点击有建议可用 图标,详细了解相关建议。

    如果建议替换角色,则 IAM Recommender 始终会建议使用您可以应用的一组预定义角色

    在某些情况下,IAM Recommender 还会建议在项目级层创建新的自定义角色。如果有自定义角色建议可用,则 Cloud Console 将默认显示该建议。要切换到预定义角色建议,请点击查看建议的预定义角色

  4. 请仔细查看建议,并务必了解它将如何改变成员对 Google Cloud 资源的访问权限。请参阅查看建议,以了解建议可以包含的更改类型。

  5. (可选)如果建议创建自定义角色,请根据需要更新标题说明ID角色发布阶段

    如果您需要为自定义角色添加权限,请点击添加权限

    如果您需要从自定义角色中移除权限,请取消选中您要移除的每项权限对应的复选框。

  6. 针对建议采取措施。

    如需应用建议,请点击应用创建并应用。如果您在接下来的 90 天内改变主意,请使用 IAM Recommender 历史记录还原您的选择。

    如需忽略建议,请点击忽略,然后确认您的选择。只要建议仍然有效,您就可以恢复已忽略的建议

  7. 重复前面的步骤,直到您查看完所有建议。

gcloud

要列出您的建议,请运行 gcloud recommender recommendations list 命令:

gcloud recommender recommendations list \
    --location=global \
    --recommender=google.iam.policy.Recommender \
    --project=project-id \
    --format=format

替换以下值:

  • project-id:项目标识符,例如 project-123
  • format:响应的格式。请使用 jsonyaml

响应类似于以下示例。在此示例中,服务帐号在过去 90 天内未使用 Compute Admin 角色 (roles/compute.admin) 的任何权限。因此,IAM Recommender 建议您撤消该角色:

[
  {
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "description": "This role has not been used during the observation window.",
    "recommenderSubtype": "REMOVE_ROLE",
    "etag": "\"770237e2c0decf40\"",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
  }
]

仔细查看每项建议,并思考它将如何改变成员对 Google Cloud 资源的访问权限。

要应用建议,请执行以下操作:

  1. 使用 gcloud recommender recommendations mark-claimed 命令将建议的状态更改为 CLAIMED,,这样可以防止建议在您应用它时发生变化:

    gcloud recommender recommendations mark-claimed \
        recommendation-id \
        --location=global \
        --recommender=google.iam.policy.Recommender \
        --project=project-id \
        --format=format \
        --etag=etag \
        --state-metadata=state-metadata
    

    替换以下值:

    • recommendation-id:建议的唯一标识符。此值显示在建议的 name 字段末尾。在上面的示例中,ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • project-id:项目标识符,例如 project-123
    • format:响应的格式。请使用 jsonyaml
    • etag:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。请注意,该值可以包含引号。
    • state-metadata:可选。以英文逗号分隔的键值对,其中包含您对建议所选择的元数据。例如 --state-metadata=reviewedBy=alice,priority=high。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    如果命令成功,响应会显示建议处于 CLAIMED 状态,如下例所示。为清楚起见,示例省略了大部分字段:

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"df7308cca9719dcc\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "CLAIMED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]
  2. 获取项目的 IAM 政策,然后修改政策,以便反映建议。

  3. 如果能够应用建议,请将建议的状态更新为 SUCCEEDED;否则,请更新为 FAILED

    gcloud recommender recommendations command \
        recommendation-id \
        --location=global \
        --recommender=google.iam.policy.Recommender \
        --project=project-id \
        --format=format \
        --etag=etag \
        --state-metadata=state-metadata
    

    替换以下值:

    • command:如果能够应用建议,请使用 mark-succeeded;否则,请使用 mark-failed
    • recommendation-id:建议的唯一标识符。此值显示在建议的 name 字段末尾。在上面的示例中,ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • project-id:项目标识符,例如 project-123
    • format:响应的格式。请使用 jsonyaml
    • etag:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。请注意,该值可以包含引号。
    • state-metadata:可选。以英文逗号分隔的键值对,其中包含您对建议所选择的元数据。例如 --state-metadata=reviewedBy=alice,priority=high。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    例如,如果您将建议标记为成功,响应会显示建议处于 SUCCEEDED 状态。为清楚起见,此示例省略了大部分字段:

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"dd0686e7136a4cbb\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "SUCCEEDED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]

REST

查看您的建议

Recommender API 的 recommendations.list 方法可列出项目的所有可用建议。

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

  • project-id:您的 Google Cloud 项目 ID。
  • page-size:可选。要从此请求返回的最大结果数。如果未指定,则服务器将决定要返回的结果数。如果建议的数量大于页面大小,则响应会包含用于检索下一页结果的分页令牌。
  • page-token:可选。此方法之前的响应中返回的分页令牌。如果已指定,则建议列表将从上一个请求结束的位置开始。
  • filter:可选。用于限制返回的建议的过滤条件表达式。您可以根据 stateInfo.state 字段过滤建议。例如 stateInfo.state:"DISMISSED"stateInfo.state:"FAILED"

HTTP 方法和网址:

GET https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations?pageSize=page-size&pageToken=page-token&filter=filter

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

响应类似于以下示例。在此示例中,服务帐号在过去 90 天内未使用 Compute Admin 角色 (roles/compute.admin) 的任何权限。因此,IAM Recommender 建议您撤消该角色:

{
  "recommendations": [
    "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "description": "This role has not been used during the observation window.",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
    "etag": "\"770237e2c0decf40\"",
    "recommenderSubtype": "REMOVE_ROLE"
  ]
}

仔细查看每项建议,并思考它将如何改变成员对 Google Cloud 资源的访问权限。

如需应用建议,请执行以下操作

  1. 将建议标记为 CLAIMED

    Recommender API 的 recommendations.markClaimed 方法可将建议标记为 CLAIMED,这样可以防止建议在您应用它时发生变化。

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

    • project-id:您的 Google Cloud 项目 ID。
    • recommendation-id:建议的唯一标识符。此值显示在建议的 name 字段末尾。例如,如果 name 字段为 projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • etag:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。使用反斜杠可转义引号,例如 "\"df7308cca9719dcc\""
    • state-metadata:可选。包含键值对的对象,其中包含您对建议所选择的元数据。例如 {"reviewedBy": "alice", "priority": "high"}。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    HTTP 方法和网址:

    POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markClaimed

    请求 JSON 正文:

    {
      "etag": "etag"
      "stateMetadata": {
        "state-metadata"
    }
    

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

    响应会显示 CLAIMED 状态的建议,如以下示例所示。为清楚起见,此示例省略了大部分字段:

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "CLAIMED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

  2. 获取项目的 IAM 政策,然后修改政策,以便反映建议。

  3. 如果能够应用建议,请将建议的状态更新为 SUCCEEDED;否则,请更新为 FAILED

    SUCCEEDED

    Recommender API 的 recommendations.markSucceeded 方法可将建议标记为 SUCCEEDED,表明您可以应用它。

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

    • project-id:您的 Google Cloud 项目 ID。
    • recommendation-id:建议的唯一标识符。此值显示在建议的 name 字段末尾。例如,如果 name 字段为 projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • etag:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。使用反斜杠可转义引号,例如 "\"df7308cca9719dcc\""
    • state-metadata:可选。包含键值对的对象,其中包含您对建议所选择的元数据。例如 {"reviewedBy": "alice", "priority": "high"}。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    HTTP 方法和网址:

    POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markSucceeded

    请求 JSON 正文:

    {
      "etag": "etag"
      "stateMetadata": {
        "state-metadata"
    }
    

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

    响应会显示 SUCCEEDED 状态的建议,如以下示例所示。为清楚起见,此示例省略了大部分字段:

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "SUCCEEDED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

    FAILED

    Recommender API 的 recommendations.markFailed 方法可将建议标记为 FAILED,表明您无法应用它。

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

    • project-id:您的 Google Cloud 项目 ID。
    • recommendation-id:建议的唯一标识符。此值显示在建议的 name 字段末尾。例如,如果 name 字段为 projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • etag:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。使用反斜杠可转义引号,例如 "\"df7308cca9719dcc\""
    • state-metadata:可选。包含键值对的对象,其中包含您对建议所选择的元数据。例如 {"reviewedBy": "alice", "priority": "high"}。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    HTTP 方法和网址:

    POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markFailed

    请求 JSON 正文:

    {
      "etag": "etag"
      "stateMetadata": {
        "state-metadata"
    }
    

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

    响应会显示 FAILED 状态的建议,如以下示例所示。为清楚起见,此示例省略了大部分字段:

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "FAILED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

查看、还原和恢复更改

在您应用或忽略建议之后,该操作会显示在建议历史记录中。如需查看建议历史记录,请执行以下操作:

  1. 在 Cloud Console 中,转到 IAM 页面。

    转到 IAM 页面

  2. 点击屏幕顶部附近的建议历史记录

    Cloud Console 会显示以前针对 IAM 建议所执行操作的列表。

  3. 要查看建议的详细信息,请点击 展开箭头。

    Cloud Console 会显示所执行操作的详细信息,包括执行操作的成员:

  4. (可选)如有必要,可以还原建议,该操作会撤消对建议的更改,或恢复您已忽略的建议。

    如需还原之前应用的建议更改,请点击还原。Cloud Console 会还原对成员的角色所做的更改。该建议不再出现在 Cloud Console 中。

    要恢复已忽略的建议,请点击恢复。该建议会显示在 Cloud Console 中的 IAM 页面上。系统不会更改任何角色或权限。

后续步骤