字段级安全
字段级安全性允许您控制用户可以查看哪些文档字段。就像文档级安全性一样,您可以通过角色内的索引控制访问。
开始使用文档级和字段级安全性的最简单方法是打开 OpenSearch Dashboards 并选择 Security。然后选择 Roles,创建一个新角色,并查看 Index permissions 部分。
目录
包含或排除字段
配置字段级安全性时,您有两种选择:包含或排除字段。如果您包含字段,用户在检索文档时只会看到这些字段。例如,如果您包含 actors
、title
和 year
字段,搜索结果可能如下所示
{
"_index": "movies",
"_source": {
"year": 2013,
"title": "Rush",
"actors": [
"Daniel Brühl",
"Chris Hemsworth",
"Olivia Wilde"
]
}
}
如果您排除字段,用户在检索文档时会看到除这些字段之外的所有内容。例如,如果您排除相同的字段,相同的搜索结果可能如下所示
{
"_index": "movies",
"_source": {
"directors": [
"Ron Howard"
],
"plot": "A re-creation of the merciless 1970s rivalry between Formula One rivals James Hunt and Niki Lauda.",
"genres": [
"Action",
"Biography",
"Drama",
"Sport"
]
}
}
您可以使用包含或排除来实现相同的效果,因此请选择适合您用例的方式。混合使用这两种方式没有意义,也不受支持。
您可以使用 OpenSearch Dashboards、roles.yml
和 REST API 指定字段级安全设置。
- 要在
roles.yml
或 REST API 中排除字段,请在字段名称前添加~
。 -
字段名称支持通配符 (
*
)。通配符对于排除子字段特别有用。例如,如果您索引一个包含字符串的文档(例如
{"title": "Thor"}
),OpenSearch 会创建一个类型为text
的title
字段,但它也会创建一个类型为keyword
的title.keyword
子字段。在此示例中,为了防止未经授权访问title
字段中的数据,您还必须排除title.keyword
子字段。使用title*
以匹配所有以title
开头的字段。
OpenSearch Dashboards
- 选择一个角色并点击 Add index permission。
- 选择一个索引模式。
- 在 Field level security 下,使用下拉菜单选择您偏好的选项。然后指定一个或多个字段并按 Enter 键。
roles.yml
someonerole:
cluster: []
indices:
movies:
'*':
- "READ"
_fls_:
- "~actors"
- "~title"
- "~year"
REST API
参见创建角色。
与多个角色的交互
如果您将用户映射到多个角色,我们建议这些角色对每个索引使用包含或排除语句。安全插件使用 AND
运算符评估字段级安全设置,因此合并包含和排除语句可能导致两者都无法正常工作。
例如,在 movies
索引中,如果您在一个角色中包含 actors
、title
和 year
,在另一个角色中排除 actors
、title
和 genres
,然后将这两个角色都映射到同一个用户,搜索结果可能如下所示
{
"_index": "movies",
"_source": {
"year": 2013,
"directors": [
"Ron Howard"
],
"plot": "A re-creation of the merciless 1970s rivalry between Formula One rivals James Hunt and Niki Lauda."
}
}
与文档级安全性的交互
文档级安全性依赖于 OpenSearch 查询,这意味着查询中的所有字段都必须可见才能正常工作。如果您将字段级安全性与文档级安全性结合使用,请确保不要限制文档级安全性所使用的字段的访问。