启用数据访问审核日志

本指南介绍了如何使用 Google Cloud 控制台或 API 在Google Cloud 项目、结算账号、文件夹和组织中启用或停用部分或全部数据访问审核日志

准备工作

在继续配置数据访问审核日志之前,请先了解以下信息:

  • 数据访问审核日志(BigQuery 除外)默认处于停用状态。如果您想针对 BigQuery 以外的Google Cloud 服务写入数据访问审核日志,则必须明确启用这些日志。

  • 除非您将数据访问审核日志路由到其他位置,否则这些日志会存储在 _Default 存储桶中。如需了解详情,请参阅存储和路由审核日志

  • 数据访问审核日志可帮助 Google 支持团队排查您的账号问题。因此,我们建议您尽可能启用数据访问审核日志。

  • 如需获得访问 _Required_Default 存储桶中的所有日志(包括数据访问日志)所需的权限,请让您的管理员为您授予项目的 Private Logs Viewer (roles/logging.privateLogViewer) IAM 角色。

    Private Logs Viewer 角色 ((roles/logging.privateLogViewer)) 包含 Logs Viewer 角色 (roles/logging.viewer) 具有的权限,以及读取 _Default 存储桶中的数据访问审核日志所需的权限。

    Editor 角色 (roles/editor) 不包含查看数据访问日志所需的权限。

    如需详细了解适用于审核日志数据的 IAM 权限和角色,请参阅使用 IAM 进行访问权限控制

配置概览

您可以配置如何为您的Google Cloud 资源和服务启用数据访问审核日志:

  • 组织:您可以在组织中启用和配置数据访问审核日志,这适用于组织中所有现有及新的Google Cloud 项目和文件夹。

  • 文件夹:您可以在文件夹中启用和配置数据访问审核日志,这适用于文件夹中所有现有及新的 Google Cloud 项目。您无法停用已在项目的父级组织中启用的数据访问审核日志。

  • 项目:您可以为单个Google Cloud 项目配置数据访问审核日志。您无法停用已在父级组织或文件夹中启用的数据访问审核日志。

  • 结算账号:如需为结算账号配置数据访问审核日志,请使用 Google Cloud CLI。如需详细了解如何将 gcloud CLI 与数据访问审核日志和结算账号搭配使用,请参阅 gcloud beta billing accounts set-iam-policy 文档。

  • 默认配置:您可以在组织、文件夹或 Google Cloud 项目中指定默认数据访问审核日志配置,该配置适用于开始生成数据访问审核日志的未来 Google Cloud 服务。如需了解相关说明,请参阅设置默认配置

  • 权限类型:您可以指定只有检查特定类型的权限的 Google Cloud API 才会发出审核日志。如需了解详情,请参阅本页面中的权限类型部分。

  • 豁免的主账号:您可以豁免特定主账号,这样系统就不会记录其数据访问。例如,您可以豁免内部测试账号,让系统不再记录这些账号的 Cloud Monitoring 操作。如需查看有效主账号(包括用户和群组)的列表,请参阅 Binding 类型参考文档

您可以通过 Google Cloud 控制台的 IAM 审核日志页面或使用 API 来配置数据访问审核日志。以下部分对这些方法进行了说明。

权限类型

API 方法会检查 IAM 权限。每个 IAM 权限都有一种权限类型,由 type 属性定义。权限类型分为数据访问权限类型或管理员活动权限类型:

  • 数据访问权限类型:

    • ADMIN_READ:对于读取元数据或配置信息的Google Cloud API 方法,系统会检查此类型的 IAM 权限。通常,ADMIN_READ 审核日志默认处于停用状态,必须启用。

    • DATA_READ:对于读取用户提供的数据的Google Cloud API 方法,系统会检查此类型的 IAM 权限。通常,DATA_READ 审核日志默认处于停用状态,必须启用。

    • DATA_WRITE:对于写入用户提供的数据的Google Cloud API 方法,系统会检查此类型的 IAM 权限。通常,DATA_WRITE 审核日志默认处于停用状态,必须启用。

  • 管理员活动权限类型:

    • ADMIN_WRITE:对于写入元数据或配置信息的Google Cloud API 方法,系统会检查此类型的 IAM 权限。与此类型相关联的审核日志(管理员活动审核日志)默认处于启用状态,且无法停用。

