
# 创建集群用户并授权使用
开启安全模式的OpenSearch集群会启用访问控制，初始状态下只有管理员账号才能登录OpenSearch Dashboards并访问集群数据。在实际业务中，不同团队成员（如开发人员、运维人员、数据分析师）需要以各自的身份登录集群，且只能操作被授权的索引和功能，不能越权访问。为此，CSS服务基于RBAC（Role-Based Access Control）模型提供了用户权限管理能力，管理员可在Dashboards的Security模块中创建用户、定义角色权限，并通过角色映射将权限分配给对应用户，实现集群、索引、文档、字段等层级的细粒度访问控制。
#### 功能介绍
CSS服务的安全集群基于opendistro_security插件实现细粒度访问控制，该插件以RBAC模型为核心，通过用户、角色映射、角色、 权限的链路完成授权。
图1RBAC授权模型   
![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002660218503.png "点击放大")
表1核心概念说明 
| 参数                 | 描述                                                                                                                                                           |
|:---|:---|
| User（用户）           | 向集群发出请求的主体，具备用户名和密码，可关联后端角色（Backend Roles）和自定义属性（Attributes）。                                                                                                |
| Role mapping（角色映射） | 将用户（或后端角色）绑定到特定角色，使其获得该角色的所有权限。一个角色可以映射到多个用户（或后端角色）。 例如，readall（角色）映射到Bob（用户），意味着Bob通过身份验证后即可获得readall的所有权限。 |
| Role（角色）           | 权限或操作组的集合，定义了对集群、索引、文档、字段的操作权限。                                                                                                                              |
| Permission（权限）     | 单个具体动作，如"indices:admin/create"（创建索引）。                                                                                                                        |
| Action group（操作组）  | 多个权限的集合，如预置的"search"操作组包含"search" 、"msearch"等搜索权限。                                                                                                           |
   
RBAC解决"谁能在集群中做什么"的授权问题，Tenant解决"谁能在Dashboards中看到什么"的隔离问题。两者配合使用，RBAC控制数据访问权限，Tenant控制Dashboards中的仪表板、可视化图表等资源的共享范围。Tenant通过三种类型决定了信息的共享粒度。
表2Tenant的类型 
| 类型            | 信息共享范围                                                                         | 适用场景                  |
|:---|:---|:---|
| Global（全局租户）  | 完全共享，所有用户都可以访问。             | 适合放置共享看板、公共监控大屏等公共资源。 |
| Private（私有租户） | 完全不共享，仅用户自己可以访问，连管理员也无法直接看到其内容。                                                | 适合放置个人开发调试的私有报表。      |
| Custom（自定义租户） | 有条件的定向共享，由管理员通过角色映射精确指定的一组用户或角色，可进一步分配Tenant Read（只读共享）或Tenant Write（可编辑共享）权限。 | 适合团队协作、部门隔离等场景。       |
   
#### 约束限制
- 用户名、角色名、租户名不能与已有名称重复。
- 建议索引名称与用户名不要相同，避免权限管理混乱。
 
#### 前提条件
- 集群已开启安全模式：仅安全模式的OpenSearch集群支持用户权限管理。
- 已获取管理员账号：用户名为**admin**，密码为创建集群时设置的管理员密码。
 
#### 登录Dashboards的Security页面
使用管理员身份进入集群权限管理的Security页面。
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
3. 在集群列表，选择目标集群，单击操作列的"Dashboards"，使用管理员账号**admin**登录OpenSearch Dashboards。
4. 登录成功后，在左侧导航栏选择"Security"，进入权限管理页面。
 
#### 创建用户
在集群中注册一个新的身份账号，后续将被绑定到角色以获得相应权限。
1. 在Security页面，选择左侧的"Internal users"。
2. 在Internal Users页面，单击"Create internal user"。
3. 在Create internal user页面，完成参数配置。
   表3用户配置 
   | 参数                         | 是否必填 | 说明                                                                                                                          |
   |:---|:---|:---|
   | Username                   | 必填   | 用户名，本示例填写"test"。                                                                                                            |
   | Password/Re-enter password | 必填   | 设置登录密码，两次输入需一致。                                                                                                             |
   | Backend roles              | 可选   | 来自外部认证系统（如LDAP/SAML）的后端角色名称，用于将外部用户映射到安全角色。 详细信息可单击页面的"Learn more"查看。        |
   | Attributes                 | 可选   | 用户自定义属性，可作为文档级安全查询（DLS）中的动态变量，实现基于用户属性的细粒度数据访问控制。 详细信息可单击页面的"Learn more"查看。 |
      
   
