监控服务账号和密钥的使用模式

本页面介绍如何使用 Cloud Monitoring 查看服务账号和服务账号密钥的使用情况指标。这些指标可让您查看和跟踪使用模式,从而帮助您自动或手动识别异常情况。

如果服务账号和服务账号密钥用于调用任何 Google API(包括不属于 Google Cloud 的 API),则它们会显示在这些指标中。指标包括成功和失败的 API 调用。例如,如果由于调用者无权调用相应 API 或者由于请求引用了不存在的资源而导致 API 调用失败,则用于该 API 调用的服务账号或密钥会显示在指标中。

如果系统在尝试对请求进行身份验证时列出服务账号密钥,即使系统不使用密钥对请求进行身份验证,服务账号密钥也会显示在这些指标中。当使用 Cloud Storage 签名网址或向第三方应用进行身份验证时,此行为最常见。因此,您可以查看尚未用于身份验证的密钥的使用情况指标。

Monitoring 会将服务账号指标保留 6 周。如果您需要在较长时间段内访问数据,可以定期将结果导出到 BigQuery。如需了解详情,请参阅解决方案文档中的 Monitoring 指标导出

使用服务账号或服务账号密钥后,使用情况指标通常在几分钟内即可使用。

准备工作

  • Enable the IAM and Cloud Monitoring APIs.

    Enable the APIs

所需的角色

如需获得查看服务账号和密钥的近期使用情况所需的权限,请让您的管理员为您授予项目的 Monitoring Viewer (roles/monitoring.viewer) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

查看所有服务账号或密钥的使用情况指标

如需查看服务账号或服务账号密钥的使用情况指标,请按照以下步骤操作:

控制台

如需使用 Metrics Explorer 查看受监控资源的指标,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Metrics Explorer 页面:

    进入 Metrics Explorer

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  2. 指标元素中,展开选择指标菜单,在过滤栏中输入 IAM Service Account,然后使用子菜单选择一个特定资源类型和指标:
    1. 活跃资源 (Active resources) 菜单中,选择 IAM 服务账号
    2. 活跃指标类别 (Active metric categories) 菜单中,选择 Service_account
    3. 活跃指标 (Active metrics) 菜单中,选择一个服务账号指标。 以下指标在您选择的时间间隔内可用:
      • 对于服务账号使用情况指标,请选择服务账号身份验证事件 (Service account authentication events)。
      • 对于服务账号密钥使用情况指标,请选择服务账号密钥身份验证事件 (Service account key authentication events)。
    4. 点击应用
  3. 如需从显示结果中移除时序,请使用过滤条件元素

  4. 如需组合时序,请使用聚合元素上的菜单。例如,如需根据虚拟机所在的可用区显示虚拟机的 CPU 利用率,请将第一个菜单设置为平均值,并将第二个菜单设置为可用区

    聚合元素的第一个菜单设置为未聚合时,系统会显示所有时序。聚合元素的默认设置由您选择的指标类型决定。

  5. 对于配额和每天报告一个样本的其他指标,请执行以下操作:
    1. 显示窗格中,将微件类型设置为堆叠条形图
    2. 将时间段设置为至少一周。

REST

Cloud Monitoring API 的 timeSeries.list 方法允许您以编程方式访问使用情况指标。

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

  • PROJECT_ID:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如 my-project
  • METRIC_TYPE:您要检查的指标类型。请使用以下某个值:
    • 对于服务账号使用情况指标,请使用 iam.googleapis.com%2Fservice_account%2Fauthn_events_count
    • 对于服务账号密钥使用情况指标,请使用 iam.googleapis.com%2Fservice_account%2Fkey%2Fauthn_events_count
  • END_TIME:您要检查的时间间隔的结束时间,该时间采用百分比编码的 RFC 3339 格式。例如 2020-06-12T00%3A00%3A00.00Z
  • START_TIME:您要检查的时间间隔的开始时间,该时间采用百分比编码的 RFC 3339 格式。例如 2020-04-12T00%3A00%3A00.00Z

HTTP 方法和网址:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries?filter=metric.type%3D%22METRIC_TYPE%22&interval.endTime=END_TIME&interval.startTime=START_TIME

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

如需详细了解如何以编程方式读取使用情况指标,请参阅 Monitoring 文档中的读取指标数据

查看单个服务账号的使用情况指标

如需查看单个服务账号的使用情况指标,请按照以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,转到服务账号页面。

    转到“服务账号”

  2. 选择包含您的服务账号的项目。

  3. 点击您的服务账号的电子邮件地址。

  4. 点击指标标签页。身份验证流量图表显示服务账号的使用情况指标。

  5. 可选:如需查看 Metrics Explorer 页面上的图表(该页面提供了其他过滤和查看选项),请点击 > 在 Metrics Explorer 中查看

REST

与特定的过滤条件搭配使用时,Cloud Monitoring API 的 timeSeries.list 方法让您可以获取单个服务账号的使用情况指标。然后,您可以使用这些指标来确定上次使用该账号的时间。

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

  • PROJECT_ID:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如 my-project
  • SERVICE_ACCOUNT_ID:您的服务账号的唯一数字 ID。如需查找服务账号的唯一数字 ID,请按照以下步骤操作:
    1. 在 Google Cloud 控制台中,转到服务账号页面。

      转到“服务账号”页面
    2. 点击您的服务账号的电子邮件地址。 您的服务账号的唯一数字 ID 是唯一 ID 字段中的值。
  • END_TIME:您要检查的时间间隔的结束时间,该时间采用百分比编码的 RFC 3339 格式。例如 2020-06-12T00%3A00%3A00.00Z
  • START_TIME:您要检查的时间间隔的开始时间,该时间采用百分比编码的 RFC 3339 格式。例如 2020-04-12T00%3A00%3A00.00Z

