elasticsearch-audit by elastic/agent-skills
npx skills add https://github.com/elastic/agent-skills --skill elasticsearch-audit通过集群设置 API 启用和配置 Elasticsearch 的安全审计日志。审计日志记录安全事件,例如身份验证尝试、访问授权和拒绝、角色更改以及 API 密钥操作——这对于合规性和事件调查至关重要。
关于 Kibana 审计日志(保存对象访问、登录/注销、空间操作),请参阅 kibana-audit。关于身份验证和 API 密钥管理,请参阅 elasticsearch-authn。关于角色和用户管理,请参阅 elasticsearch-authz。关于诊断安全错误,请参阅 elasticsearch-security-troubleshooting。
有关详细的 API 端点和事件类型,请参阅 references/api-reference.md。
部署说明: 审计日志配置因部署类型而异。详情请参阅部署兼容性。
| 项目 | 描述 |
|---|---|
| Elasticsearch URL | 集群端点(例如 https://localhost:9200 或 Cloud 部署 URL) |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 身份验证 | 有效的凭据(请参阅 elasticsearch-authn 技能) |
| 集群权限 | 更新集群设置需要 manage 集群权限 |
| 许可证 | 审计日志需要黄金版、白金版、企业版或试用版许可证 |
向用户提示任何缺失的值。
动态启用审计日志,无需重启:
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.enabled": true
}
}'
要禁用,将 xpack.security.audit.enabled 设置为 false。验证当前状态:
curl "${ELASTICSEARCH_URL}/_cluster/settings?include_defaults=true&flat_settings=true" \
<auth_flags> | jq '.defaults | with_entries(select(.key | startswith("xpack.security.audit")))'
审计事件可以写入两个输出。两者可以同时处于活动状态。
| 输出 | 设置值 | 描述 |
|---|---|---|
| logfile | logfile | 写入 <ES_HOME>/logs/<cluster>_audit.json。默认值。 |
| index | index | 写入 .security-audit-* 索引。可通过 API 查询。 |
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.enabled": true,
"xpack.security.audit.outputs": ["index", "logfile"]
}
}'
index 输出是程序化查询审计事件所必需的。logfile 输出对于通过 Filebeat 发送到外部 SIEM 工具很有用。
注意: 在自管理集群上,旧版本(8.x 之前)的
xpack.security.audit.outputs可能需要在elasticsearch.yml中设置为静态设置。在 8.x+ 版本上,建议使用集群设置 API。
控制包含或排除哪些事件类型。默认情况下,启用审计时会记录所有事件。
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.include": [
"authentication_failed",
"access_denied",
"access_granted",
"anonymous_access_denied",
"tampered_request",
"run_as_denied",
"connection_denied"
]
}
}'
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.exclude": [
"access_granted"
]
}
}'
排除 access_granted 可以显著减少繁忙集群上的日志量——当只关心失败事件时使用此选项。
| 事件 | 触发条件 |
|---|---|
authentication_failed | 凭据被拒绝 |
authentication_success | 用户成功通过身份验证 |
access_granted | 执行了授权操作 |
access_denied | 由于权限不足,操作被拒绝 |
anonymous_access_denied | 未经身份验证的请求被拒绝 |
tampered_request | 检测到请求被篡改 |
connection_granted | 节点加入集群(传输层) |
connection_denied | 节点连接被拒绝 |
run_as_granted | run-as 模拟被授权 |
run_as_denied | run-as 模拟被拒绝 |
security_config_change | 安全设置被更改(角色、用户、API 密钥等) |
有关包含字段详细信息的完整事件类型列表,请参阅 references/api-reference.md。
过滤策略允许您按用户、领域、角色或索引抑制特定的审计事件,而无需全局禁用事件类型。多个策略可以同时生效——只有当事件没有被任何策略过滤掉时才会被记录。
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.ignore_filters": {
"system_users": {
"users": ["_xpack_security", "_xpack", "elastic/fleet-server"],
"realms": ["_service_account"]
}
}
}
}'
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.ignore_filters": {
"health_checks": {
"users": ["monitoring-user"],
"indices": [".monitoring-*"]
}
}
}
}'
| 字段 | 类型 | 描述 |
|---|---|---|
users | array[string] | 要排除的用户名(支持通配符) |
realms | array[string] | 要排除的领域名称 |
roles | array[string] | 要排除的角色名称 |
indices | array[string] | 要排除的索引名称或模式(支持 *) |
actions | array[string] | 要排除的操作名称(例如 indices:data/read/*) |
如果事件匹配单个策略内的所有指定字段,则会被过滤掉。
将策略设置为 null:
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.ignore_filters.health_checks": null
}
}'
当启用 index 输出时,审计事件存储在 .security-audit-* 索引中,并且可以查询。
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "event.action": "authentication_failed" } },
{ "range": { "@timestamp": { "gte": "now-24h" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "desc" } }],
"size": 50
}'
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "event.action": "access_denied" } },
{ "term": { "indices": "logs-*" } },
{ "range": { "@timestamp": { "gte": "now-7d" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "desc" } }],
"size": 20
}'
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "event.action": "security_config_change" } },
{ "range": { "@timestamp": { "gte": "now-7d" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "desc" } }],
"size": 50
}'
这将捕获角色创建/删除、用户更改、API 密钥操作和角色映射更新。
在 event.action 上使用 terms 聚合(配合 size: 0)来统计时间窗口内的事件类型。要检测暴力破解尝试,请按 source.ip 聚合 authentication_failed 事件,并设置 min_doc_count: 5。有关完整的聚合查询示例,请参阅 references/api-reference.md。
Kibana 有自己的审计日志,涵盖 Elasticsearch 看不到的应用层事件(保存对象的 CRUD、Kibana 登录、空间操作)。当用户在 Kibana 中执行操作时,Kibana 会代表用户向 Elasticsearch 发出请求。两个系统都记录相同的 trace.id(通过 X-Opaque-Id 标头传递),该 ID 作为主要的关联键。
先决条件: Kibana 审计必须在
kibana.yml中单独启用。有关设置说明、事件类型和 Kibana 特定的过滤策略,请参阅 kibana-audit 技能。
给定来自 Kibana 审计事件的 trace.id,搜索 ES 审计索引以查看底层的 Elasticsearch 操作:
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "trace.id": "'"${TRACE_ID}"'" } },
{ "range": { "@timestamp": { "gte": "now-24h" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "asc" } }]
}'
当 trace.id 不可用时(例如直接 API 调用),回退到用户 + 时间窗口关联:
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "user.name": "'"${USERNAME}"'" } },
{ "range": { "@timestamp": { "gte": "now-5m" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "asc" } }]
}'
次要关联字段:user.name、source.ip 和 @timestamp。
通过 Filebeat 将 Kibana 审计日志发送到 Elasticsearch(有关 Filebeat 配置,请参阅 kibana-audit),以便可以在单个多索引查询中一起搜索 .security-audit-*(ES)和 kibana-audit-*(Kibana)索引,并通过 trace.id 进行过滤。
请求: "启用审计日志并记录所有失败的访问和身份验证事件。"
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.enabled": true,
"xpack.security.audit.logfile.events.include": [
"authentication_failed",
"access_denied",
"anonymous_access_denied",
"run_as_denied",
"connection_denied",
"tampered_request",
"security_config_change"
]
}
}'
这捕获了所有拒绝和安全更改事件,同时排除了高流量的成功事件。
请求: "有人可能尝试访问 secrets-* 索引。检查审计日志。"
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "terms": { "event.action": ["access_denied", "authentication_failed"] } },
{ "wildcard": { "indices": "secrets-*" } },
{ "range": { "@timestamp": { "gte": "now-48h" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "desc" } }],
"size": 100
}'
检查结果中的 user.name、source.ip 和 event.action 以识别行为者和模式。
请求: "审计日志太大。过滤掉监控流量和成功的读取操作。"
从事件类型中排除 access_granted,然后为监控用户和索引添加过滤策略。有关完整语法,请参阅过滤策略。
启用 index 输出以使审计事件可查询。logfile 输出更适合通过 Filebeat 发送到外部 SIEM 工具,但无法通过 Elasticsearch API 查询。
开始时仅记录失败事件(authentication_failed、access_denied、security_config_change)。仅在需要时添加成功事件——它们会产生高流量。
使用过滤策略抑制特定用户或索引,而不是排除整个事件类型。
设置 ILM 策略以滚动更新和删除旧的 .security-audit-* 索引。通常保留 30-90 天。
对于应用层事件(保存对象访问、Kibana 登录、空间操作),还需启用 Kibana 审计日志记录。有关设置,请参阅 kibana-audit 技能。使用 trace.id 进行关联——请参阅上面的与 Kibana 审计日志关联。
使用具有 manage 权限的专用管理员用户或 API 密钥。仅将 elastic 保留用于紧急恢复。
| 功能 | 自管理 | ECH | Serverless |
|---|---|---|---|
| 通过集群设置的 ES 审计 | 是 | 是 | 不可用 |
| ES logfile 输出 | 是 | 通过 Cloud UI | 不可用 |
| ES index 输出 | 是 | 是 | 不可用 |
| 通过集群设置的过滤策略 | 是 | 是 | 不可用 |
查询 .security-audit-* | 是 | 是 | 不可用 |
ECH 说明: ES 审计通过集群设置 API 配置。Logfile 输出可通过 Cloud 控制台部署日志访问。Index 输出与自管理相同。
Serverless 说明:
每周安装次数
171
代码仓库
GitHub Stars
206
首次出现
13 天前
安全审计
安装于
cursor155
github-copilot149
opencode148
gemini-cli148
codex148
amp147
Enable and configure security audit logging for Elasticsearch via the cluster settings API. Audit logs record security events such as authentication attempts, access grants and denials, role changes, and API key operations — essential for compliance and incident investigation.
For Kibana audit logging (saved object access, login/logout, space operations), see kibana-audit. For authentication and API key management, see elasticsearch-authn. For roles and user management, see elasticsearch-authz. For diagnosing security errors, see elasticsearch-security-troubleshooting.
For detailed API endpoints and event types, see references/api-reference.md.
Deployment note: Audit logging configuration differs across deployment types. See Deployment Compatibility for details.
| Item | Description |
|---|---|
| Elasticsearch URL | Cluster endpoint (e.g. https://localhost:9200 or a Cloud deployment URL) |
| Authentication | Valid credentials (see the elasticsearch-authn skill) |
| Cluster privileges | manage cluster privilege to update cluster settings |
| License | Audit logging requires a gold, platinum, enterprise, or trial license |
Prompt the user for any missing values.
Enable audit logging dynamically without a restart:
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.enabled": true
}
}'
To disable, set xpack.security.audit.enabled to false. Verify current state:
curl "${ELASTICSEARCH_URL}/_cluster/settings?include_defaults=true&flat_settings=true" \
<auth_flags> | jq '.defaults | with_entries(select(.key | startswith("xpack.security.audit")))'
Audit events can be written to two outputs. Both can be active simultaneously.
| Output | Setting value | Description |
|---|---|---|
| logfile | logfile | Written to <ES_HOME>/logs/<cluster>_audit.json. Default. |
| index | index | Written to .security-audit-* indices. Queryable via the API. |
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.enabled": true,
"xpack.security.audit.outputs": ["index", "logfile"]
}
}'
The index output is required for programmatic querying of audit events. The logfile output is useful for shipping to external SIEM tools via Filebeat.
Note: On self-managed clusters,
xpack.security.audit.outputsmay require a static setting inelasticsearch.ymlon older versions (pre-8.x). On 8.x+, prefer the cluster settings API.
Control which event types are included or excluded. By default, all events are recorded when audit is enabled.
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.include": [
"authentication_failed",
"access_denied",
"access_granted",
"anonymous_access_denied",
"tampered_request",
"run_as_denied",
"connection_denied"
]
}
}'
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.exclude": [
"access_granted"
]
}
}'
Excluding access_granted significantly reduces log volume on busy clusters — use this when only failures matter.
| Event | Fires when |
|---|---|
authentication_failed | Credentials were rejected |
authentication_success | User authenticated successfully |
access_granted | An authorized action was performed |
access_denied | An action was denied due to insufficient privileges |
anonymous_access_denied | An unauthenticated request was rejected |
tampered_request |
See references/api-reference.md for the complete event type list with field details.
Filter policies let you suppress specific audit events by user, realm, role, or index without disabling the event type globally. Multiple policies can be active — an event is logged only if no policy filters it out.
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.ignore_filters": {
"system_users": {
"users": ["_xpack_security", "_xpack", "elastic/fleet-server"],
"realms": ["_service_account"]
}
}
}
}'
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.ignore_filters": {
"health_checks": {
"users": ["monitoring-user"],
"indices": [".monitoring-*"]
}
}
}
}'
| Field | Type | Description |
|---|---|---|
users | array[string] | Usernames to exclude (supports wildcards) |
realms | array[string] | Realm names to exclude |
roles | array[string] | Role names to exclude |
indices | array[string] | Index names or patterns to exclude (supports *) |
actions |
An event is filtered out if it matches all specified fields within a single policy.
Set the policy to null:
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.logfile.events.ignore_filters.health_checks": null
}
}'
When the index output is enabled, audit events are stored in .security-audit-* indices and can be queried.
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "event.action": "authentication_failed" } },
{ "range": { "@timestamp": { "gte": "now-24h" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "desc" } }],
"size": 50
}'
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "event.action": "access_denied" } },
{ "term": { "indices": "logs-*" } },
{ "range": { "@timestamp": { "gte": "now-7d" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "desc" } }],
"size": 20
}'
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "event.action": "security_config_change" } },
{ "range": { "@timestamp": { "gte": "now-7d" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "desc" } }],
"size": 50
}'
This captures role creation/deletion, user changes, API key operations, and role mapping updates.
Use terms aggregations on event.action (with size: 0) to count events by type over a time window. To detect brute-force attempts, aggregate authentication_failed events by source.ip with min_doc_count: 5. See references/api-reference.md for full aggregation query examples.
Kibana has its own audit log covering application-layer events that Elasticsearch does not see (saved object CRUD, Kibana logins, space operations). When a user performs an action in Kibana, Kibana makes requests to Elasticsearch on the user's behalf. Both systems record the same trace.id (passed via the X-Opaque-Id header), which serves as the primary correlation key.
Prerequisite: Kibana audit must be enabled separately in
kibana.yml. See the kibana-audit skill for setup instructions, event types, and Kibana-specific filter policies.
Given a trace.id from a Kibana audit event, search the ES audit index to see the underlying Elasticsearch operations:
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "trace.id": "'"${TRACE_ID}"'" } },
{ "range": { "@timestamp": { "gte": "now-24h" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "asc" } }]
}'
When trace.id is unavailable (e.g. direct API calls), fall back to user + time-window correlation:
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "term": { "user.name": "'"${USERNAME}"'" } },
{ "range": { "@timestamp": { "gte": "now-5m" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "asc" } }]
}'
Secondary correlation fields: user.name, source.ip, and @timestamp.
Ship Kibana audit logs to Elasticsearch via Filebeat (see kibana-audit for the Filebeat config) so that both .security-audit-* (ES) and kibana-audit-* (Kibana) indices can be searched together in a single multi-index query filtered by trace.id.
Request: "Enable audit logging and record all failed access and authentication events."
curl -X PUT "${ELASTICSEARCH_URL}/_cluster/settings" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"xpack.security.audit.enabled": true,
"xpack.security.audit.logfile.events.include": [
"authentication_failed",
"access_denied",
"anonymous_access_denied",
"run_as_denied",
"connection_denied",
"tampered_request",
"security_config_change"
]
}
}'
This captures all denial and security change events while excluding high-volume success events.
Request: "Someone may have tried to access the secrets-* index. Check the audit logs."
curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
<auth_flags> \
-H "Content-Type: application/json" \
-d '{
"query": {
"bool": {
"filter": [
{ "terms": { "event.action": ["access_denied", "authentication_failed"] } },
{ "wildcard": { "indices": "secrets-*" } },
{ "range": { "@timestamp": { "gte": "now-48h" } } }
]
}
},
"sort": [{ "@timestamp": { "order": "desc" } }],
"size": 100
}'
Review user.name, source.ip, and event.action in the results to identify the actor and pattern.
Request: "Audit logs are too large. Filter out monitoring traffic and successful reads."
Exclude access_granted from event types, then add a filter policy for monitoring users and indices. See Filter Policies for the full syntax.
Enable the index output to make audit events queryable. The logfile output is better for shipping to external SIEM tools via Filebeat but cannot be queried through the Elasticsearch API.
Begin with failure events only (authentication_failed, access_denied, security_config_change). Add success events only when needed — they generate high volume.
Suppress specific users or indices with filter policies rather than excluding entire event types.
Set up an ILM policy to roll over and delete old .security-audit-* indices. A 30-90 day retention is typical.
For application-layer events (saved object access, Kibana logins, space operations), enable Kibana audit logging as well. See the kibana-audit skill for setup. Use trace.id to correlate — see Correlate with Kibana Audit Logs above.
Use a dedicated admin user or API key with manage privileges. Reserve elastic for emergency recovery only.
| Capability | Self-managed | ECH | Serverless |
|---|---|---|---|
| ES audit via cluster settings | Yes | Yes | Not available |
| ES logfile output | Yes | Via Cloud UI | Not available |
| ES index output | Yes | Yes | Not available |
| Filter policies via cluster settings | Yes | Yes | Not available |
Query .security-audit-* | Yes | Yes | Not available |
ECH notes: ES audit is configured via the cluster settings API. Logfile output is accessible through the Cloud console deployment logs. Index output works the same as self-managed.
Serverless notes:
Weekly Installs
171
Repository
GitHub Stars
206
First Seen
13 days ago
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
cursor155
github-copilot149
opencode148
gemini-cli148
codex148
amp147
文件管理技能 - 自动化文件/文件夹操作、批量处理、安全管理的智能工具
455 周安装
gog - Google Workspace CLI 命令行工具:高效管理Gmail和Calendar
458 周安装
iOS SwiftUI 照片相机媒体开发指南:PhotosPicker 图像加载与权限管理
456 周安装
shadcn-vue 中文指南:Vue 3 UI 组件库快速安装与配置教程
457 周安装
RAG工程师技能详解:检索增强生成系统架构与最佳实践
462 周安装
iOS 17+ SwiftUI MapKit 与 CoreLocation 开发指南:地图、定位、地理围栏
461 周安装
| A request was detected as tampered with |
connection_granted | A node joined the cluster (transport layer) |
connection_denied | A node connection was rejected |
run_as_granted | A run-as impersonation was authorized |
run_as_denied | A run-as impersonation was denied |
security_config_change | A security setting was changed (role, user, API key, etc.) |
| array[string] |
Action names to exclude (e.g. indices:data/read/*) |