更新时间:2026-07-07 GMT+08:00
分享

创建集群用户并授权使用

开启安全模式的OpenSearch集群会启用访问控制,初始状态下只有管理员账号才能登录OpenSearch Dashboards并访问集群数据。在实际业务中,不同团队成员(如开发人员、运维人员、数据分析师)需要以各自的身份登录集群,且只能操作被授权的索引和功能,不能越权访问。为此,CSS服务基于RBAC(Role-Based Access Control)模型提供了用户权限管理能力,管理员可在Dashboards的Security模块中创建用户、定义角色权限,并通过角色映射将权限分配给对应用户,实现集群、索引、文档、字段等层级的细粒度访问控制。

功能介绍

CSS服务的安全集群基于opendistro_security插件实现细粒度访问控制,该插件以RBAC模型为核心,通过用户、角色映射、角色、 权限的链路完成授权。

图1 RBAC授权模型
表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通过三种类型决定了信息的共享粒度。

表2 Tenant的类型

类型

信息共享范围

适用场景

Global(全局租户)

完全共享,所有用户都可以访问。

适合放置共享看板、公共监控大屏等公共资源。

Private(私有租户)

完全不共享,仅用户自己可以访问,连管理员也无法直接看到其内容。

适合放置个人开发调试的私有报表。

Custom(自定义租户)

有条件的定向共享,由管理员通过角色映射精确指定的一组用户或角色,可进一步分配Tenant Read(只读共享)或Tenant Write(可编辑共享)权限。

适合团队协作、部门隔离等场景。

约束限制

  • 用户名、角色名、租户名不能与已有名称重复。
  • 建议索引名称与用户名不要相同,避免权限管理混乱。

前提条件

  • 集群已开启安全模式:仅安全模式的OpenSearch集群支持用户权限管理。
  • 已获取管理员账号:用户名为admin,密码为创建集群时设置的管理员密码。

登录Dashboards的Security模块

使用管理员身份进入集群权限管理的Security页面。

  1. 登录云搜索服务管理控制台
  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列表中看到新建的用户。

创建角色并授权

定义一个角色,明确该角色对集群、索引的操作范围,这些权限集合后续将赋予给用户。

系统已预置多种角色(如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”

    同一角色支持映射多个用户,也支持通过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用户没有创建索引的权限,权限隔离生效。

      如果业务需要为test用户补充创建索引的权限,可以根据403错误信息中提示的权限名称(如“indices:admin/create”),在role_test的Index Permissions中添加对应权限即可,无需重新创建用户。

常用角色权限配置示例

在实际业务中,不同岗位的人员需要不同级别的权限。以下整理了最常见的4类典型场景的角色权限配置参数,可直接参照配置,无需从零摸索。

表5 场景总览

场景

适用角色

核心权限

索引数据只读

数据分析师、报表查询人员

指定索引的读取权限(无集群权限)

索引数据读写

业务开发人员、数据写入服务账号

指定索引的读写权限(无集群权限)

集群只读监控

运维人员、巡检账号

集群状态监控权限(无索引数据权限)

索引和文档管理

应用程序服务账号、数据管道写入账号

完整索引和文档操作权限(无集群权限)

仪表板编辑(读写)

运维工程师、BI开发人员

Dashboards的仪表板 + Tenant读写权限

  • 索引数据只读

    场景:普通用户需要通过Dashboards查询指定索引的数据,但不允许执行任何写入、修改或删除操作,也不能访问集群,防止误操作影响生产数据。

    用户权限配置:给用户映射角色“role_index_readonly”

    表6 索引只读角色的权限配置

    配置项

    子配置项

    配置说明

    Name

    -

    索引只读角色名称“role_index_readonly”

    Cluster permissions

    -

    不配置,无需任何集群级权限。

    Index Permissions

    Index

    目标索引名称或通配符。

    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

    选择预置操作组权限“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

    选择预置操作组权限“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

    选择以下预置操作组权限:

    • “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

    选择预置操作组权限“read”(文档读取)和“write”(文档写入)。

    Tenant Permissions

    Tenant patterns

    不配置或指定自定义的租户名。角色“kibana_user”默认拥有“global_tenant”权限,自定义角色可以不用配置。如需隔离租户空间,此处可以选择自定义的租户名,如“test_tenant”

    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”可查看完整预置角色说明。

相关文档