多租户配置
OpenSearch Dashboards 默认启用多租户功能。如果需要禁用或更改与多租户相关的设置,请参阅 config/opensearch-security/config.yml
中的 kibana
设置,示例如下:
config:
dynamic:
kibana:
multitenancy_enabled: true
private_tenant_enabled: true
default_tenant: global tenant
server_username: kibanaserver
index: '.kibana'
do_not_fail_on_forbidden: false
设置 | 描述 |
---|---|
multitenancy_enabled | 启用或禁用多租户。默认值为 true 。 |
private_tenant_enabled | 启用或禁用私有租户。默认值为 true 。 |
default_tenant | 用于设置用户登录时可用的租户。 |
server_username | 必须与 opensearch_dashboards.yml 中 OpenSearch Dashboards 服务器用户的名称匹配。默认值为 kibanaserver 。如果配置了不同的用户,请确保通过 role_mappings.yml 文件将该用户映射到 kibana_server 角色,以便授予他们 kibana_server 角色详情中列出的相应权限。 |
index | 必须与 opensearch_dashboards.yml 中 OpenSearch Dashboards 索引的名称匹配。默认值为 .kibana 。 |
do_not_fail_on_forbidden | 当为 true 时,安全插件会从搜索结果中删除用户无权查看的任何内容。当为 false 时,插件会返回安全异常。默认值为 false 。 |
opensearch_dashboards.yml
文件包含其他设置:
opensearch.username: kibanaserver
opensearch.password: kibanaserver
opensearch.requestHeadersAllowlist: ["securitytenant","Authorization"]
opensearch_security.multitenancy.enabled: true
opensearch_security.multitenancy.tenants.enable_global: true
opensearch_security.multitenancy.tenants.enable_private: true
opensearch_security.multitenancy.tenants.preferred: ["Private", "Global"]
opensearch_security.multitenancy.enable_filter: false
设置 | 描述 |
---|---|
opensearch.requestHeadersAllowlist | OpenSearch Dashboards 要求您将所有 HTTP 头部添加到允许列表中,以便头部能够传递到 OpenSearch。多租户功能使用一个特定的头部 securitytenant ,该头部必须与标准的 Authorization 头部一起存在。如果 securitytenant 头部不在允许列表中,OpenSearch Dashboards 将以红色状态启动。 |
opensearch_security.multitenancy.enabled | 在 OpenSearch Dashboards 中启用或禁用多租户。默认值为 true 。 |
opensearch_security.multitenancy.tenants.enable_global | 启用或禁用全局租户。默认值为 true 。 |
opensearch_security.multitenancy.tenants.enable_private | 启用或禁用私有租户。默认值为 true 。 |
opensearch_security.multitenancy.tenants.preferred | 允许您更改 OpenSearch Dashboards 中租户选项卡的排序。默认情况下,列表以全局和私有(如果启用)开头,然后按字母顺序排列。您可以在此处添加租户以将其移至列表顶部。 |
opensearch_security.multitenancy.enable_filter | 如果您有许多租户,可以在列表顶部添加一个搜索栏。默认值为 false 。 |
添加租户
要创建租户,请使用 OpenSearch Dashboards、REST API 或 tenants.yml
。
OpenSearch Dashboards
- 打开 OpenSearch Dashboards。
- 选择 Security、Tenants 和 Create tenant。
- 为租户命名并添加描述。
- 选择 Create。
REST API
请参阅创建租户。
tenants.yml
---
_meta:
type: "tenants"
config_version: 2
## Demo tenants
admin_tenant:
reserved: false
description: "Demo tenant for admin user"
授予角色访问租户的权限
创建租户后,使用 OpenSearch Dashboards、REST API 或 roles.yml
为角色授予访问权限。
- 读写(
kibana_all_write
)权限允许该角色查看和修改租户中的对象。 - 只读(
kibana_all_read
)权限允许该角色查看对象,但不能修改它们。
OpenSearch Dashboards
- 打开 OpenSearch Dashboards。
- 选择 Security、Roles 和一个角色。
- 对于租户权限,添加租户,按 Enter 键,并授予该角色读写权限。
REST API
参见创建角色。
roles.yml
---
test-role:
reserved: false
hidden: false
cluster_permissions:
- "cluster_composite_ops"
- "indices_monitor"
index_permissions:
- index_patterns:
- "movies*"
dls: ""
fls: []
masked_fields: []
allowed_actions:
- "read"
tenant_permissions:
- tenant_patterns:
- "human_resources"
allowed_actions:
- "kibana_all_read"
static: false
_meta:
type: "roles"
config_version: 2
管理 OpenSearch Dashboards 索引
OpenSearch Dashboards 的开源版本将所有对象保存到一个索引中:.kibana
。安全插件将此索引用于全局租户,但为每个其他租户使用单独的索引。每个用户也有一个私有租户,因此您可能会看到大量遵循两种模式的索引:
.kibana_<hash>_<tenant_name>
.kibana_<hash>_<username>
安全插件会清除这些索引名称中的特殊字符,因此它们可能与租户名称和用户名不完全匹配。
要备份您的 OpenSearch Dashboards 数据,请使用诸如 .kibana*
的索引模式拍摄所有租户索引的快照。
kibana_server
角色详情
OpenSearch Dashboards 使用 kibana_server
角色来执行必要的 OpenSearch 操作。默认情况下,kibanauser
通过 role_mappings.yml
文件映射到此角色。您可以通过向 _plugins/_security/api/roles/kibana_server
API 发送 GET 请求(在 GET 请求中包含管理员证书、密钥和证书颁发机构文件)来查看分配给此角色的完整权限列表。以下列表包含分配给此角色的权限:
{
"kibana_server" : {
"reserved" : true,
"hidden" : false,
"description" : "Provide the minimum permissions for the Kibana server",
"cluster_permissions" : [
"cluster_monitor",
"cluster_composite_ops",
"manage_point_in_time",
"indices:admin/template*",
"indices:admin/index_template*",
"indices:data/read/scroll*"
],
"index_permissions" : [
{
"index_patterns" : [
".kibana",
".opensearch_dashboards"
],
"fls" : [ ],
"masked_fields" : [ ],
"allowed_actions" : [
"indices_all"
]
},
{
"index_patterns" : [
".kibana-6",
".opensearch_dashboards-6"
],
"fls" : [ ],
"masked_fields" : [ ],
"allowed_actions" : [
"indices_all"
]
},
{
"index_patterns" : [
".kibana_*",
".opensearch_dashboards_*"
],
"fls" : [ ],
"masked_fields" : [ ],
"allowed_actions" : [
"indices_all"
]
},
{
"index_patterns" : [
".tasks"
],
"fls" : [ ],
"masked_fields" : [ ],
"allowed_actions" : [
"indices_all"
]
},
{
"index_patterns" : [
".management-beats*"
],
"fls" : [ ],
"masked_fields" : [ ],
"allowed_actions" : [
"indices_all"
]
},
{
"index_patterns" : [
"*"
],
"fls" : [ ],
"masked_fields" : [ ],
"allowed_actions" : [
"indices:admin/aliases*"
]
}
],
"tenant_permissions" : [ ],
"static" : true
}
}