Cloud Logging 导出场景:合规要求

Last reviewed 2022-10-26 UTC

此场景说明了如何将日志从 Cloud Logging 导出到 Cloud Storage,以满足组织的合规性要求。在创建和保留日志文件时,这尤为重要。例如,在 Sarbanes Oxley (SOX) 合规性很重要的情况下,您可能希望维护用户、数据库和控制台活动的日志。如需详细了解默认和可配置的日志保留期限,请参阅 Cloud Logging 配额和限制

在此场景中,导出的日志将提交到您配置的 Cloud Storage 存储桶。您可通过授予权限以酌情限制对日志的访问。为了降低长期存储费用,您可以使用 Cloud Storage 中的对象生命周期管理功能将日志移动到 Nearline 或 Coldline 存储类别,并在需要的保留期后将其删除。

此场景假定有一个在具有虚拟机 (VM)、数据库和支持存储系统的 Google Cloud 上运行的常见 n 级网络架构。对于此环境,将导出包括所有审核日志、与虚拟机相关的日志、存储日志和数据库日志等日志类型。您可以通过调整示例中的日志过滤条件来更改导出的日志类型。

设置日志导出

下图显示了启用日志导出至 Cloud Storage 的步骤。

启用日志支持。

在 Cloud Storage 中设置日志导出存储桶

按照说明设置将托管导出日志的 Cloud Storage 存储桶。对于默认存储类别,请选择 Regional,除非您需要使用 Multi-Regional、Nearline 或 Coldline 存储类别。

为 Cloud Storage 存储桶配置对象生命周期管理

此场景假定所有日志均要求保留 7 年。为了最大限度地降低存储费用,您可以在 Cloud Storage 中添加对象生命周期规则,以便在给定天数后将日志移动到 Nearline 或 Coldline 存储,然后在不再需要保留日志时删除日志。

最佳做法:将日志移动到 Nearline 或 Coldline,然后删除,这有助于降低维护日志的持续运营费用。

您可以按照说明创建生命周期规则。 以下屏幕截图描述了一组级联规则,根据这些规则,系统将在 60 天后把存储类别更改为 Nearline,并在 120 天后更改为 Coldline,然后在 2555 天(约 7 年)后删除日志。

级联规则。

打开所有服务的审核日志

默认情况下,系统禁用数据访问的审核日志(BigQuery 除外)。如需启用所有审核日志,请按照 Identity and Access Management (IAM) 政策更新说明使用审核政策文档中列出的配置进行操作。步骤包括:

  • 将当前的 IAM 政策下载为文件。
  • 将审核日志政策 JSON 或 YAML 对象添加到当前的政策文件。
  • 使用更改后的政策文件更新 Google Cloud 项目。

以下是一个示例 JSON 对象,它启用了全部服务的全部审核日志。

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

配置日志导出

设置集合导出或日志导出后,需要优化日志过滤条件以导出审核日志、与虚拟机相关的日志、存储日志和数据库日志。以下日志过滤条件涵盖了管理员活动和数据访问审核日志以及特定资源类型的日志。

logName:"/logs/cloudaudit.googleapis.com" OR
resource.type:gce OR
resource.type=gcs_bucket OR
resource.type=cloudsql_database OR
resource.type=bigquery_resource

在 Google Cloud CLI 中,使用 gcloud logging sinks create 命令或 organizations.sinks.create API 调用创建具有适当过滤条件的接收器。以下 gcloud 命令示例会为组织创建一个名为 gcp_logging_sink_gcs 的接收器。该接收器包含了所有子项目,并指定了过滤条件以选择特定的审核日志。

gcloud logging sinks create gcp_logging_sink_gcs \
    storage.googleapis.com/gcp-logging-export-000100011000 \
    --log-filter='logName: "/logs/cloudaudit.googleapis.com" OR \
    resource.type:\"gce\" OR \
    resource.type=\"gcs_bucket\" OR   \
    resource.type=\"cloudsql_database\" OR  \
    resource.type=\"bigquery_resource\"' \
    --include-children   \
    --organization=324989855333

输出的结果应类似于以下内容:

