到目前为止我们已经创建了一个新用户、一个受限角色,并将用户映射到该角色。在本节中,我们将为 restricted-role
自定义角色添加权限。这将允许 restricted-user
用户帐户访问 web-logs
索引并搜索数据。
在我们的主浏览器选项卡中,单击编辑角色按钮
在索引权限下,在索引字段中输入 web-log*
,从索引权限下拉菜单中选择 data-access
权限组,然后单击更新
我们刚刚为我们的角色授予了对 web-logs*
索引的完全数据访问权限。可以在 OpenSearch 文档
中查看所有预定义的索引和集群级别权限组及其授予的内容
现在,并尝试重新发出之前被拒绝的查询:
GET web-logs/_count
{
"query": {
"match_all": {}
}
}
现在我们已经拥有权限,我们现在可以看到 web-logs
索引中的总文档数。
到目前为止,我们已经为 restricted-user
帐户授予了一组基本权限,允许查询 web-logs
索引中的所有文档。现在,我们将探索一些更高级和更细粒度的权限,即文档级安全性
和字段级安全性
。
单击 restricted-role
角色页面内的Edit role按钮
将以下数据粘贴到Document level security部分中,然后单击底部的更新按钮:
{
"bool": {
"must": [
{
"match": {
"geo.src": "US"
}
}
]
}
}
将此角色的所有查询限制为仅显示 geo.src = US
的文档。所有其他文档对此用户的所有搜索结果都将被隐藏。
登录到restricted-user
帐户,并重新发出之前的计数查询:
GET web-logs/_count
{
"query": {
"match_all": {}
}
}
请注意,文档计数明显低于之前。这是因为返回的是 geo.src = US
的文档。要验证这一点,请运行以下查询:
GET web-logs/_search
{
"query": {
"match_all": {}
}
}
此角色的任何成员都不知道索引中存在任何其他文档。应用的限制对他们与 OpenSearch 的交互是完全透明的。
除了文档级安全性 之外,OpenSearch 还允许我们根据单个字段进行过滤,称为字段级安全性 。
单击 restricted-role
角色页面内的Edit role按钮
在Field level security部分中,输入 geo.src
、url
、status
和 clientip
,我们需要单独键入这些字段名称并在每个字段名称后按 Enter。不要复制/粘贴
在Anonymization部分中,输入 clientip
,然后单击更新
登录到restricted-user
运行以下查询:
GET web-logs/_search
{
"query": {
"match_all": {}
}
}
请注意,现在用户只能看到指定的字段。现在,用户不仅被限制查看的文档,而且还被限制查看这些文档中的字段。
由于我们将 clientip
字段添加到Anonymization部分,因此该字段的实际值将被哈希并模糊化,不会显示给用户。但是,这些哈希值是确定性的,因此相同的字段值将被哈希为相同的哈希结果。当处理敏感数据(如用户电子邮件地址)时,这可能是有用的功能。