我们最近将 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": []
}
}