您可以使用Google Cloud 控制台调用 API 为服务启用或停用权限类型。

大多数 Google Cloud API 只会检查调用方是否具有单个 IAM 权限。如果为被调用 API 的服务启用了与该权限关联的权限类型,则 API 会生成审核日志。

以下部分将简要介绍 Google CloudAPI 方法检查 IAM 权限的其他方式。如需了解有关针对哪些权限类型检查哪些方法的服务特定信息,请参阅服务的审核日志记录文档

针对数据访问权限类型的 IAM 权限检查

某些 Google Cloud API 方法会检查调用方是否拥有多个具有不同数据访问权限类型的 IAM 权限。对项目启用了其中一种数据访问权限类型时,系统会写入审核日志。

例如,一个 API 方法可能会检查发出 API 请求的主账号是否拥有 example.resource.get (DATA_READ) 和 example.resource.write (DATA_WRITE) 权限。项目只需针对服务启用 DATA_WRITEDATA_READ,即可在发出调用时发出审核日志。

所检查的管理员活动和数据访问 IAM 权限类型

某些 Google Cloud API 方法会同时检查具有 ADMIN_WRITE 权限类型的 IAM 权限以及具有数据访问权限类型的一项或多项权限。

这些类型的 API 调用会发出管理员活动审核日志(这些日志默认处于启用状态,且无法停用)。

API 方法检查服务不拥有的 IAM 权限

某些 Google Cloud 服务的 API 方法仅在针对其他服务启用了特定权限类型时才会生成审核日志。

例如,Cloud Billing 有一个 API 方法,用于检查 Resource Manager 所拥有的 ADMIN_READ 权限类型。必须针对服务 cloudresourcemanager.googleapis.com 启用了 ADMIN_READ,才能启用与 Cloud Billing API 相关联的审核日志。

同一 API 方法检查不同的 IAM 权限

对于某些 Google Cloud API,调用方法的方式决定了必须对项目启用哪些 IAM 权限类型才能生成审核日志。

例如,Spanner 有一个 API 方法,有时会检查具有 DATA_WRITE 类型的 IAM 权限,有时会检查具有 DATA_READ 类型的 IAM 权限,具体取决于调用该方法的方式。在这种情况下,如果在 API 调用项目中为 Spanner 启用 DATA_WRITE,则只有在检查到具有 DATA_WRITE 类型的 IAM 权限后,才会启用与该 API 相关联的审核日志。

服务专属配置

如果同时存在 Google Cloud 服务范围 (allServices) 配置和适合特定 Google Cloud 服务的配置,则最终的服务配置将是这两种配置的并集。换句话说:

  • 您可以为特定 Google Cloud服务启用数据访问审核日志,但无法为已在适用范围更广的配置中启用该功能的Google Cloud 服务停用数据访问审核日志。

  • 您可以为 Google Cloud服务的数据访问审核日志添加额外信息类型,但无法移除已在适用范围更广的配置中指定的信息类型。

  • 您可以将主账号添加到豁免列表,但无法从适用范围更广的配置中的豁免列表中移除主账号。

  • 对于 BigQuery Data Transfer Service,数据访问审核日志配置继承自您的默认审核日志配置。

Google Cloud 资源配置

您可以为 Google Cloud 项目、结算账号、文件夹和组织配置数据访问审核日志。如果Google Cloud 服务的配置跨层次结构,则生成的配置就是这些配置的并集。换句话说,在Google Cloud 项目级:

  • 您可以为 Google Cloud 服务启用日志,但无法为已在父级组织或文件夹中启用的 Google Cloud 服务停用日志。

  • 您可以启用各种信息,但无法停用已在父级组织或文件夹中启用的信息类型。

  • 您可以将主账号添加到豁免列表,但无法从父级组织或文件夹的豁免列表中将其移除。

  • 在父级组织或文件夹级,您可以为该组织或文件夹中的 Google Cloud 项目启用数据访问审核日志,即使在Google Cloud 项目中并未配置数据访问审核日志也可如此。

