Security和Roles II

添加权限

到目前为止我们已经创建了一个新用户、一个受限角色,并将用户映射到该角色。在本节中,我们将为 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.srcurlstatusclientip,我们需要单独键入这些字段名称并在每个字段名称后按 Enter。不要复制/粘贴

Anonymization部分中,输入 clientip,然后单击更新

登录到restricted-user运行以下查询:

GET web-logs/_search
{
  "query": {
    "match_all": {}
  }
}

image-20240617200129392

请注意,现在用户只能看到指定的字段。现在,用户不仅被限制查看的文档,而且还被限制查看这些文档中的字段

由于我们将 clientip 字段添加到Anonymization部分,因此该字段的实际值将被哈希并模糊化,不会显示给用户。但是,这些哈希值是确定性的,因此相同的字段值将被哈希为相同的哈希结果。当处理敏感数据(如用户电子邮件地址)时,这可能是有用的功能。