9.4 审计日志 (Audit Logging)


文档摘要

9.4 审计日志 (Audit Logging) Elasticsearch 安全领域:深入剖析审计日志 (Audit Logging) 在现代数据驱动的世界中,安全性至关重要。对于像 Elasticsearch 这样处理敏感数据的搜索引擎和分析引擎来说,安全性更是重中之重。Elasticsearch 提供了强大的安全功能,其中审计日志 (Audit Logging) 是一个关键组成部分,它能够帮助我们追踪和记录集群内的安全相关事件,从而实现安全监控、合规性要求以及问题排查。 本文将深入探讨 Elasticsearch 审计日志,重点介绍其配置、实践应用以及内容详解,帮助您充分利用审计日志来增强 Elasticsearch 集群的安全性。 审计日志的重要性与概述 1.1 什么是审计日志?

9.4 审计日志 (Audit Logging)

Elasticsearch 安全领域:深入剖析审计日志 (Audit Logging)

在现代数据驱动的世界中,安全性至关重要。对于像 Elasticsearch 这样处理敏感数据的搜索引擎和分析引擎来说,安全性更是重中之重。Elasticsearch 提供了强大的安全功能,其中审计日志 (Audit Logging) 是一个关键组成部分,它能够帮助我们追踪和记录集群内的安全相关事件,从而实现安全监控、合规性要求以及问题排查。

本文将深入探讨 Elasticsearch 审计日志,重点介绍其配置、实践应用以及内容详解,帮助您充分利用审计日志来增强 Elasticsearch 集群的安全性。

1. 审计日志的重要性与概述

1.1 什么是审计日志?

审计日志,顾名思义,是对系统操作行为进行记录的日志。在 Elasticsearch 的语境下,审计日志专注于记录集群中与安全相关的事件,例如:

  • 身份验证 (Authentication) 事件: 用户登录成功、登录失败等。

  • 授权 (Authorization) 事件: 用户尝试访问资源时被允许或拒绝。

  • 索引事件: 索引的创建、删除、更新映射等。

  • 集群事件: 集群状态变更、节点加入或离开集群等。

  • REST 请求事件: 用户发起的 REST API 请求的详细信息。

1.2 审计日志的价值

审计日志在 Elasticsearch 安全体系中扮演着至关重要的角色,它具有以下核心价值:

  • 安全监控与威胁检测: 通过分析审计日志,可以及时发现异常行为,例如未经授权的访问尝试、潜在的攻击行为等,从而实现主动安全监控和威胁检测。

  • 合规性要求: 许多行业和法规 (如 GDPR, HIPAA, PCI DSS) 都要求对敏感数据进行审计跟踪。审计日志可以帮助组织满足这些合规性要求,提供操作记录和责任追溯。

  • 问题排查与故障分析: 当出现安全事件或系统异常时,审计日志可以提供宝贵的线索,帮助安全团队和运维人员快速定位问题根源,进行故障分析和问题排查。

  • 安全策略优化: 通过分析审计日志中记录的访问模式和安全事件,可以评估现有安全策略的有效性,并根据实际情况进行优化调整,提升整体安全防护水平。

1.3 Elasticsearch 审计日志的核心组件

Elasticsearch 的审计日志功能主要由以下几个核心组件组成:

  • 审计事件生成器 (Audit Event Generators): 负责在集群内部发生安全相关事件时生成审计事件。

  • 审计事件过滤器 (Audit Event Filters): 允许用户配置过滤器,选择需要记录的审计事件类型,减少日志量,提高效率。

  • 审计事件输出 (Audit Event Outputs): 负责将生成的审计事件输出到不同的目标,例如日志文件、Elasticsearch 索引、Webhook 等。

2. 启用与配置审计日志

2.1 启用审计日志功能

Elasticsearch 审计日志功能默认情况下是禁用的,需要在 elasticsearch.yml 配置文件中显式启用。

打开每个 Elasticsearch 节点的 elasticsearch.yml 文件,添加以下配置:

xpack.security.audit.enabled: true

重启 Elasticsearch 集群中的所有节点,使配置生效。

2.2 配置审计日志输出

启用审计日志后,我们需要配置审计事件的输出目标。Elasticsearch 提供了多种输出选项,最常用的包括:

  • logfile 输出: 将审计事件写入到本地日志文件。

  • index 输出: 将审计事件写入到 Elasticsearch 集群的索引中。

  • webhook 输出: 将审计事件发送到外部 Webhook 端点。

2.2.1 logfile 输出配置

logfile 输出是最常用的审计日志输出方式,配置简单,易于集成到现有的日志管理系统。

elasticsearch.yml 中配置 logfile 输出:

xpack.security.audit.outputs: [logfile] xpack.security.audit.logfile.path: audit.log # 审计日志文件路径,默认为 <data_path>/audit/audit.log xpack.security.audit.logfile.rotation.interval: daily # 日志轮转间隔,可选 hourly, daily, weekly, monthly xpack.security.audit.logfile.rotation.size: 100mb # 单个日志文件最大大小 xpack.security.audit.logfile.rotation.count: 7 # 保留的日志文件数量
  • xpack.security.audit.outputs: [logfile] 指定使用 logfile 输出。

  • xpack.security.audit.logfile.path 定义审计日志文件的路径。可以使用绝对路径或相对路径(相对于 Elasticsearch 数据目录)。

  • xpack.security.audit.logfile.rotation.* 配置日志轮转策略,可以根据时间间隔或文件大小进行轮转,并设置保留的日志文件数量,防止磁盘空间被快速耗尽。