访问权限控制

Identity and Access Management 角色和权限管理对 Logging 数据的访问权限,包括查看和管理底层数据访问审核日志配置的 IAM 政策

如需查看或设置与数据访问配置关联的政策,您需要拥有在适当资源级层具有权限的角色。有关授予这些资源级角色的说明,请参阅管理对 Google Cloud 项目、文件夹和组织的访问权限

  • 如需设置 IAM 政策,您需要拥有具有 resourcemanager.RESOURCE_TYPE.setIamPolicy 权限的角色。

  • 如需查看 IAM 政策,您需要拥有具有 resourcemanager.RESOURCE_TYPE.getIamPolicy 权限的角色。

如需获得查看数据访问审核日志所需的权限和角色列表,请参阅使用 IAM 进行访问权限控制

使用 Google Cloud 控制台配置数据访问审核日志

本部分介绍了如何使用 Google Cloud 控制台配置数据访问审核日志。

您也可以使用 API 或 Google Cloud CLI 以编程方式执行这些任务;如需了解详情,请参阅使用 API 配置数据访问审核日志

如需在 Google Cloud 控制台中访问审核日志配置选项,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往审核日志页面:

    前往审核日志

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

  2. 选择现有的 Google Cloud 项目、文件夹或组织。

启用审核日志

如需启用数据访问审核日志,请执行以下操作:

  1. 数据访问审核日志配置表中,从服务列中选择一项或多项Google Cloud 服务。

  2. 日志类型标签页中,选择要为所选服务启用的数据访问审核日志类型。

  3. 点击保存

如果您已成功启用审核日志,该表中会包含一个 勾选图标。

在以下示例中,您可以看到对于 Access Approval 服务,启用了数据读取审核日志类型:

审核日志配置

您还可以为生成数据访问审核日志的所有 Google Cloud 服务启用审核日志。在数据访问审核日志配置表中,选择所有 Google Cloud 服务。

请注意,这种批量配置方法仅适用于可用于您的资源的 Google Cloud服务。如果添加了新的Google Cloud 服务,则该服务将继承您的默认审核配置

停用数据访问审核日志

如需停用数据访问审核日志,请执行以下操作:

  1. 数据访问审核日志配置表中,选择一项或多项Google Cloud 服务。

  2. 在信息面板的日志类型标签页中,选择要为所选服务停用的数据访问审核日志类型。

  3. 点击保存

如果您已成功停用数据访问审核日志,该表中会用一条短划线表示。任何已启用的数据访问审核日志都会以 勾选图标表示。

设置豁免

您可以设置豁免,以便控制哪些主账号可以为特定服务生成数据访问审核日志。在您添加豁免主账号后,系统就不会为相应主账号创建所选日志类型的审核日志。

如需设置豁免,请执行以下操作:

  1. 数据访问审核日志配置表中,从服务列中选择一项Google Cloud 服务。

  2. 在信息面板中选择豁免的主账号标签页。

  3. 添加豁免主账号中,输入您要豁免的主账号,使其不会为所选服务生成数据访问审核日志。

    您可以根据需要多次点击添加豁免主账号按钮,以添加多个主账号。

    如需查看有效主账号(包括用户和群组)的列表,请参阅 Binding 类型参考文档

  4. 停用的日志类型中,选择您要停用的数据访问审核日志类型。

  5. 点击保存

如果您已成功向服务添加豁免主账号,则数据访问审核日志配置表中的豁免的主账号列下会使用一个数字进行指示。

如需从豁免列表中移除主账号,请执行以下操作:

  1. 数据访问审核日志配置表中,从服务列中选择一项Google Cloud 服务。

  2. 在信息面板中选择豁免的主账号标签页。

  3. 将鼠标指针悬停在某个主账号名称上,然后选择 删除

  4. 当主账号名称以带删除线的文本形式显示后,点击保存

