配置数据访问日志

本指南介绍了如何在项目或组织中启用和配置数据访问审核日志的各个方面。如需大致了解审核日志,请参阅 Cloud Audit Logging

系统会为所有 Google Cloud Platform 服务启用管理员活动审核日志,但这些日志无法配置。

配置概览

数据访问审核日志(BigQuery 除外)默认处于停用状态。您可以启用和配置数据访问审核日志的某些方面:

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

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

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

  • 默认配置。您可以在组织、文件夹或项目中指定默认数据访问审核日志配置,该配置适用于已开始生成数据访问审核日志的未来 GCP 服务。

  • 服务。您可以指定要接收哪些服务的审核日志。例如,您可能希望接收来自 Compute Engine 的审核日志,但不想接收来自 Cloud SQL 的审核日志。如需查看可生成审核日志的 GCP 服务的列表,请参阅具有审核日志的 Google 服务

  • 信息类型。您可以控制审核日志中的信息类型。数据访问审核日志信息分为三种:

    • ADMIN_READ:用于记录读取元数据或配置信息的操作。

      管理员活动审核日志用于记录元数据和配置信息的写入。它们无法停用。

    • DATA_READ:用于记录读取用户所提供数据的操作。

    • DATA_WRITE:用于记录写入用户所提供数据的操作。

    例如,您可以仅记录数据写入操作,但记录来自 Cloud DNS 的所有这三种信息。

  • 豁免用户。您可以豁免特定用户或群组,这样一来,系统就不会记录他们的数据访问。例如,您可以豁免内部测试帐号,以便系统不记录 Stackdriver Debugger 操作。

您可以通过 Logging 控制台或 API 来配置数据访问审核日志。这些方法将在以下各部分介绍。

服务专属配置

如果同时存在适合所有 GCP 服务 (allServices) 的配置和适合特定 GCP 服务的配置,则为服务生成的配置将是这两种配置的并集。换句话说:

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

  • 您可以向 GCP 服务的数据访问审核日志添加其他类型的信息,但无法移除已在范围更广的配置中指定的各类信息。

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

组织、文件夹和项目配置

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

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

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

  • 您可以将用户添加到豁免列表,但无法移除组织或文件夹的豁免列表中的用户。

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

访问控制

要在组织级层、文件夹级层和项目级层配置数据访问审核日志,您分别需要 roles/resourcemanager.organizationAdminroles/resourcemanager.folderAdminroles/owner 这三个 IAM 角色

通过 GCP Console 配置数据访问日志

本部分介绍了如何使用 GCP Console 来配置数据访问审核日志。

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

要在 GCP Console 中访问审核日志配置选项,请按下列步骤操作:

  1. GCP Console 中,从左上角菜单中选择 IAM 和管理 > 审核日志

    转到“审核日志”页面

  2. 在页面顶部选择一个现有的 GCP 项目、文件夹或组织。

启用审核日志

以下步骤演示了如何启用数据访问日志:

  1. 审核日志页面的主表中,通过选中名称列中服务名称左侧的复选框来选择一项或多项 GCP 服务。

  2. 在表右侧信息面板内的日志类型标签页中,选中要启用的数据访问审核日志类型旁边的复选框,然后点击保存

  3. 如果您已成功启用审核日志,该表中将包含对勾标记。在以下示例中,您可以看到 Cloud Composer API 服务的管理员读取数据读取审核日志已启用:

    审核日志配置

您还可以为生成数据访问审核日志的所有 GCP 服务启用审核日志,在审核日志页面的主表中,通过选中名称左侧的复选框来选择所有 GCP 服务。

请注意,这种“批量”配置方法仅适用于当前可用的 GCP 服务。如果添加了新的 GCP 服务,则该服务将沿用您的默认审核配置

停用审核日志

以下步骤演示了如何停用数据访问日志:

  1. 审核日志页面的主表中,通过选中名称列中服务名称左侧的复选框来选择一项或多项 GCP 服务。

  2. 在表右侧信息面板内的日志类型标签页中,选中要停用的数据访问审核日志类型旁边的复选框,然后点击保存

  3. 如果您已成功停用审核日志,该表将以灰色短划线表示。所有已启用的审核日志都会标有绿色对勾标记符号。

设置用户豁免项

您可以设置豁免项,以便控制哪些用户可以生成审核日志。如果添加豁免用户,系统就不会为该用户创建所选日志类型的审核日志。请注意,无论豁免状态如何,系统始终会生成管理员活动日志。

以下步骤演示了如何设置豁免项:

  1. 审核日志配置页面的主表中,通过选中名称列中服务名称左侧的复选框来选择一项或多项 GCP 服务。

  2. 在表右侧的信息面板中选择豁免用户标签页。在添加豁免用户下,写下您要添加到所选服务豁免列表的用户的电子邮件地址。您可以根据需要多次选择添加豁免用户按钮,以添加多个用户。

  3. 在电子邮件地址下,选中您要为相应用户停用的数据访问审核日志类型旁边的复选框,然后点击保存

  4. 如果您已成功向服务添加豁免用户,则该表中的豁免项数列下会显示一个数字。

要从豁免列表中移除用户,请执行以下操作:

  1. 转到信息面板中的豁免用户标签。

  2. 将鼠标指针悬停在用户名上,然后选择显示的回收站图标。

  3. 用户名以带删除线的文本形式显示后,点击保存

要为豁免用户修改信息,请执行以下步骤:

  1. 转到信息面板中的豁免用户标签。

  2. 点击用户名右侧的展开箭头。

  3. 根据需要为该用户选择或取消选择数据访问审核日志类型,然后点击保存