2.2.2 index 输出配置

index 输出将审计事件直接写入到 Elasticsearch 集群的索引中,方便使用 Elasticsearch 的搜索和分析能力来处理审计数据。

elasticsearch.yml 中配置 index 输出:

xpack.security.audit.outputs: [index] xpack.security.audit.index.rollover.schedule: daily # 索引滚动更新计划,可选 hourly, daily, weekly, monthly xpack.security.audit.index.number_of_shards: 1 # 索引分片数 xpack.security.audit.index.number_of_replicas: 1 # 索引副本数
  • xpack.security.audit.outputs: [index] 指定使用 index 输出。

  • xpack.security.audit.index.rollover.schedule 配置索引滚动更新计划,例如每天创建一个新的审计索引。

  • xpack.security.audit.index.number_of_shardsxpack.security.audit.index.number_of_replicas 配置审计索引的分片和副本数,根据集群规模和数据量进行调整。

2.2.3 webhook 输出配置

webhook 输出允许将审计事件发送到外部 Webhook 端点,方便与第三方安全信息和事件管理 (SIEM) 系统集成。

elasticsearch.yml 中配置 webhook 输出:

xpack.security.audit.outputs: [webhook] xpack.security.audit.webhook.host: "https://your-siem-endpoint.com" # Webhook 端点 URL xpack.security.audit.webhook.port: 443 # Webhook 端点端口 xpack.security.audit.webhook.path: "/audit-events" # Webhook 端点路径 xpack.security.audit.webhook.ssl.verification_mode: full # SSL 验证模式,可选 full, certificate, none xpack.security.audit.webhook.headers: # 自定义 HTTP 请求头 Authorization: "Bearer your-api-token"
  • xpack.security.audit.outputs: [webhook] 指定使用 webhook 输出。

  • xpack.security.audit.webhook.host, xpack.security.audit.webhook.port, xpack.security.audit.webhook.path 配置 Webhook 端点的 URL、端口和路径。

  • xpack.security.audit.webhook.ssl.verification_mode 配置 SSL 验证模式,根据 Webhook 端点是否使用 HTTPS 以及证书配置进行选择。

  • xpack.security.audit.webhook.headers 可以添加自定义 HTTP 请求头,例如身份验证信息。

2.3 配置审计事件类别

默认情况下,Elasticsearch 审计日志会记录所有类别的安全事件。为了减少日志量,提高效率,可以根据实际需求配置需要记录的审计事件类别。

elasticsearch.yml 中配置审计事件类别:

xpack.security.audit.logfile.events.include: [authentication_success, access_denied, index_create] # 包含的事件类别 xpack.security.audit.logfile.events.exclude: [anonymous_access_denied] # 排除的事件类别
  • xpack.security.audit.logfile.events.include 指定需要包含的审计事件类别,只记录列表中指定的事件。

  • xpack.security.audit.logfile.events.exclude 指定需要排除的审计事件类别,记录所有事件,但排除列表中指定的事件。

常用的审计事件类别包括:

  • anonymous_access_denied

  • authentication_failed

  • authentication_success

  • access_denied

  • access_granted

  • connection_denied

  • connection_granted

  • index_create

  • index_delete

  • index_update

  • index_mapping_update

  • cluster_setting_update

  • cluster_state_update

  • rest_request

3. 审计日志内容详解

Elasticsearch 审计日志采用 JSON 格式,每个审计事件都包含丰富的元数据信息,帮助我们全面了解事件的上下文。

3.1 审计日志通用字段

所有审计事件都包含以下通用字段:

  • timestamp: 事件发生的时间戳 (UTC 时间)。

  • event.type: 事件类型,例如 authentication_success, access_denied, index_create 等。

  • node.id: 生成审计事件的 Elasticsearch 节点 ID。

  • node.name: 生成审计事件的 Elasticsearch 节点名称。

  • origin.type: 事件的来源类型,例如 rest, transport, internal

  • origin.address: 事件的来源地址,例如客户端 IP 地址。

  • principal: 执行操作的主体信息,通常是用户名或角色名。

  • request.id: 请求 ID,用于关联同一请求的不同审计事件。

3.2 常见审计事件类型及示例

3.2.1 authentication_success 事件

记录用户身份验证成功的事件。

{ "timestamp": "2024-01-01T10:00:00.000Z", "event": { "type": "authentication_success", "category": "authentication", "outcome": "granted" }, "node": { "id": "node-1", "name": "elasticsearch-node-1" }, "origin": { "type": "rest", "address": "192.168.1.100" }, "principal": "user1", "realm": { "type": "native", "name": "default_native" }, "request": { "id": "request-123" } }
  • event.type: authentication_success 表示身份验证成功事件。

  • principal: user1 表示成功登录的用户名为 user1

  • realm.type: native 表示用户通过 Native Realm 进行身份验证。

