Cloud Logging 导出场景:合规要求

此场景说明了如何将日志从 Cloud Logging 导出到 Cloud Storage,以满足组织的合规性要求。在创建和保留日志文件时,这尤为重要。例如,在 Sarbanes Oxley (SOX) 合规性很重要的情况下,您可能希望维护用户、数据库和控制台活动的日志。Cloud Logging 为基本级维护日志 7 天,为付费级维护日志 30 天,但 Cloud Audit Logs 维护的日志除外,其基本级和付费级均会维护日志 400 天。

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

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

此场景是导出 Cloud Logging 设计模式的一部分。

设置日志导出

下图显示了启用日志导出至 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

gcloud 命令行工具中,使用 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. 在 Cloud Console 中,打开 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 日志导出的权限。

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

角色:Storage Admin

  • 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。

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

使用导出的日志

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

示例文件夹结构。

每个日志文件都包含遵循 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 帐号访问权限。

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

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

后续步骤