# 用户与角色

URL: https://caijiao.org/elasticsearch/05.admin/05.security-roles
Source: docs/elasticsearch/05.admin/05.security-roles.md
Description: 本章介绍如何使用 Elasticsearch 安全模块管理用户和角色，实现基于角色的权限控制，保障集群数据安全。

在启用 X-Pack 安全功能的 Elasticsearch 中，用户与角色是访问控制的核心。通过角色授予权限，用户继承角色，实现灵活的权限管理体系。


## 1. 启用用户认证

确保在 `elasticsearch.yml` 中启用安全功能（默认 7.1+ 开启）：

```yaml
xpack.security.enabled: true
````

启动后，将强制所有请求进行身份认证。

## 2. 内置用户与角色

Elasticsearch 提供多个内置用户和角色，常见如：

| 用户名               | 说明            |
| ----------------- | ------------- |
| `elastic`         | 超级管理员（初始默认密码） |
| `kibana`          | Kibana 服务账户   |
| `logstash_system` | Logstash 服务账户 |

内置角色如：

| 角色名               | 权限说明             |
| ----------------- | ---------------- |
| `superuser`       | 拥有所有权限           |
| `kibana_user`     | 可使用 Kibana 的基本功能 |
| `monitoring_user` | 只读权限查看监控信息       |


## 3. 创建用户与角色

### 创建角色（使用 API）

```json
PUT /_security/role/data_reader
{
  "cluster": ["monitor"],
  "indices": [
    {
      "names": [ "logs-*" ],
      "privileges": [ "read", "view_index_metadata" ]
    }
  ]
}
```

### 创建用户并绑定角色

```json
POST /_security/user/alice
{
  "password" : "password123",
  "roles" : [ "data_reader" ],
  "full_name" : "Alice",
  "email" : "alice@example.com"
}
```

## 4. Kibana 界面管理用户与角色（推荐）

在 Kibana 中访问：

> **Stack Management → Security → Users / Roles**

提供图形界面创建用户、设置密码、分配角色。


## 5. 权限粒度

角色支持以下粒度权限控制：

* **集群级权限**：如 `monitor`, `manage`, `manage_security`
* **索引级权限**：如 `read`, `write`, `create_index`, `view_index_metadata`
* **字段级安全**：限制用户访问文档字段（需商业授权）
* **文档级安全**：基于查询条件限制访问特定文档（需商业授权）

## 6. 常用命令示例

列出所有用户：

```bash
GET /_security/user
```

列出所有角色：

```bash
GET /_security/role
```

删除用户：

```bash
DELETE /_security/user/alice
```

## 7. 安全建议

* 修改默认内置账户密码并禁用不必要账户
* 使用 API Key 或服务账户代替明文密码传输
* 为不同功能组件（Kibana、Beats、Logstash）设置独立角色权限
* 定期审查用户列表和权限分配

---

通过合理配置用户与角色，可构建安全、可控、最小权限原则的 Elasticsearch 权限体系。