4. 配置完成后，单击"Create"，完成用户创建。 创建成功后，可在Internal Users列表中看到新建的用户。
   
 
#### 创建角色并授权
定义一个角色，明确该角色对集群、索引的操作范围，这些权限集合后续将赋予给用户。
![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/note_3.0-zh-cn.png)
系统已预置多种角色（如kibana_user、readall等），如果预置角色满足业务需求，建议直接使用，无需新建角色。
1. 在Security页面，选择左侧的"Roles"。
2. 在Roles页面，单击"Create Role"。
3. 在Create Role页面，完成参数配置。
   表4角色配置 
   | 参数                  | 是否必填 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   |:---|:---|:---|
   | Name                | 必填   | 角色名称，本示例填写"role_test"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | Cluster permissions | 可选   | 集群级权限。 - 选择预置权限组：如cluster_monitor（集群监控只读）、cluster_manage（集群管理）等，本示例选择 "cluster_monitor"。cluster_monitor权限允许用户只读查看集群状态，包括健康状态、节点信息、统计数据等，不允许任何修改操作。  - 不配置：表示该角色不具备任何集群级操作权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | Index Permissions   | 可选   | 索引级权限。 需要配置以下参数： - Index：必填，需要授权的索引名称或通配符模式，如"my_store"或 "logs-\*"。  - Index permissions：必填，对该索引允许的操作，如read（只读）、write（写入）等。  - Document Level Security：可选，设置文档级过滤条件，使该角色用户只能看到满足条件的文档。  - Field Level Security：可选，设置字段白名单或黑名单，控制用户可见的字段范围。  - Anonymization：可选，设置需要脱敏的字段，以保护您的数据安全。   |
   | Tenant Permissions  | 可选   | 租户权限。 - Tenant patterns：指定可访问的租户空间，如global_tenant（全局租户）或自定义的租户名。  - Permissions：对该租户空间的权限，Read only（只读）或Read and Write（读写）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      
   
4. 配置完成后，单击"Create"，完成角色创建。 创建成功后，可在Roles列表中看到新建的角色。
   
 
#### 将角色映射到用户
建立用户与角色的绑定关系，使用户继承角色的所有权限。
1. 在Security \> Roles页面，单击角色名称，如"role_test"，进入角色详情页。
2. 选择"Mapped users"页签，单击"Manage mapping"。
3. 在Map user页面，单击"Users"右侧下拉框选择目标用户，如"test"。
   ![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/note_3.0-zh-cn.png)
   同一角色支持映射多个用户，也支持通过Backend roles批量映射来自外部认证系统的用户组。
   
4. 单击"Map"，完成角色映射。 映射成功后，可在Mapped users列表中看到目标用户"test"。
   
 
#### 验证用户权限
以新用户身份登录集群，通过实际操作确认权限配置是否按预期生效。
1. 退出当前**admin** 账号，使用用户名**test**和设置的密码重新登录OpenSearch Dashboards。
2. 在左侧导航栏选择"Dev Tools"，进入操作页面。
3. 执行以下两条命令，验证用户test是否具备角色role_test的权限，即只有"cluster_monitor"权限。
   - 查询集群健康状态
     ```
     GET /_cluster/health?pretty
     ```
     预期结果：返回HTTP 200，显示集群健康状态信息，说明"cluster_monitor"权限已生效。
     
   
   - 创建索引
     ```
     PUT /my_test
     ```
     预期结果：返回HTTP 403 Forbidden，说明test用户没有创建索引的权限，权限隔离生效。
     ![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/note_3.0-zh-cn.png)
     如果业务需要为test用户补充创建索引的权限，可以根据403错误信息中提示的权限名称（如"indices:admin/create"），在role_test的Index Permissions中添加对应权限即可，无需重新创建用户。
     
    
 
#### 常用角色权限配置示例
在实际业务中，不同岗位的人员需要不同级别的权限。以下整理了几类典型场景的角色权限配置参数，可直接参照配置，无需从零摸索。
表5场景总览 
| 场景                                                         | 适用角色              | 核心权限                        |
|:---|:---|:---|
| [索引数据只读]   | 数据分析师、报表查询人员      | 指定索引的读取权限（无集群权限）            |
| [索引数据读写]    | 业务开发人员、数据写入服务账号   | 指定索引的读写权限（无集群权限）            |
| [集群只读监控]     | 运维人员、巡检账号         | 集群状态监控权限（无索引数据权限）           |
| [索引和文档管理] | 应用程序服务账号、数据管道写入账号 | 完整索引和文档操作权限（无集群权限）          |
| [仪表板编辑（读写）] | 运维工程师、BI开发人员      | Dashboards的仪表板 + Tenant读写权限 |
   
