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) 模型,以及部署用于自定义数据识别和删除的 redact 处理器。然后,所有这些都将与摄取管道结合使用,在该管道中,我们可以使用 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 中!

创建 redact 处理器和摄取管道

从 DevTools 中,让我们配置 redact 处理器和我们的推理处理器,以利用我们刚刚加载的 Elastic 训练模型。这将创建一个名为“redact”的摄取管道,然后我们可以使用该管道从我们希望的任何字段中删除敏感数据。在此示例中,我将重点关注“message”字段。注意:在撰写本文时,redact 处理器是实验性的,必须通过 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 集群中
  • 配置 Redact 处理器以及推理处理器,以便在数据摄取期间使用训练模型
  • 测试样本数据并修改摄取管道以安全删除个人身份信息

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

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

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

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