设置默认配置

您可以设置一个配置,供项目、文件夹或组织中所有新的和现有的 GCP 服务沿用。如果您组织中的用户开始使用新的 GCP 服务,则应用此默认配置:该服务将沿用您已为其他 GCP 服务设置的审核日志记录政策,从而确保捕获数据访问审核日志。

  1. 点击页面顶部的设置默认配置 (Set Default Configuration)。

  2. 日志类型标签页中,选中您要启用或停用的数据访问审核日志类型旁边的复选框,然后点击保存

  3. 豁免用户标签页中,写下您要添加到豁免列表的用户的电子邮件地址,然后点击保存。按照上述设置用户豁免项部分中的步骤操作。

通过 API 配置数据访问日志

本部分介绍了如何使用 API 和 Cloud SDK 命令行界面以编程方式配置数据访问审核日志。

许多此类任务也可以使用 GCP Console 来执行;如需了解详情,请参阅通过 GCP Console 配置数据访问日志

IAM 政策对象

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

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

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

以下各部分更详细地介绍了 AuditConfig 对象。如需了解用于更改配置的 API 和 Cloud SDK 命令,请参阅 getIamPolicy 和 setIamPolicy

AuditConfig 对象

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

{
  "service": [SERVICE],
  "auditLogConfigs": [
    {
      "logType": "ADMIN_READ"
      "exemptedMembers": [ [MEMBER],]
    },
    {
      "logType": "DATA_READ"
      "exemptedMembers": [ [MEMBER],]
    },
    {
      "logType": "DATA_WRITE"
      "exemptedMembers": [ [MEMBER],]
    },
  ]
},

[SERVICE] 是服务名称(例如 "appengine.googleapis.com"),或者是特殊值 "allServices"。如果配置未提及特定服务,则范围更广的配置将用于该服务。如果没有配置,则系统不会为该服务启用数据访问日志。如需了解服务名称列表,请参阅日志服务

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

[MEMBER] 表示不为哪些用户收集数据访问审核日志。您可以指定单个用户、群组或服务帐号。绑定类型介绍了不同类型的成员,但并非所有类型都可用于配置数据访问审核日志。

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

JSON

"auditConfigs": [
  {
    "auditLogConfigs": [
      {
        "logType": "ADMIN_READ"
      },
      {
        "logType": "DATA_WRITE"
      },
      {
        "logType": "DATA_READ"
      }
    ],
    "service": "allServices"
  },
  {
    "auditLogConfigs": [
      {
        "exemptedMembers": [
          "499862534253-compute@developer.gserviceaccount.com"
        ],
        "logType": "ADMIN_READ"
      }
    ],
    "service": "cloudsql.googleapis.com"
  }
],

YAML

auditConfigs:

  • auditLogConfigs:
    • logType: ADMIN_READ
    • logType: DATA_WRITE
    • logType: DATA_READ service: allServices
  • auditLogConfigs:
    • exemptedMembers:
    • 499862534253-compute@developer.gserviceaccount.com logType: ADMIN_READ service: cloudsql.googleapis.com

常见配置

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

这些配置未考虑项目的组织或文件夹中的任何审核日志配置。如需了解详情,请参阅组织和项目配置

启用所有访问日志

以下 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 启用数据访问审核日志。日志仅记录用户定义的数据的写入:

JSON

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

YAML

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

停用所有日志

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

JSON

"auditConfigs": [],

YAML

auditConfigs:

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

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

getIamPolicy 和 setIamPolicy

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

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

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

    gcloud projects get-iam-policy
    gcloud projects set-iam-policy
    gcloud organizations get-iam-policy
    gcloud organizations set-iam-policy
    

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

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

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

示例

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

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

Cloud SDK

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

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

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

    返回的政策如下所示。此政策还没有 auditConfigs 部分:

    bindings:
    - members:
      - user:colleague@example.com
      role: roles/editor
    - members:
      - user:myself@example.com
      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:colleague@example.com
      role: roles/editor
    - members:
      - user:myself@example.com
      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]
    • 请求正文:空

    该方法可返回当前政策对象,如下所示。此项目的政策还没有 auditConfigs 部分:

    {
      "bindings": [
      {
        "members": [
          "user:colleague@example.com"
        ],
        "role": "roles/editor"
      },
      {
        "members": [
          "user:myself@example.com"
        ],
        "role": "roles/owner"
      }
    ],
    "etag": "BwUsv2gimRs=",
    "version": 1
    

    }

  2. 修改当前政策:

    • 更改或添加 auditConfigs 部分。

      如果要停用数据访问审核日志,请在该部分中包含空值:auditConfigs:[]

    • 保留 etag 的值。

    如果需要,您可以从新政策对象中移除所有其他信息,只要在下一步中谨慎设置 updateMask 即可。以下是已修改的政策,其中启用了 Cloud SQL 数据写入审核日志:

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

    • resourceprojects/[PROJECT_ID]
    • 请求正文
      • updateMask"auditConfigs,etag"
      • policy:您已修改的政策对象

setIamPolicy 更新掩码

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

setIamPolicy API 方法使用 updateMask 参数来控制将更新哪些政策字段。例如,如果掩码不包含 bindings,则您不会在不经意间更改该政策部分。另一方面,如果掩码包含 bindings,则该部分始终都会更新。如果您未添加 bindings 的更新值,则系统会从政策中彻底移除该部分。

您无法通过调用 setIamPolicygcloud projects set-iam-policy 命令来指定 updateMask 参数。相反,该命令会按以下方式计算 updateMask 的值:

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

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

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

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

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

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Stackdriver Logging
需要帮助?请访问我们的支持页面