如需修改豁免的主账号的信息,请执行以下操作:

  1. 数据访问审核日志配置表中,从服务列中选择一项Google Cloud 服务。

  2. 在信息面板中选择豁免的主账号标签页。

  3. 找到相应主账号,然后选择 展开

  4. 根据需要为该主账号选择或取消选择数据访问审核日志类型。

  5. 点击保存

设置默认配置

您可以设置一个配置,供 Google Cloud 项目、文件夹或组织中所有新的和现有 Google Cloud服务继承。如果新的 Google Cloud 服务成为可用状态,并且您组织中的主账号开始使用它,则系统会应用此默认配置:该服务将继承您已为其他Google Cloud 服务设置的审核日志记录政策,从而确保捕获数据访问审核日志。

如需设置或修改默认配置,请执行以下操作:

  1. 点击设置默认配置

  2. 在信息面板的日志类型标签页中,选择您要启用或停用的数据访问审核日志类型。

  3. 点击保存

  4. 在信息面板中选择豁免的主账号标签页。

  5. 添加豁免主账号中,输入您要豁免的主账号,使其不会为所选服务生成数据访问审核日志。

    您可以根据需要多次点击添加豁免主账号按钮,以添加多个主账号。

    如需查看有效主账号(包括用户和群组)的列表,请参阅 Binding 类型参考文档

  6. 停用的日志类型中,选择您要停用的数据访问审核日志类型。

  7. 点击保存

使用 API 配置数据访问审核日志

本部分介绍了如何使用 API 和 gcloud CLI 以编程方式配置数据访问审核日志。

其中许多任务也可以使用 Google Cloud 控制台执行;如需了解相关说明,请参阅本页面上的使用 Google Cloud 控制台配置数据访问审核日志

IAM 政策对象

如需使用 API 配置数据访问审核日志,您必须修改与 Google Cloud 项目、文件夹或组织关联的 IAM 政策。审核日志配置位于政策的 auditConfigs 部分:

"auditConfigs": [
  {
    object(AuditConfig)
  }
]

如需了解详情,请参阅 IAM 政策类型。

下面的部分更详细地介绍了 AuditConfig 对象。如需了解用于更改配置的 API 和 gcloud CLI 命令,请参阅标题为 getIamPolicysetIamPolicy 的部分。

AuditConfig 个对象

审核日志配置包含 AuditConfig 对象列表。每个对象针对一项服务配置日志,也可以针对所有服务建立范围更广的配置。每个对象均与如下内容类似:

{
  "service": SERVICE_NAME,
  "auditLogConfigs": [
    {
      "logType": "ADMIN_READ"
      "exemptedMembers": [ PRINCIPAL,]
    },
    {
      "logType": "DATA_READ"
      "exemptedMembers": [ PRINCIPAL,]
    },
    {
      "logType": "DATA_WRITE"
      "exemptedMembers": [ PRINCIPAL,]
    },
  ]
},

SERVICE_NAME 具有诸如 "appengine.googleapis.com" 之类的值,或者是特殊值 "allServices"。如果配置未提及特定服务,则范围更广的配置将用于该服务。如果没有配置,则不会为该服务启用数据访问审核日志。 如需查看服务名称列表,请参阅日志服务

AuditConfig 对象的 auditLogConfigs 部分是一个包含 0 到 3 个对象的列表,其中每个对象都用于配置一类审核日志信息。如果您忽略列表中的某一种类型,则不会为该服务启用该类型的日志信息。

PRINCIPAL 是不为其收集数据访问审核日志的用户。Binding 类型描述了不同种类的主账号(包括用户和群组),但并非所有这些主账号都可用于配置数据访问审核日志。

以下是 JSON 和 YAML 格式的审核配置示例。如果使用 Google Cloud CLI,则默认使用 YAML 格式。

JSON

"auditConfigs": [
  {
    "auditLogConfigs": [
      {
        "logType": "ADMIN_READ"
      },
      {
        "logType": "DATA_WRITE"
      },
      {
        "logType": "DATA_READ"
      }
    ],
    "service": "allServices"
  },
  {
    "auditLogConfigs": [
      {
        "exemptedMembers": [
          "[email protected]"
        ],
        "logType": "ADMIN_READ"
      }
    ],
    "service": "cloudsql.googleapis.com"
  }
],