3.2.2 access_denied 事件

记录用户访问资源被拒绝的事件。

{ "timestamp": "2024-01-01T10:01:00.000Z", "event": { "type": "access_denied", "category": "access_control", "outcome": "denied" }, "node": { "id": "node-1", "name": "elasticsearch-node-1" }, "origin": { "type": "rest", "address": "192.168.1.100" }, "principal": "user1", "request": { "id": "request-456", "type": "indices:data/read/search", "indices": ["index-test"] }, "privilege": "read", "resource": { "type": "index", "names": ["index-test"] } }
  • event.type: access_denied 表示访问被拒绝事件。

  • principal: user1 表示被拒绝访问的用户名为 user1

  • request.type: indices:data/read/search 表示用户尝试执行搜索操作。

  • resource.names: ["index-test"] 表示用户尝试访问的索引为 index-test

  • privilege: read 表示用户尝试获取的权限为 read (读取权限)。

3.2.3 index_create 事件

记录索引创建事件。

{ "timestamp": "2024-01-01T10:02:00.000Z", "event": { "type": "index_create", "category": "index", "outcome": "granted" }, "node": { "id": "node-1", "name": "elasticsearch-node-1" }, "origin": { "type": "rest", "address": "192.168.1.100" }, "principal": "admin", "request": { "id": "request-789", "index": "new-index" }, "indices": ["new-index"] }
  • event.type: index_create 表示索引创建事件。

  • principal: admin 表示执行索引创建操作的用户名为 admin

  • request.index: "new-index" 表示创建的索引名称为 new-index

4. 审计日志实践应用

4.1 日志分析与监控

对于 logfile 输出的审计日志,可以使用各种日志分析工具 (例如 grep, awk, sed, Logstash, Filebeat) 进行分析和监控。

示例:使用 grep 查找特定用户的登录失败事件

假设审计日志文件路径为 audit.log,要查找用户 user1 的登录失败事件,可以使用以下命令:

grep '"event.type": "authentication_failed"' audit.log | grep '"principal": "user1"'

示例:使用 Filebeat 将审计日志导入 Elasticsearch

Filebeat 可以轻松地将 logfile 输出的审计日志导入到 Elasticsearch 集群中,方便进行集中管理和分析。

Filebeat 配置文件示例 (filebeat.yml):

filebeat.inputs: - type: log enabled: true paths: - /path/to/elasticsearch/data/audit/audit.log # 审计日志文件路径 output.elasticsearch: hosts: ["http://localhost:9200"] # Elasticsearch 集群地址 index: "audit-logs-%{+yyyy.MM.dd}" # 索引名称格式

4.2 Kibana 可视化

对于 index 输出的审计日志,可以直接使用 Kibana 进行可视化分析,创建仪表盘 (Dashboard) 监控安全事件,例如:

  • 登录失败次数统计: 监控登录失败事件的数量,及时发现暴力破解尝试。

  • 访问拒绝次数统计: 监控访问拒绝事件的数量,分析权限配置是否合理。

  • 索引变更事件统计: 监控索引创建、删除、更新等事件,确保索引操作的合规性。

  • 用户行为分析: 分析用户的访问模式和操作行为,发现异常行为。

示例 Kibana 仪表盘 (Graph TD 图):

4.3 安全告警与事件响应

基于审计日志,可以配置安全告警规则,例如:

  • 当登录失败次数超过阈值时,触发告警。

  • 当出现异常的索引变更操作时,触发告警。

  • 当检测到潜在的攻击行为时,触发告警。

可以使用 Elasticsearch 的 Watcher 功能或者第三方 SIEM 系统来实现安全告警。一旦触发告警,安全团队可以及时响应,进行事件调查和处理。

5. 审计日志最佳实践

  • 选择合适的审计事件类别: 根据实际需求选择需要审计的事件类别,避免记录过多的冗余信息,影响性能和存储空间。

  • 合理配置审计日志输出: 根据日志分析和监控需求选择合适的输出方式,例如 logfile 适合本地分析,index 适合集中管理,webhook 适合集成 SIEM 系统。

  • 定期轮转和归档审计日志: 定期轮转审计日志文件或索引,防止日志文件过大,影响系统性能。同时,定期归档历史审计日志,满足长期存储和合规性要求。

  • 保护审计日志的安全性: 审计日志包含敏感的安全信息,需要采取措施保护审计日志的安全性,例如限制访问权限,加密存储等。

  • 持续监控和分析审计日志: 定期监控和分析审计日志,及时发现异常行为和安全事件,并根据分析结果优化安全策略。

6. 总结

Elasticsearch 审计日志是保障集群安全性的重要组成部分。通过合理配置和有效利用审计日志,可以实现安全监控、合规性要求以及问题排查。本文详细介绍了 Elasticsearch 审计日志的配置、内容详解以及实践应用,希望能够帮助您更好地理解和使用 Elasticsearch 审计日志功能,提升集群的整体安全防护水平。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U