登录用户无法将可视化内容存储在其 OpenSearch 租户空间内

登录用户无法将可视化内容存储在其 OpenSearch 租户空间内

我们最近将 3 个集群中的 1 个从 Elasticsearch 切换到 OpenSearch。该集群正在将数据接收到 30 多个数据流中,并且可以使用管理员用户在仪表板中使用索引模式等搜索数据。该集群有大约 10 个租户,每个租户都有一个与之相关的角色,后端映射到 LDAP。这似乎运行良好。

但是,当普通用户登录并选择租户时,他们看不到任何索引模式,也无法创建任何索引模式。如果我授予角色对别名的读取权限.opensearch_dashboards,则用户能够看到管理员用户创建的所有索引模式,并可以使用他们通过角色访问的索引模式进行搜索,但仍然无法将他们创建的可视化/仪表板保存到磁盘。

.opensearch_dashboards除非我找到描述此解决方案的文档,否则我拒绝授予每个角色对别名及其索引的写访问权限。我还没有尝试过这个解决方案,所以我甚至不知道它是否有效。

我习惯于预先创建 Elasticsearch/Kibana 中的空间应有权访问的索引模式,并且我正尝试在 OpenSearch 中为其租户执行相同操作。我还认为这个问题的存在是因为我和我对 OpenSearch 的了解不如对 Elasticsearch 的了解。

示例租户、角色和映射。

GET _plugins/_security/api/tenants/Students%20Admins
{
  "Students Admins": {
    "reserved": false,
    "hidden": false,
    "description": "Tenant for the Student administrators at <university>",
    "static": false
  }
}

GET _plugins/_security/api/roles/Students%20Admin
{
  "Students Admin": {
    "reserved": false,
    "hidden": false,
    "cluster_permissions": [],
    "index_permissions": [
      {
        "index_patterns": [
          "logs-*-students"
        ],
        "dls": "",
        "fls": [],
        "masked_fields": [],
        "allowed_actions": [
          "read"
        ]
      }
    ],
    "tenant_permissions": [
      {
        "tenant_patterns": [
          "Student Admins"
        ],
        "allowed_actions": [
          "kibana_all_write"
        ]
      }
    ],
    "static": false
  }
}

GET _plugins/_security/api/rolesmapping/Students%20Admin
{
  "Students Admin": {
    "hosts": [],
    "users": [],
    "reserved": false,
    "hidden": false,
    "backend_roles": [
      "<Group in LDAP>"
    ],
    "and_backend_roles": []
  }
}

在角色中,没有集群权限,但我尝试使用 cluster_composite_ops 和 cluster_composite_ops_ro(替代 .opensearch_dashboards 别名上的读取权限),但这也不起作用。

Opensearch 配置可能相关。

plugins.security.system_indices.enabled: true
plugins.security.system_indices.indices: [".plugins-ml-model", ".plugins-ml-task", ".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-*", ".opensearch-notifications-*", ".opensearch-notebooks", ".opensearch-observability", ".ql-datasources", ".opendistro-asynchronous-search-response*", ".replication-metadata-store", ".opensearch-knn-models"]

可能相关的仪表板配置。

# I changed the password for kibanaserver at bootstrap time.
opensearch.username: "kibanaserver"
opensearch_security.multitenancy.enabled: true
opensearch_security.multitenancy.tenants.preferred: [Private, Global]
opensearch_security.readonly_mode.roles: [kibana_read_only]

内部用户定义

kibanaserver:
  hash: "<NEW HASH>"
  reserved: true
  description: "Opensearch Dashboards system user"

内部角色定义

# Restrict users so they can only view visualization and dashboard on OpenSearchDashboards
kibana_read_only:
  reserved: true

该角色是否缺少某些权限,无法查看和写入其租户内的对象?我是否错误地配置了 OpenSearch-Dashboards,以致除非您是管理员,否则它只能以某种方式读取?

我观察到,当以管理员身份登录时,无论哪个租户处于活动状态,我都会看到系统中创建的所有索引模式。我不知道这是否是故意的。只是提一下,以防它很重要。

我知道如何授予我的用户对其租户空间的写权限吗?并且如果可能的话,只能看到在他们自己的租户内定义的索引模式?

答案1

我找到了问题所在。在创建包含将登录 OpenSearch 仪表板的用户的角色时,用户也需要成为 kibana_user 角色的成员。这将解决我上面提到的问题,但所有索引模式在 Discovery 中对所有用户可见。

换句话说。无论您将什么后端角色添加到与租户相关的角色,该后端角色也需要添加为 kibana_user 角色的后端角色。

登录,注销,一切都已修复。

GET _plugins/_security/api/rolesmapping/Students%20Admin
{
  "Students Admin": {
    "hosts": [],
    "users": [],
    "reserved": false,
    "hidden": false,
    "backend_roles": [
      "<Group in LDAP>"
    ],
    "and_backend_roles": []
  }
}

GET _plugins/_security/api/rolesmapping/kibana_user
{
  "kibana_user": {
    "hosts": [],
    "users": [],
    "reserved": false,
    "hidden": false,
    "backend_roles": [
      "kibanauser",
      "<Group in LDAP>"
    ],
    "and_backend_roles": []
  }
}

相关内容