YAML

auditConfigs:
- auditLogConfigs:
  - logType: ADMIN_READ
  - logType: DATA_WRITE
  - logType: DATA_READ
  service: allServices
- auditLogConfigs:
  - exemptedMembers:
    - [email protected]
    logType: ADMIN_READ
  service: cloudsql.googleapis.com

常见配置

以下是 Google Cloud 项目的一些常见审核日志配置。

启用所有数据访问审核日志

以下 auditConfigs 部分用于为所有服务和主账号启用数据访问审核日志:

JSON

"auditConfigs": [
      {
        "service": "allServices",
        "auditLogConfigs": [
          { "logType": "ADMIN_READ" },
          { "logType": "DATA_READ"  },
          { "logType": "DATA_WRITE" },
        ]
      },
    ]

YAML

auditConfigs:
- auditLogConfigs:
  - logType: ADMIN_READ
  - logType: DATA_WRITE
  - logType: DATA_READ
  service: allServices

启用一项服务和一种信息类型

以下配置用于为 Cloud SQL 启用 DATA_WRITE 数据访问审核日志:

JSON

"auditConfigs": [
  {
    "service": "cloudsql.googleapis.com",
    "auditLogConfigs": [
      { "logType": "DATA_WRITE" },
    ]
  },
]

YAML

auditConfigs:
- auditLogConfigs:
  - logType: DATA_WRITE
  service: cloudsql.googleapis.com

停用所有数据访问审核日志

如需停用Google Cloud 项目中的所有数据访问审核日志(BigQuery 除外),请将新 IAM 政策中的 auditConfigs: 部分留空:

JSON

"auditConfigs": [],

YAML

auditConfigs:

如果您从新政策中彻底移除 auditConfigs 部分,则 setIamPolicy 不会更改现有数据访问审核日志配置。 如需了解详情,请参阅标题为 setIamPolicy 更新掩码的部分。

BigQuery 数据访问审核日志无法停用。

getIamPolicy”和“setIamPolicy

您可以使用 Cloud Resource Manager API getIamPolicysetIamPolicy 方法来读取和写入 IAM 政策。我们提供多种特定方法供您选择:

  • Cloud Resource Manager API 提供以下方法:

    projects.getIamPolicy
    projects.setIamPolicy
    organizations.getIamPolicy
    organizations.setIamPolicy
    
  • Google Cloud CLI 提供以下 Resource Manager 命令:

    gcloud projects get-iam-policy
    gcloud projects set-iam-policy
    gcloud resource-manager folders get-iam-policy
    gcloud resource-manager folders set-iam-policy
    gcloud organizations get-iam-policy
    gcloud organizations set-iam-policy
    gcloud beta billing accounts get-iam-policy
    gcloud beta billing accounts set-iam-policy
    

无论您选择哪种方法,都请按以下三个步骤操作:

  1. 使用一种 getIamPolicy 方法来读取当前政策。将政策保存为临时文件。
  2. 修改临时文件中的政策。仅更改(或添加)auditConfigs 部分。
  3. 使用一种 setIamPolicy 方法将已修改的政策写入临时文件。

如果 Resource Manager 检测到在您执行第一步中的读取操作后其他人更改了政策,则 setIamPolicy 将会失败。如果发生这种情况,请重复上述三个步骤。

示例

以下各个示例演示了如何使用 gcloud 命令和 Cloud Resource Manager API 来配置项目的数据访问审核日志。

如需配置组织数据访问审核日志,请将命令和 API 方法的“项目”版本替换为“组织”版本。

gcloud