HTTP 方法和网址:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries?filter=metric.type%3D%22iam.googleapis.com%2Fservice_account%2Fauthn_events_count%22%20AND%20resource.labels.unique_id%3D%22SERVICE_ACCOUNT_ID%22&interval.endTime=END_TIME&interval.startTime=START_TIME

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

响应包含一个 timeSeries 对象,该对象包含指定服务账号的所有近期身份验证事件。

查看单个服务账号密钥的使用情况指标

如需查看单个服务账号密钥的使用情况指标,请按照以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,转到服务账号页面。

    转到“服务账号”

  2. 选择包含与您的密钥关联的服务账号的项目。

  3. 点击与您的密钥关联的服务账号的电子邮件地址。

  4. 点击指标标签页。每个密钥的身份验证流量图表显示与服务账号关联的所有密钥的使用情况指标。

  5. 在图表图例中,点击要查看其使用情况指标的服务账号密钥的 ID。图表将会更新,以仅显示该服务账号密钥的指标。

  6. 可选:如需查看 Metrics Explorer 页面上的图表(该页面提供了其他过滤和查看选项),请点击 > 在 Metrics Explorer 中查看

REST

首先,获取服务账号密钥的 ID。

  1. 列出服务账号密钥:

    projects.serviceAccounts.keys.list 方法可列出服务账号的所有服务账号密钥。

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

    • PROJECT_ID:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如 my-project
    • SA_NAME:您要列出其密钥的服务账号的名称。
    • KEY_TYPES:可选。您想要在响应中包含的密钥类型的英文逗号分隔列表。密钥类型会指出密钥是由用户管理 (USER_MANAGED) 还是由系统管理 (SYSTEM_MANAGED)。如果留空,则返回所有密钥。

    HTTP 方法和网址:

    GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys?keyTypes=KEY_TYPES

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

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

    {
      "keys": [
        {
          "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c",
          "validAfterTime": "2020-03-04T17:39:47Z",
          "validBeforeTime": "9999-12-31T23:59:59Z",
          "keyAlgorithm": "KEY_ALG_RSA_2048",
          "keyOrigin": "GOOGLE_PROVIDED",
          "keyType": "USER_MANAGED"
        },
        {
          "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/e5e3800831ac1adc8a5849da7d827b4724b1fce8",
          "validAfterTime": "2020-03-31T23:50:09Z",
          "validBeforeTime": "9999-12-31T23:59:59Z",
          "keyAlgorithm": "KEY_ALG_RSA_2048",
          "keyOrigin": "GOOGLE_PROVIDED",
          "keyType": "USER_MANAGED"
        },
        {
          "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/b97699f042b8eee6a846f4f96259fbcd13e2682e",
          "validAfterTime": "2020-05-17T18:58:13Z",
          "validBeforeTime": "9999-12-31T23:59:59Z",
          "keyAlgorithm": "KEY_ALG_RSA_2048",
          "keyOrigin": "GOOGLE_PROVIDED",
          "keyType": "USER_MANAGED",
          "disabled": true
          "disable_reason": "SERVICE_ACCOUNT_KEY_DISABLE_REASON_EXPOSED"
          "extended_status": "SERVICE_ACCOUNT_KEY_EXTENDED_STATUS_KEY_EXPOSED"
          "extended_status_message": "exposed at: https://www.github.com/SomePublicRepo"
        }
      ]
    }
    

  2. 使用响应中的元数据来识别您要跟踪的密钥。然后,从 name 字段的末尾复制密钥的唯一 ID。

    name 字段采用以下格式:

    "name": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL/keys/KEY_ID"

    密钥的唯一 ID 是 keys/ 之后的所有内容。

    例如,以下密钥名称中的唯一 ID 为 0f561cc41650ff521899de2fd653bd3de08e2da4

    "name": "projects/my-project/serviceAccounts/my-account@my-project.iam.gserviceaccount.com/keys/0f561cc41650ff521899de2fd653bd3de08e2da4"

然后,使用该 ID 查看服务账号密钥的使用情况指标。

与特定的过滤条件搭配使用时,Cloud Monitoring API 的 timeSeries.list 方法允许您获取单个服务账号密钥的使用情况指标。然后,您可以使用这些指标来确定上次使用该密钥的时间。

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

  • PROJECT_ID:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如 my-project
  • KEY_ID:您的服务账号密钥的唯一 ID。
  • END_TIME:您要检查的时间间隔的结束时间,该时间采用百分比编码的 RFC 3339 格式。例如 2020-06-12T00%3A00%3A00.00Z
  • START_TIME:您要检查的时间间隔的开始时间,该时间采用百分比编码的 RFC 3339 格式。例如 2020-04-12T00%3A00%3A00.00Z

HTTP 方法和网址:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries?filter=metric.type%3D%22iam.googleapis.com%2Fservice_account%2Fkey%2Fauthn_events_count%22%20AND%20metric.labels.key_id%3D%22KEY_ID%22&interval.endTime=END_TIME&interval.startTime=START_TIME

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

响应包含一个 timeSeries 对象,该对象包含指定服务账号密钥的所有近期身份验证事件。

导出指标

您可以使用 Monitoring 将指标导出到 BigQuery。导出指标对于执行长期分析很有用,因为 Monitoring 仅在有限的时间内保留指标。

如需查看相关说明,请参阅解决方案文档中的 Monitoring 指标导出

后续步骤