Link Search Menu Expand Document Documentation Menu

字段掩码

如果您不想使用字段级安全性从文档中删除字段,您可以遮蔽其值。目前,字段遮蔽仅适用于基于字符串的字段,并将其值替换为加密哈希。

字段遮蔽与字段级安全性协同工作,基于相同的每个角色、每个索引的原则。您可以允许某些角色以明文形式查看敏感字段,并对其他角色遮蔽它们。带有遮蔽字段的搜索结果可能如下所示

{
  "_index": "movies",
  "_source": {
    "year": 2013,
    "directors": [
      "Ron Howard"
    ],
    "title": "ca998e768dd2e6cdd84c77015feb29975f9f498a472743f159bec6f1f1db109e"
  }
}

设置盐值

您可以在 opensearch.yml 中使用可选的 plugins.security.compliance.salt 设置来配置盐值(用于哈希您的数据的随机字符串)。盐值必须满足以下要求

  • 必须至少包含 16 个字符。
  • 仅使用 ASCII 字符。

以下示例显示了一个盐值

plugins.security.compliance.salt: abcdefghijklmnop

尽管设置盐值是可选的,但强烈建议这样做。

配置字段遮蔽

您可以使用 OpenSearch Dashboards、roles.yml 或 REST API 配置字段遮蔽。

OpenSearch Dashboards

  1. 选择一个角色。
  2. 选择一个索引权限。
  3. 对于匿名化,指定一个或多个字段,然后按 Enter 键。

roles.yml

someonerole:
  index_permissions:
    - index_patterns:
      - 'movies'
      allowed_actions:
        - read
      masked_fields:
        - "title"
        - "genres"

REST API

参见创建角色

(高级)使用替代哈希算法

默认情况下,安全插件使用 BLAKE2b 算法,但您可以使用 JVM 提供的任何哈希算法。此列表通常包括 MD5、SHA-1、SHA-384 和 SHA-512。

您可以在 opensearch.yml 中使用可选的默认遮蔽算法设置 plugins.security.masked_fields.algorithm.default 来覆盖默认算法,如以下示例所示

plugins.security.masked_fields.algorithm.default: SHA-256

OpenSearch 3.x 包含一个错误修复,以正确应用默认的 BLAKE2b 算法。您可以在 OpenSearch 3.x 中覆盖默认算法,以继续在 opensearch.yml 中使用可选的默认遮蔽算法设置 plugins.security.masked_fields.algorithm.default 来生成与 OpenSearch 1.x 和 2.x 相同的遮蔽值,如以下示例所示

plugins.security.masked_fields.algorithm.default: BLAKE2B_LEGACY_DEFAULT

要指定不同的算法,请在 roles.yml 中遮蔽字段后添加它,如下所示

someonerole:
  index_permissions:
    - index_patterns:
      - 'movies'
      allowed_actions:
        - read
      masked_fields:
        - "title::SHA-512"
        - "genres"

(高级)基于模式的字段遮蔽

除了创建哈希值,您还可以使用一个或多个正则表达式和替换字符串来遮蔽字段。语法为 <field>::/<regular-expression>/::<replacement-string>。如果您使用多个正则表达式,结果将从左到右传递,就像在 shell 中使用管道一样,如以下示例所示

hr_employee:
  index_permissions:
    - index_patterns:
      - 'humanresources'
      allowed_actions:
        - read
      masked_fields:
        - 'lastname::/.*/::*'
        - '*ip_source::/[0-9]{1,3}$/::XXX::/^[0-9]{1,3}/::***'
someonerole:
  index_permissions:
    - index_patterns:
      - 'movies'
      allowed_actions:
        - read
      masked_fields:
        - "title::/./::*"
        - "genres::/^[a-zA-Z]{1,3}/::XXX::/[a-zA-Z]{1,3}$/::YYY"

title 语句将字段中的每个字符更改为 *,这样您仍然可以辨别被遮蔽字符串的长度。genres 语句将字符串的前三个字符更改为 XXX,后三个字符更改为 YYY

对审计日志的影响

读取历史功能允许您追踪对文档中敏感字段的读取访问。例如,您可能追踪对客户记录中电子邮件字段的访问。对遮蔽字段的访问将从读取历史中排除,因为用户只看到了字段的哈希值,而不是明文值。