如需使用 gcloud projects 命令配置数据访问审核日志,请执行以下操作:

  1. 读取您项目的 IAM 政策,并将其存储在一个文件中:

    gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    

    下面显示了返回的政策。此政策没有 auditConfigs 部分:

    bindings:
    - members:
      - user:[email protected]
      role: roles/editor
    - members:
      - user:[email protected]
      role: roles/owner
    etag: BwVM-FDzeYM=
    version: 1
    
  2. /tmp/policy.yaml修改政策,仅添加或更改数据访问审核日志配置。

    以下是已修改政策的一个示例,其中启用了 Cloud SQL 数据写入数据访问审核日志:

    auditConfigs:
    - auditLogConfigs:
      - logType: DATA_WRITE
      service: cloudsql.googleapis.com
    bindings:
    - members:
      - user:[email protected]
      role: roles/editor
    - members:
      - user:[email protected]
      role: roles/owner
    etag: BwVM-FDzeYM=
    version: 1
    

    如上一个示例所示,政策开头添加了四行。

  3. 写入新的 IAM 政策:

    gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
    

    如果上述命令报告与其他更改发生冲突,请重复以上步骤(从第一步开始)。

JSON

如需以 JSON 格式(而不是 YAML)来处理 IAM 政策,请用以下 gcloud 命令替换示例中的相应内容:

gcloud projects get-iam-policy PROJECT_ID --format=json >/tmp/policy.json
gcloud projects set-iam-policy PROJECT_ID /tmp/policy.json

API

要使用 Cloud Resource Manager API 配置数据访问审核日志,请执行以下操作:

  1. 读取您项目的 IAM 政策,并为 getIamPolicy API 方法指定以下参数:

    • resourceprojects/PROJECT_ID
    • 请求正文:空

    该方法会返回当前政策对象:

    {
      "version": 1,
      "etag": "BwXqwxkr40M=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "user:[email protected]"
          ]
        }
      ]
    }
    

    上一个示例显示,项目的政策没有 auditConfigs 部分。

  2. 修改当前政策:

    • 更改或添加 auditConfigs 部分。

      如需停用数据访问审核日志,请为该部分提供一个空值:auditConfigs:[]

    • 保留 etag 的值。

    您还可以从新政策对象中移除所有其他信息,不过要注意在下一步中谨慎设置 updateMask。 以下是已修改的政策,其中启用了 Cloud SQL DATA_WRITE 审核日志:

    {
      "policy": {
        "auditConfigs": [
          {
            "auditLogConfigs": [
              {
                "logType": "DATA_WRITE"
              }
            ],
            "service": "cloudsql.googleapis.com"
          }
        ],
        "etag": "BwXqwxkr40M="
      },
      "updateMask": "auditConfigs,etag"
    }
    
  3. 使用 setIamPolicy API 方法写入新政策,并指定以下参数:

    • resourceprojects/PROJECT_ID
    • 请求正文:包含已修改的政策。

setIamPolicy 更新掩码

本部分介绍了 setIamPolicy 方法中的 updateMask 参数的重要性,还介绍了为何必须谨慎使用 gcloud CLI set-iam-policy 命令,以免对 Google Cloud 项目或组织造成意外损害。

setIamPolicy API 方法使用 updateMask 参数来控制要更新哪些政策字段。例如,如果掩码不包含 bindings,那么您就不会意外更改政策的该部分。另一方面,如果掩码包含 bindings,则该部分始终都会更新。如果您未为 bindings 添加更新的值,则该部分会从政策中完全移除。

gcloud projects set-iam-policy 命令(调用 setIamPolicy)不允许您指定 updateMask 参数。取而代之的是,该命令会按以下方式计算 updateMask 的值:

  • updateMask 始终包含字段 bindingsetag
  • 如果 set-iam-policy 中提供的政策对象包含其他任何顶级字段(例如 auditConfigs),则这些字段将添加到 updateMask 中。

由于存在上述规则,set-iam-policy 命令具有以下行为:

  • 如果您在新政策中省略了 auditConfigs 部分,则 auditConfigs 部分的先前值(如果有)不会更改,因为更新掩码中不包含此部分。这一行为无害,但可能会产生混淆。

  • 如果您在新政策对象中省略 bindings,则系统会从政策中移除 bindings 部分,因为更新掩码中存在此部分。这一行为危害性较大,而且可能导致所有主账号都无法访问您的 Google Cloud 项目。

  • 如果您在新政策对象中省略 etag,则系统可能会停用对政策并发更改的检查,而且可能导致您的更改意外覆盖其他人的更改。