Peter Titov

如何在 3 个简单步骤中从 Elastic 数据中删除 PII

个人身份信息合规性对任何组织来说都是一个日益严峻的挑战。借助 Elastic 直观的 ML 接口和解析功能,可以轻松地从非结构化数据中删除敏感数据。

阅读时间:10 分钟
How to remove PII from your Elastic data in 3 easy steps

个人身份信息 (PII) 合规性对任何组织来说都是一个日益严峻的挑战。无论您身处电子商务、银行、医疗保健还是其他数据敏感的领域,都可能无意中捕获和存储 PII。拥有结构化日志可以轻松快速地识别、删除和保护敏感数据字段;但非结构化消息呢?或者可能是呼叫中心转录?

Elasticsearch 凭借其在机器学习方面的丰富经验,提供了各种选项来引入自定义模型(例如大型语言模型 (LLM))并提供自己的模型。这些模型将有助于实施 PII 脱敏。

如果您想了解更多关于自然语言处理、机器学习和 Elastic 的信息,请务必查看以下相关文章

在本博文中,我们将向您展示如何通过利用 Elasticsearch 在机器学习中加载训练模型以及 Elastic 摄取管道灵活性的能力来设置 PII 脱敏。

具体来说,我们将逐步介绍如何为人员和位置识别设置命名实体识别 (NER)模型,以及如何部署脱敏处理器以进行自定义数据识别和删除。所有这些都将与摄取管道相结合,我们可以在其中使用 Elastic 机器学习和数据转换功能从您的数据中删除敏感信息。

加载训练模型

在开始之前,我们必须将 NER 模型加载到 Elasticsearch 集群中。这可以通过 Docker 和 Elastic Eland 客户端轻松完成。从命令行,让我们通过 git 安装 Eland 客户端

git clone https://github.com/elastic/eland.git

导航到最近下载的客户端

cd eland/

现在让我们构建客户端

docker build -t elastic/eland .

从这里开始,您就可以将训练模型部署到 Elastic 机器学习节点了!请务必替换您的用户名、密码、es-cluster-hostname 和 esport。

如果您使用的是 Elastic Cloud 或已签名证书,只需运行此命令

docker run -it --rm --network host elastic/eland eland_import_hub_model --url https://<username>:<password>@<es-cluster-hostname>:<esport>/ --hub-model-id dslim/bert-base-NER --task-type ner --start

如果您使用的是自签名证书,请运行此命令

docker run -it --rm --network host elastic/eland eland_import_hub_model --url https://<username>:<password>@<es-cluster-hostname>:<esport>/ --insecure --hub-model-id dslim/bert-base-NER --task-type ner --start

从这里,您将见证 Eland 客户端从HuggingFace下载训练模型并将其自动部署到您的集群中!

通过单击机器学习概述 UI 中的蓝色超链接“同步您的作业和训练模型”来同步您新加载的训练模型。

现在,单击“同步”按钮。

就是这样!恭喜您,您刚刚将第一个训练模型加载到 Elastic 中!

创建脱敏处理器和摄取管道

从 DevTools 中,让我们配置脱敏处理器以及推理处理器以利用我们刚刚加载的 Elastic 训练模型。这将创建一个名为“redact”的摄取管道,然后我们可以使用它从任何我们希望的字段中删除敏感数据。在本例中,我将重点关注“message”字段。注意:在撰写本文时,脱敏处理器处于实验阶段,必须通过 DevTools 创建。

PUT _ingest/pipeline/redact
{
  "processors": [
    {
      "set": {
        "field": "redacted",
        "value": "{{{message}}}"
      }
    },
    {
      "inference": {
        "model_id": "dslim__bert-base-ner",
        "field_map": {
          "message": "text_field"
        }
      }
    },
    {
      "script": {
        "lang": "painless",
        "source": "String msg = ctx['message'];\r\n                for (item in ctx['ml']['inference']['entities']) {\r\n                msg = msg.replace(item['entity'], '<' + item['class_name'] + '>')\r\n                }\r\n                ctx['redacted']=msg"
      }
    },
    {
      "redact": {
        "field": "redacted",
        "patterns": [
          "%{EMAILADDRESS:EMAIL}",
          "%{IP:IP_ADDRESS}",
          "%{CREDIT_CARD:CREDIT_CARD}",
          "%{SSN:SSN}",
          "%{PHONE:PHONE}"
        ],
        "pattern_definitions": {
          "CREDIT_CARD": "\d{4}[ -]\d{4}[ -]\d{4}[ -]\d{4}",
          "SSN": "\d{3}-\d{2}-\d{4}",
          "PHONE": "\d{3}-\d{3}-\d{4}"
        }
      }
    },
    {
      "remove": {
        "field": [
          "ml"
        ],
        "ignore_missing": true,
        "ignore_failure": true
      }
    }
  ],
  "on_failure": [
    {
      "set": {
        "field": "failure",
        "value": "pii_script-redact"
      }
    }
  ]
}