- **索引数据只读**
  **场景：**普通用户需要通过Dashboards查询指定索引的数据，但不允许执行任何写入、修改或删除操作，也不能访问集群，防止误操作影响生产数据。
  **用户权限配置：**给用户映射角色"role_index_readonly"。
  表6索引只读角色的权限配置 
  | 配置项                 | 子配置项              | 配置说明                                                                                                                                                                                                                                                         |
  |:---|:---|:---|
  | Name                | -                 | 索引只读角色名称"role_index_readonly"。                                                                                                                                                                                                                               |
  | Cluster permissions | -                 | 不配置，无需任何集群级权限。                                                                                                                                                                                                                                               |
  | Index Permissions   | Index             | 目标索引名称或通配符。                                                                                                                                                                                                                                                  |
  | Index Permissions   | Index permissions | 选择预置操作组权限"read"（文档读取），涵盖以下操作： ``` indices:data/read/search（_search） indices:data/read/get（_get） indices:data/read/mget（_mget） indices:data/read/scroll（_scroll） indices:admin/mappings/fields/get*（查看字段映射） ``` |
     
  **权限验证：**
  ```
  # 预期成功（搜索文档）
  GET /my_store/_search
  { "query": { "match_all": {} } }
  # 预期失败（无写入权限）
  POST /my_store/_doc
  { "name": "test" }
  # 预期失败（无集群级权限） 
  GET /_cluster/health?pretty
  ```
  
- **索引数据读写**
  **场景：**普通用户需要通过Dashboards向指定索引写入、更新、查询数据，但不允许执行创建/删除索引、修改索引Mapping等结构性变更操作，确保索引结构由专人管控。
  **用户权限配置：**给用户映射角色"role_index_readwrite"。
  表7索引读写角色的权限配置 
  | 配置项                 | 子配置项              | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
  |:---|:---|:---|
  | Name                | -                 | 索引读写角色名称"role_index_readwrite"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
  | Cluster permissions | -                 | 不配置，无需任何集群级权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
  | Index Permissions   | Index             | 目标索引名称或通配符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
  | Index Permissions   | Index permissions | 选择预置操作组权限"read"（文档读取）和"write"（文档写入）。 - read涵盖以下操作： ``` indices:data/read/search（_search） indices:data/read/get（_get） indices:data/read/mget（_mget） indices:data/read/scroll（_scroll） indices:admin/mappings/fields/get*（查看字段映射） ```   - write涵盖以下操作： ``` indices:data/write/index（创建/替换文档） indices:data/write/update（更新文档） indices:data/write/delete（删除文档） indices:data/write/bulk（批量写入） ```    |
     
  **权限验证：**
  ```
  # 预期成功（查询文档）
  GET /my_store/_search
  { "query": { "match_all": {} } }
  # 预期成功（写入文档）
  POST /my_store/_doc
  { "product": "laptop", "price": 5999 }
  # 预期成功（删除文档）
  DELETE /my_store/_doc/1
  # 预期失败（无创建索引权限）
  PUT /my_store_v2
  # 预期失败（无删除索引权限）
  DELETE /my_store
  # 预期失败（无集群级权限） 
  GET /_cluster/health?pretty
  ```
  
- **集群只读监控**
  **场景：**运维人员或自动化巡检脚本需要定期采集集群健康状态、节点负载、分片分布等监控数据，但不允许执行任何修改集群状态或操作索引数据的动作，防止巡检账号被误用或滥用。
  **用户权限配置：**给用户映射角色"role_index_monitor"。
  表8集群只读监控角色的权限配置 
  | 配置项                 | 子配置项              | 配置说明                                                                                                                                                                                                                                                                                                |
  |:---|:---|:---|
  | Name                | -                 | 索引监控角色名称"role_index_monitor"。                                                                                                                                                                                                                                                                       |
  | Cluster permissions | -                 | 选择预置操作组权限"cluster_monitor"（集群监控只读），涵盖以下操作： ``` cluster:monitor/health（集群健康状态） cluster:monitor/stats（集群统计信息） cluster:monitor/nodes/info（节点信息） cluster:monitor/nodes/stats（节点统计） cluster:monitor/task/get（任务信息） cluster:monitor/pending_tasks（待处理任务） ``` |
  | Index Permissions   | Index             | 配置为"\*"，查看所有索引的状态信息。                                                                                                                                                                                                                                                                                |
  | Index Permissions   | Index permissions | 选择预置操作组权限"indices_monitor"（索引监控只读），涵盖以下操作： ``` indices:monitor/stats（索引统计信息） indices:monitor/segments（段信息） indices:monitor/recovery（恢复信息） indices:monitor/shard_stores（分片存储信息） ```                                                                  |
     
  **权限验证：**
  ```
  # 预期成功（集群健康状态）
  GET /_cluster/health?pretty
  # 预期成功（索引统计信息）
  GET /my_store/_stats
  # 预期失败（无查询文档权限）
  GET /my_store/_search
  { "query": { "match_all": {} } }
  # 预期失败（无修改集群配置权限）
  PUT /_cluster/settings
  { "persistent": { "cluster.routing.allocation.enable": "none" } }
  ```
  
