本指南介绍了如何在项目或组织中启用和配置数据访问审核日志的各个方面。如需大致了解审核日志,请参阅 Cloud Audit Logs。
系统会为所有 Google Cloud 服务启用管理员活动审核日志,您无法对其进行配置。
配置概览
数据访问审核日志(BigQuery 除外)默认处于停用状态。您可以启用和配置数据访问审核日志的某些方面:
组织。您可以在组织中启用和配置数据访问审核日志,这适用于组织中所有现有的及新的项目和文件夹。
文件夹。您可以在文件夹中启用和配置数据访问审核日志,这适用于文件夹中所有现有的及新的项目,但您无法停用已在项目组织中启用的数据访问审核日志。
项目。您可以为单个项目配置数据访问审核日志,但您无法停用已在项目的组织或文件夹中启用的数据访问审核日志。
结算帐号。如需为结算帐号配置数据访问审核日志,请使用
gcloud
命令行工具。如需详细了解如何将gcloud
工具与数据访问审核日志和结算帐号配合使用,请参阅gcloud beta billing accounts set-iam-policy
命令参考文档。默认配置。您可以在组织、文件夹或项目中指定默认数据访问审核日志配置,该配置适用于将开始生成数据访问审核日志的未来 Google Cloud 服务。
服务。您可以指定要接收哪些服务的审核日志。例如,您可能想要接收来自 Compute Engine 的审核日志,但不想接收来自 Cloud SQL 的审核日志。如需查看可生成审核日志的 Google Cloud 服务的列表,请参阅具有审核日志的 Google 服务。
信息类型。您可以控制审核日志中的信息类型。数据访问审核日志信息分为三种:
管理员读取:用于记录读取元数据或配置信息的操作。
管理员活动审核日志用于记录元数据和配置信息的写入。这类日志无法停用。
数据读取:用于记录读取用户所提供数据的操作。
数据写入:用于记录写入用户所提供数据的操作。
例如,您可以仅记录数据写入操作,但记录来自 Cloud DNS 的所有这三种信息。
豁免用户。您可以豁免特定用户或群组,这样一来,系统就不会记录他们的数据访问。例如,您可以豁免内部测试帐号,让系统不再记录这些帐号的 Cloud Debugger 操作。
您可以通过 IAM 审核日志控制台或 API 来配置数据访问审核日志。以下部分对这些方法进行了说明。
服务专属配置
如果同时存在适合所有 Google Cloud 服务 (allServices
) 的配置和适合特定 Google Cloud 服务的配置,则最终的服务配置将是这两种配置的并集。换句话说:
您可以为特定 Google Cloud 服务启用数据访问审核日志,但无法为已在适用范围更广的配置中启用该功能的 Google Cloud 服务停用数据访问审核日志。
您可以为 Google Cloud 服务的数据访问审核日志添加额外信息类型,但无法移除已在适用范围更广的配置中指定的信息类型。
您可以将用户添加到豁免列表,但无法从适用范围更广的配置中的豁免列表中移除用户。
组织、文件夹和项目配置
您可以为组织、文件夹和项目配置数据访问审核日志。如果 Google Cloud 服务的配置跨层次结构,则最终的配置就是各层次结构配置的并集。换句话说,在项目级层:
您可以为 Google Cloud 服务启用日志,但无法为已在文件夹或组织中启用日志的 Google Cloud 服务停用日志。
您可以启用各种信息,但无法停用在组织或文件夹中启用的信息类型。
您可以将用户添加到豁免列表,但无法移除已列入组织或文件夹级层豁免列表中的用户。
而在组织或文件夹级层,您可以为组织或文件夹内的项目启用数据访问审核日志,即使在该项目中并未配置数据访问审核日志也可如此。
访问权限控制机制
您需要以下 Identity and Access Management 角色才能为您的 Google Cloud 资源配置数据访问审核日志:
- 项目级层:roles/owner
- 文件夹级层:roles/resourcemanager.folderAdmin
- 组织级层:roles/resourcemanager.organizationAdmin
使用 Cloud Console 配置数据访问审核日志
本部分介绍了如何使用 Cloud Console 来配置数据访问审核日志。
您也可以使用 API 或 gcloud
命令行工具以编程方式执行这些任务;如需了解详情,请参阅使用 API 配置数据访问审核日志。
如需在 Cloud Console 中访问审核日志配置选项,请按下列步骤操作:
在 Cloud Console 中,选择 IAM 和管理 > 审核日志:
在页面顶部选择一个现有的 Google Cloud 项目、文件夹或组织。
启用审核日志
如需启用数据访问审核日志,请按下列步骤操作:
在审核日志页面的主表中,从名称列中选择一项或多项 Google Cloud 服务。
在日志类型标签页中,选中您要启用的数据访问审核日志类型旁边的复选框,然后点击保存。
如果您已成功启用审核日志,表中会包含一个对勾标记。在以下示例中,您可以看到 Cloud Composer API 服务的管理员读取和数据读取审核日志已启用:
您还可以为生成数据访问审核日志的所有 Google Cloud 服务启用审核日志。在审核日志页面的主表中,选择所有 Google Cloud 服务。
请注意,这种批量配置方法仅适用于当前可用的 Google Cloud 服务。如果添加了新的 Google Cloud 服务,则该服务将沿用您的默认审核配置。
停用数据访问审核日志
如需停用数据访问审核日志,请按下列步骤操作:
在审核日志页面的主表中,选择一项或多项 Google Cloud 服务。
在日志类型标签页中,选择要停用的数据访问审核日志类型,然后点击保存。
如果您已成功停用数据访问审核日志,该表中会用一条灰色短划线表示。任何已启用的数据访问审核日志都会以绿色对勾标记表示。
设置用户豁免项
您可以设置豁免项,以便控制哪些用户可以生成审核日志。在您添加豁免用户后,系统就不会为该用户创建所选日志类型的审核日志。请注意,无论豁免状态如何,系统始终会生成管理员活动日志。
以下步骤演示了如何设置豁免项:
在审核日志配置页面的主表中,从名称列中选择一项或多项 Google Cloud 服务。
选择豁免用户标签页。在添加豁免用户中,输入要添加到所选服务豁免列表中的用户的电子邮件地址。您可以根据需要多次选择添加豁免用户按钮,以添加多个用户。
选中您要为该用户停用的数据访问审核日志类型所对应的复选框,然后点击保存。
如果您已成功向服务添加豁免用户,则该表中的豁免项数列下会显示一个数字。
如需从豁免列表中移除用户,请执行以下操作:
转到信息面板中的豁免用户标签。
将光标悬停在用户名上,然后选择显示的回收站图标。
用户名以带删除线的文本形式显示后,点击保存。
如需为豁免用户修改信息,请执行以下步骤:
转到信息面板中的豁免用户标签。
点击用户名右侧的展开箭头。
根据需要为该用户选择或取消选择数据访问审核日志类型,然后点击保存。
设置默认配置
您可以设置一个配置,供项目、文件夹或组织中所有新的和现有的 Google Cloud 服务沿用。如果您组织中的用户开始使用新的 Google Cloud 服务,则应用此默认配置:该服务将沿用您已为其他 Google Cloud 服务设置的审核日志记录政策,从而确保捕获数据访问审核日志。
点击页面顶部的设置默认配置 (Set Default Configuration)。
在日志类型标签页中,选中您要启用或停用的数据访问审核日志类型旁边的复选框,然后点击保存。
在豁免用户标签页中,写下您要添加到豁免列表的用户的电子邮件地址,然后点击保存。按照上述设置用户豁免项部分中的步骤操作。
使用 API 配置数据访问审核日志
本部分介绍了如何使用 API 和 gcloud
工具,通过编程的方式配置数据访问审核日志。
其中许多任务也可以使用 Cloud Console 执行;如需了解详情,请参阅使用 Cloud Console 配置数据访问审核日志。
IAM 政策对象
若要使用 API 配置数据访问审核日志,您必须修改与项目、文件夹或组织关联的 IAM 政策。审核日志配置位于政策的 auditConfigs
部分:
"auditConfigs": [
{
object(AuditConfig)
}
]
如需了解详情,请参阅 IAM 政策类型。
下面的部分更详细地介绍了 AuditConfig
对象。如需了解用于更改配置的 API 和 gcloud
工具命令,请参阅 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 格式的审核配置示例。YAML 格式是使用 gcloud
命令行工具时的默认格式。
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
您可以使用 Resource Manager API getIamPolicy 和 setIamPolicy 方法来读取和写入 IAM 政策。我们提供多种特定方法供您选择:
Resource Manager API 提供以下方法:
projects.getIamPolicy projects.setIamPolicy organizations.getIamPolicy organizations.setIamPolicy
gcloud
命令行工具包含以下 Resource Manager 命令:gcloud projects get-iam-policy gcloud projects 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
无论您选择哪种方法,都请按以下三个步骤操作:
- 使用一种
getIamPolicy
方法来读取当前政策。将政策保存为临时文件。 - 修改临时文件中的政策。仅更改(或添加)
auditConfigs
部分。 - 使用一种
setIamPolicy
方法将已修改的政策写入临时文件。
如果 Resource Manager 检测到在您执行第一步中的读取操作后其他人更改了政策,则 setIamPolicy
将会失败。如果发生这种情况,请重复上述三个步骤。
示例
以下示例演示了如何使用 gcloud
命令和 Resource Manager API 配置项目的数据访问审核日志。
如需配置组织数据访问审核日志,请将命令和 API 方法的“项目”版本替换为“组织”版本。
gcloud
如需使用 gcloud projects
命令配置数据访问审核日志,请执行以下操作:
读取您项目的 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
在
/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
写入新的 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
如需使用 Resource Manager API 配置数据访问审核日志,请执行以下操作:
读取您项目的 IAM 政策,并为 getIamPolicy API 方法指定以下参数:
- resource:
projects/PROJECT_ID
- 请求正文:空
该方法可返回当前政策对象,如下所示。此项目的政策还没有
auditConfigs
部分:{ "bindings": [ { "members": [ "user:colleague@example.com" ], "role": "roles/editor" }, { "members": [ "user:myself@example.com" ], "role": "roles/owner" } ], "etag": "BwUsv2gimRs=", "version": 1
}
- resource:
修改当前政策:
更改或添加
auditConfigs
部分。如需停用数据访问审核日志,请为该部分提供一个空值:
auditConfigs:[]
。保留
etag
的值。
您还可以从新政策对象中移除所有其他信息,不过要注意在下一步中谨慎设置
updateMask
。 以下是已修改的政策,其中启用了 Cloud SQL 数据写入审核日志:{ "auditConfigs": [ { "auditLogConfigs": [ { "logType": "DATA_WRITE" } ], "service": "cloudsql.googleapis.com" } ], "etag": "BwVM-FDzeYM=" }
使用 setIamPolicy API 方法写入新政策,并指定以下参数:
- resource:
projects/PROJECT_ID
- 请求正文:
- updateMask:
"auditConfigs,etag"
- policy:您已修改的政策对象
- updateMask:
- resource:
setIamPolicy 更新掩码
本部分介绍了 setIamPolicy
方法中的 updateMask
参数的重要性,还介绍了为何必须谨慎使用 gcloud
工具的 set-iam-policy
命令,以免对项目或组织造成意外损害。
setIamPolicy API method
使用 updateMask
参数来控制要更新哪些政策字段。例如,如果掩码不包含 bindings
,那么您就不会意外更改政策的该部分。另一方面,如果掩码包含 bindings
,则该部分始终都会更新。如果您未为 bindings
添加更新的值,则该部分会从政策中完全移除。
gcloud projects set-iam-policy
命令(调用 setIamPolicy
)不允许您指定 updateMask
参数。取而代之的是,该命令会按以下方式计算 updateMask
的值:
updateMask
始终包含字段bindings
和etag
。- 如果
set-iam-policy
中提供的政策对象包含其他任何顶级字段(例如auditConfigs
),则这些字段将添加到updateMask
中。
由于存在上述规则,set-iam-policy
命令具有以下行为:
如果您在新政策中省略了
auditConfigs
部分,则auditConfigs
部分的先前值(如果有)不会更改,因为更新掩码中不包含此部分。这一行为无害,但可能会产生混淆。如果您在新政策对象中省略
bindings
,则系统会从政策中移除bindings
部分,因为更新掩码中存在此部分。这一行为危害性较大,而且可能导致所有用户都无法访问您的项目。如果您在新政策对象中省略
etag
,则系统可能会停用对政策并发更改的检查,而且可能导致您的更改意外覆盖其他人的更改。