Created [https://logging.googleapis.com/v2/organizations/324989855333/sinks/gcp_logging_sink_gcs].
Please remember to grant `serviceAccount:gcp-logging-sink-gcs@logging-o324989855333.iam.gserviceaccount.com` full-control access to the bucket.
More information about sinks can be found at /logging/docs/export/configure_export

从 API 调用返回的 serviceAccount 条目包含身份 gcp-logging-sink-gcs@logging-o324989855333.iam.gserviceaccount.com。该身份表示为导出创建的 Google Cloud 服务账号。在您授予此身份对目标的写入访问权限之前,从此接收器导出日志条目的操作将会失败。如需了解详情,请参阅下一部分或授予资源访问权限文档。

为 Cloud Storage 存储桶设置 IAM 政策权限

通过将服务账号 gcp-logging-sink-gcs@logging-o324989855333.iam.gserviceaccount.com 添加到具有 Storage Object Creator 权限的 gcp-logging-export-000100011000 存储桶,即会为该服务账号授予写入该存储桶的权限。 在您添加这些权限之前,接收器导出将失败。

如需向 gcp-logging-export 存储分区添加权限,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,打开 Storage 浏览器:

    转到 STORAGE 浏览器

  2. 选择 gcp-logging-export 存储桶。

  3. 点击显示信息面板,然后选择 Storage Object Creator 权限。

    IAM 政策权限 - Storage Object Creator。

使用上述过滤条件创建日志导出后,日志文件将开始填充已配置项目中的 Cloud Storage 存储桶。

最佳做法:您可以根据需要实施具有最低权限的政策。您可以根据特定的 Google Cloud 用户账号、Google 群组或 Google Cloud 服务账号配置存储桶权限。使用 IAM 权限授予对 Cloud Storage 存储桶的访问权限以及对存储桶对象的批量访问权限。

对一组示例权限来说,您可以执行以下操作:

  • 从 Cloud Storage 存储桶权限中移除所有不必要的用户。
  • 为 Cloud Storage 管理员添加完全控制权。
  • 为导出用户授予日志导出文件的写入权限。
  • 授予其他个人用户查看 Google Cloud 日志导出的权限。

您可以直接在 Google Cloud 控制台中、通过 gsutil 命令行工具或通过 IAM API 更新存储桶的 IAM 权限。以下示例展示了与 Google Cloud 控制台中的 Cloud Storage 存储桶相关联的一组示例权限和屏幕截图。

角色:存储管理员

  • IAM 描述:对 Cloud Storage 资源的完全控制权
  • 用法:可使用此角色授予管理员用户访问 Cloud Storage 资源的权限,而无需授予其修改 Cloud Storage 中存储内容的权限。
  • 示例账号:

    storage-admin@example.com

    角色:Storage Admin。

角色:Storage Object Admin

  • IAM 描述:对 Cloud Storage 对象的完全控制权
  • 用法:可使用此角色授予管理员用户对 Cloud Storage 文件对象的完全权限,而无需授予其修改 Cloud Storage 资源配置的权限。
  • 示例账号:

    storage-object-admin@example.com: user1@example.com, user2@example.com

    角色:Storage Object Admin。

角色:Storage Object Viewer

  • IAM 描述:对 Cloud Storage 对象的读访问权限
  • 用法:使用此角色向用户授予对 Google Cloud 日志的只读权限。
  • 示例账号:

    storage-viewer@example.com: user3@example.com

    角色:Storage Object Viewer。

最佳做法:如果您使用 Google Workspace 或消费者 Google 群组,则可以添加一个具有 Storage Object Viewer 权限的 Google 群组,如 gcp-logging-export-viewers@example.com。然后,您可以在这个 gcp-logging-export-viewers@example.com 群组中添加或移除用户,而无需在用户查看权限更改时修改 Cloud Storage 存储桶权限。

使用导出的日志

使用上面的过滤条件创建日志导出后,日志文件开始填充已配置项目中的 Cloud Storage 存储桶。 每个日志将在存储分区中创建一个单独的文件夹,该文件夹根据日期逐级分层。您可以通过 Google Cloud 控制台、gsutil 命令行工具或 IAM API 访问日志。以下屏幕截图展示了 Google Cloud 控制台中的示例文件夹结构。

示例文件夹结构。

每个日志文件都包含遵循 textPayloadprotoPayloadjsonPayload 日志条目格式的 JSON 数据。随着时间的推移,Cloud Storage 存储桶中的日志文件受到 Cloud Storage 生命周期过程的影响,根据您的配置,该过程首先将日志移至 Nearline 存储空间,然后将日志移至 Coldline 存储空间,最后删除日志。

授予外部访问权限

您可能希望授予特定用户访问导出日志的权限,这些用户包括安全分析师、您的开发运营团队和审核人员。

日志位置策略

有几种方法可以授予对 Cloud Storage 中日志的访问权限。

  • 创建要共享的日志的副本。

    以手动或编程方式创建单个或一组日志文件的副本,并将副本放在单独的 Cloud Storage 存储桶中。然后视情况使用单独的存储桶权限与特定用户共享日志。

    优点:可以将公开的数据量限制为仅复制的数据。

    缺点:必须创建、共享和管理单独的数据集和权限,这可能导致费用变高。

  • 授予所有日志的只读访问权限

    以手动或以编程方式设置 Cloud Storage 日志导出存储区的查看者权限,该权限允许访问所有导出日志。

    优点:可以轻松授予权限。

    缺点:必须授予所有日志而非特定日志文件的访问权限。

用户访问控制策略

您可以使用 Cloud Storage 存储桶权限与特定 Google 账号或 Google 群组共享日志导出的 Cloud Storage 存储桶。

  • 使用 Google 群组。

    创建一个对日志记录导出 Cloud Storage 存储桶具有只读权限的 Google 群组,比如 auditors@example.com。然后,您可以通过在 Google 群组中添加或移除审核人员来管理 Google 账号列表。

    优点:通过群组可以轻松管理权限,有明确的用户访问目的。

    缺点:如果不查看群组的成员资格,则无法确定谁有权访问。

  • 使用个人 Google 账号。

    为每个需要的用户授予对日志导出 Cloud Storage 存储桶的个人 Google 账号访问权限。

    优点:可以以手动或编程方式轻松添加用户。

    缺点:无法将审核用户和其他查看者区分开来。

后续步骤