好的,但是每个处理器到底做了什么?让我们在这里详细了解每个处理器

  1. SET 处理器创建字段“redacted”,该字段从 message 字段复制而来,并在管道中的后面使用。

  2. INFERENCE 处理器调用我们加载的 NER 模型,用于在 message 字段上识别姓名、位置和组织。

  3. 然后,SCRIPT 处理器替换 message 字段中 redacted 字段中检测到的实体。

  4. 我们的 REDACT 处理器使用 Grok 模式来识别我们希望从 redacted 字段(从 message 字段复制而来)中删除的任何自定义数据集。

  5. REMOVE 处理器删除不必要的 ml.* 字段不被索引;请注意,一旦我们验证数据是否已正确脱敏,我们将向此处理器添加“message”。

  6. ON_FAILURE / SET 处理器捕获任何错误,以防万一我们遇到错误。

切片您的 PII

现在,您的摄取管道已配置了所有必要的步骤,让我们开始测试我们如何从文档中删除敏感数据。导航到堆栈管理,选择摄取管道并搜索“redact”,然后单击结果。

单击“管理”按钮,然后单击“编辑”。

在这里,我们将通过添加一些文档来测试我们的管道。以下是您可以复制和粘贴的示例,以确保一切正常。

{
  "_source":
    {
      "message": "John Smith lives at 123 Main St. Highland Park, CO. His email address is [email protected] and his phone number is 412-189-9043.  I found his social security number, it is 942-00-1243. Oh btw, his credit card is 1324-8374-0978-2819 and his gateway IP is 192.168.1.2",
    },
}

只需按下“运行管道”按钮,您将看到以下输出

下一步是什么?

在将此摄取管道添加到您正在索引的数据集中并验证它是否满足预期后,您可以添加要删除的 message 字段,以便不索引任何 PII 数据。只需更新 REMOVE 处理器以包含 message 字段并再次模拟,即可仅查看 redacted 字段。

结论

通过这种分步方法,您现在可以随时准备并在整个索引中检测和脱敏任何敏感数据。

以下是我们涵盖内容的快速回顾

  • 将预训练的命名实体识别模型加载到 Elastic 集群中
  • 配置脱敏处理器以及推理处理器,以便在数据摄取过程中使用训练模型
  • 测试示例数据并修改摄取管道以安全地删除个人身份信息

准备开始了吗?注册Elastic Cloud 并试用我上面概述的功能和特性,以充分利用您的 OpenTelemetry 数据并获得最大的可见性。

本文中描述的任何功能或功能的发布和时间安排完全由 Elastic 自行决定。任何当前不可用的功能或功能可能无法按时或根本无法交付。

在本博文中,我们可能使用了第三方生成式 AI 工具,这些工具归其各自所有者拥有和运营。Elastic 对第三方工具没有任何控制权,我们不对其内容、操作或使用,也不对您使用此类工具可能产生的任何损失或损害承担任何责任或义务。使用 AI 工具处理个人、敏感或机密信息时,请务必谨慎。您提交的任何数据都可能用于 AI 训练或其他目的。我们无法保证您提供的信息将被安全或保密地保存。在使用任何生成式 AI 工具之前,您应该熟悉其隐私惯例和使用条款。

Elastic、Elasticsearch 和相关标记是 Elasticsearch N.V. 在美国和其他国家/地区的商标、徽标或注册商标。所有其他公司和产品名称是其各自所有者的商标、徽标或注册商标。

分享这篇文章