- **索引和文档管理**
  **场景：**微服务应用程序或数据管道服务账号需要通过REST API对OpenSearch执行完整的索引生命周期管理（创建索引、删除索引、修改索引配置和Mapping）以及文档的增删改查操作。由于该账号由程序调用而非人工操作，建议明确数据范围，减少数据安全暴露。
  **用户权限配置：**给用户映射角色"role_api_service"。
  表9索引和文档管理角色的权限配置 
  | 配置项                 | 子配置项              | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
  |:---|:---|:---|
  | Name                | -                 | 索引和文档管理角色名称"role_api_service"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
  | Cluster permissions | -                 | 不配置，纯数据操作无需集群级权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
  | Index Permissions   | Index             | 建议用通配符限定业务索引范围，如"log-\*"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
  | Index Permissions   | Index permissions | 选择以下预置操作组权限： - "read"（文档读取）  - "write"（文档写入）  - "indices:admin/create"（创建新索引）  - "indices:admin/delete"（删除整个索引）  - "indices:admin/settings/update"（修改索引Settings）  - "indices:admin/mapping/put"（新增或修改索引Mapping字段）   |
     
  **权限验证：**
  ```
  # 预期成功（创建索引）
  PUT /log-v1
  {
    "settings": { "number_of_shards": 3, "number_of_replicas": 1 }
  }
  # 预期成功（修改索引Settings）
  PUT /log-v1/_settings
  {
    "index": { "number_of_replicas": 2 }
  }
  # 预期成功（修改Mapping）
  PUT /log-v1/_mapping
  {
    "properties": { "new_field": { "type": "keyword" } }
  }
  # 预期成功（写入文档）
  POST /log-v1/_doc
  { "user_id": "u001", "action": "login" }
  # 预期成功（查询文档）
  GET /log-v1/_search
  { "query": { "match_all": {} } }
  # 预期成功（删除文档）
  DELETE /log-v1/_doc/1
  # 预期成功（删除索引）
  DELETE /log-v1
  # 预期失败（无集群级权限） 
  GET /_cluster/health?pretty
  ```
  
- **仪表板编辑（读写）**
  **场景：**BI开发人员或运维工程师需要在Dashboards中创建、修改Dashboard、Visualization和Index Pattern。
  **用户权限配置：**给用户映射角色"kibana_user"和"role_dashboard_editor"。
  表10仪表板编辑角色的权限配置 
  | 配置项                 | 子配置项              | 配置说明                                                                                                  |
  |:---|:---|:---|
  | Name                | -                 | 仪表板读写角色名称"role_dashboard_editor"。                                                                     |
  | Cluster permissions | -                 | 不配置，无需任何集群级权限。                                                                                        |
  | Index Permissions   | Index             | 目标索引名称或通配符，如"log-\*"。                                                                                 |
  | Index Permissions   | Index permissions | 选择预置操作组权限"read"（文档读取）和"write"（文档写入）。                                                                  |
  | Tenant Permissions  | Tenant patterns   | 不配置或指定自定义的租户名。角色"kibana_user"默认拥有"global_tenant"权限，自定义角色可以不用配置。如需隔离租户空间，此处可以选择自定义的租户名，如"test_tenant"。 |
  | Tenant Permissions  | Permissions       | 如果指定了自定义租户名，则此处必须选择"Read and Write"，获取租户空间的仪表板读写权限。                                                   |
     
  **权限验证：**
  使用配置了该角色的用户账号登录OpenSearch Dashboards，切换tenant为"Global" ：
  - 可正常查看、创建、编辑Dashboard和Visualization。
  
  - 可创建新的Index Pattern。
  
  - 无法访问Security权限管理页面（需要"all_access"角色才可访问）。
    
 
#### 常见问题：系统预置了哪些常用角色？
- kibana_user：允许用户正常使用OpenSearch Dashboards的创建/查看仪表板，该角色默认拥有"global_tenant"的Tenant Permissions。
- readall：对所有索引只读，适合数据分析师角色。
- all_access：超级管理员权限，谨慎分配。
在Roles页面单击"Learn more"可查看完整预置角色说明。
