审计日志
审计日志让您可以跟踪对 OpenSearch 集群的访问,对于合规性目的或在安全漏洞发生后非常有用。您可以配置要记录的类别、日志消息的详细级别以及日志存储位置。
审计日志默认是禁用的。要启用审计日志,请
-
在每个节点的
opensearch.yml
中添加以下行plugins.security.audit.type: internal_opensearch
此设置将审计日志存储在当前集群上。有关其他存储选项,请参阅审计日志存储类型。
-
重启每个节点。
完成此初始设置后,您可以使用 OpenSearch Dashboards 管理审计日志类别和其他设置。在 OpenSearch Dashboards 中,选择 Security,然后选择 Audit logs。
另一种方法是在 audit.yml
和 opensearch.yml
文件中指定审计日志的初始设置(具体文件取决于设置——请参阅审计日志设置)。此后,您可以使用 Dashboards 或审计日志 API 来管理和更新设置。
跟踪事件
审计日志通过两种方式记录事件:HTTP 请求 (REST) 和传输层。下表提供了跟踪事件的描述以及它们是否在 REST 或传输层上记录。
事件 | 在 REST 上记录 | 在传输层记录 | 描述 |
---|---|---|---|
FAILED_LOGIN | 是 | 是 | 请求凭据无法验证,很可能是因为用户不存在或密码不正确。 |
AUTHENTICATED | 是 | 是 | 用户成功通过认证。 |
MISSING_PRIVILEGES | 否 | 是 | 用户没有执行该请求所需的权限。 |
GRANTED_PRIVILEGES | 否 | 是 | 用户成功向 OpenSearch 发出请求。 |
SSL_EXCEPTION | 是 | 是 | 尝试在没有有效 SSL/TLS 证书的情况下访问 OpenSearch。 |
opensearch_SECURITY_INDEX_ATTEMPT | 否 | 是 | 尝试在没有所需权限或 TLS 管理证书的情况下修改安全插件内部用户和权限索引。 |
BAD_HEADERS | 是 | 是 | 尝试使用安全插件内部标头欺骗 OpenSearch 请求。 |
审计日志设置
以下默认日志设置适用于大多数用例。但是,您可以更改设置以节省存储空间或根据您的具体需求调整信息。
audit.yml 中的设置
以下设置存储在 audit.yml
文件中。
排除类别
要排除类别,请在以下设置中列出它们
plugins.security.audit.config.disabled_rest_categories: <disabled categories>
plugins.security.audit.config.disabled_transport_categories: <disabled categories>
例如
plugins.security.audit.config.disabled_rest_categories: AUTHENTICATED, opensearch_SECURITY_INDEX_ATTEMPT
plugins.security.audit.config.disabled_transport_categories: GRANTED_PRIVILEGES
如果要记录所有类别的事件,请使用 NONE
plugins.security.audit.config.disabled_rest_categories: NONE
plugins.security.audit.config.disabled_transport_categories: NONE
禁用 REST 或传输层
默认情况下,安全插件会在 REST 和传输层记录事件。您可以禁用其中任何一种类型
plugins.security.audit.config.enable_rest: false
plugins.security.audit.config.enable_transport: false
禁用请求体日志记录
默认情况下,安全插件会包含 REST 和传输层的请求体(如果可用)。如果您不需要请求体,可以禁用它
plugins.security.audit.config.log_request_body: false
记录索引名称
默认情况下,安全插件会记录受请求影响的所有索引。由于索引名称可以是别名,并且可以包含通配符/日期模式,因此安全插件会记录用户提交的索引名称以及其解析到的实际索引名称。
例如,如果您使用别名或通配符,审计事件可能如下所示
audit_trace_indices: [
"human*"
],
audit_trace_resolved_indices: [
"humanresources"
]
您可以通过设置以下内容来禁用此功能
plugins.security.audit.config.resolve_indices: false
仅当 plugins.security.audit.config.log_request_body
也设置为 false
时,此功能才会被禁用。
配置批量请求处理
批量请求可以包含许多索引操作。默认情况下,安全插件只记录单个批量请求,而不是每个单独的操作。
安全插件可以配置为将每个索引操作记录为单独的事件
plugins.security.audit.config.resolve_bulk_requests: true
此更改可能会在审计日志中创建大量事件,因此如果您频繁使用 _bulk
API,我们不建议启用此设置。
排除请求
您可以通过为传输请求和/或 HTTP 请求路径 (REST) 配置操作来排除某些请求不被记录
plugins.security.audit.config.ignore_requests: ["indices:data/read/*", "SearchRequest"]
排除用户
默认情况下,安全插件会记录所有用户的事件,但排除内部 OpenSearch Dashboards 服务器用户 kibanaserver
。您可以排除其他用户
plugins.security.audit.config.ignore_users:
- kibanaserver
- admin
如果应记录所有用户的请求,请使用 NONE
plugins.security.audit.config.ignore_users: NONE
排除标头
您可以从日志中排除敏感标头——例如 Authorization:
标头
plugins.security.audit.config.exclude_sensitive_headers: true
opensearch.yml 中的设置
以下设置存储在 opensearch.yml
文件中。
配置审计日志索引名称
默认情况下,安全插件将审计事件存储在名为 auditlog-YYYY.MM.dd
的每日滚动索引中
plugins.security.audit.config.index: myauditlogindex
在索引名称中使用日期模式配置每日、每周或每月滚动索引
plugins.security.audit.config.index: "'auditlog-'YYYY.MM.dd"
有关日期模式格式的参考,请参阅 Joda DateTimeFormat 文档。
(高级)调优线程池
搜索插件异步记录事件,这最大限度地减少了对集群的性能影响。该插件使用固定线程池来记录事件
plugins.security.audit.config.threadpool.size: <integer>
默认设置是 10
。将此值设置为 0
会禁用线程池,这意味着插件会同步记录事件。要设置每个线程的最大队列长度
plugins.security.audit.config.threadpool.max_queue_len: 100000
禁用审计日志
要在启用审计日志后禁用它们,请从 opensearch.yml
中移除 plugins.security.audit.type: internal_opensearch
设置,或在 OpenSearch Dashboards 中取消选中 Enable audit logging 复选框。
审计用户账户操作
要启用安全索引更改的审计日志记录,例如角色映射的更改以及角色的创建或删除,请在审计日志配置的 compliance:
部分中使用以下设置,如以下示例所示
_meta:
type: "audit"
config_version: 2
config:
# enable/disable audit logging
enabled: true
...
compliance:
# enable/disable compliance
enabled: true
# Log updates to internal security changes
internal_config: true
# Log only metadata of the document for write events
write_metadata_only: false
# Log only diffs for document updates
write_log_diffs: true
# List of indices to watch for write events. Wildcard patterns are supported
# write_watched_indices: ["twitter", "logs-*"]
write_watched_indices: [".opendistro_security"]