在 Amazon Aurora 中使用 Amazon Comprehend 检测个人可识别信息PI
  • 16

在 Amazon Aurora 中使用 Amazon Comprehend 检测 PII 数据

关键要点

在本文中,我们展示了如何构建一个机制来自动检测关键信息,特别是个人身份信息PII,在您的关系数据库中进行管理。使用 Amazon Comprehend,可以自动检测 PII 数据。我们构建的机制完全透明于应用层,不需要代码更改。重要的是要考虑工作负载的规模以及数据库操作的效率。

在这篇文章中,我们将介绍如何使用 Amazon Aurora 和 Amazon Comprehend 一起工作,通过数据库触发器和事件来实现对 PII 数据的自动检测,并通过 AWS Lambda 和 Amazon Simple Notification ServiceAmazon SNS实现通知。

解决方案概述

本文将使用 Amazon Aurora MySQL 兼容版 进行测试,该方案同样适用于 Amazon Aurora PostgreSQL 兼容版 和 Amazon RDS 中的 PostgreSQL、MySQL 和 MariaDB。

以下图示展示了集成机制的架构:

组件与流程

该架构的组件和流程如下:

应用程序在监控的表中插入数据。数据库触发器在插入时运行,并将行复制到中间表。数据库定时事件运行,并读取所有中间表的行。数据库事件同步调用 Lambda 函数,将 ROW 数据作为负载。Lambda 函数调用 Amazon Comprehend API 检测数据负载中的 PII。Lambda 函数将检测结果记录到 Amazon CloudWatch 中进行日志记录和审计。如果检测到 PII,Lambda 函数将调用 Amazon SNS 发送通知给指定用户。

应用场景和实现

创建一个表和列

为了自动检测 PII,您需要在自己的 Aurora 数据库中创建相应的表和列。以下是创建表的 SQL 语句:

sqlCREATE TABLE piidetection ( id INT NOT NULL AUTOINCREMENT col1 TEXT col2 TEXT PRIMARY KEY (id))

此场景中,您可以在 piidetection 表上创建触发器,并将列 col1 和 col2 作为 JSON 对象传递到 Lambda 函数中。通过使用中间表,您还可以显著降低对原始事务的阻塞,因为该触发器只负责将新插入或更新的数据复制到中间表。

创建 SNS 主题

请参考 Creating an Amazon SNS topic 创建一个 SNS 主题,该主题将向指定人员转发通知以进行进一步调查和操作。

创建 Lambda 函数

下一步是为该机制创建 Lambda 函数。您需要首先创建一个 AWS Identity and Access ManagementIAM角色,以授予 Lambda 函数访问 Amazon Comprehend 和 Amazon SNS 服务的权限。以下是 Lambda 函数的示例代码:

pythonimport jsonimport boto3

comprehend = boto3client(comprehend)sns = boto3client(sns)

免费好用加速器

snstopicarn = arnawssns

def lambdahandler(event context) piifields = [] rawdata = event for key in event keyval = str(event[key]) if keyval if key == id rowid = keyval continue

        response = comprehenddetectpiientities(Text=keyval LanguageCode=en)        if response[Entities]            piifieldsappend(key)if piifields    piidata = fPII data found for ROW with ID [[[ { rowid } ]]] in the following fields { piifields }    response = snspublish(TopicArn=snstopicarn Message=jsondumps(piidata))    print(fPII data FOUND in fields { piifields } with row id { rowid })else    print(fPII data NOT found with row id { rowid })return {    statusCode 200    body Data checked for PII successfully}

配置 Aurora 调用 Lambda 函数

您需要为 AWS Service rds 创建一个 IAM 角色,以允许 Aurora 调用您创建的 Lambda 函数。以下权限策略提供了用于调用 Lambda 的权限:

json{ Version 20121017 Statement [ { Sid RDStoPII Action lambdaInvokeFunction Resource arnawslambdaltregiongtltaccountidgtfunctionltlambdafunctionnamegt Effect Allow } ]}

设置数据库触发器

以下是您将用于在 piidetection 表上插入时运行的触发器的代码:

sqlDELIMITER CREATE TRIGGER piidetectionqueuetriggerinsert AFTER INSERT ON piidetection FOR EACH ROWBEGIN INSERT INTO piidetectionqueue(id col1 col2) VALUES (newid newcol1 newcol2)ENDDELIMITER

设置数据库事件

接下来,您需要设置数据库事件:

sqlDELIMITER CREATE EVENT IF NOT EXISTS detectpiiON SCHEDULE EVERY 1 MINUTEDOBEGIN DECLARE done INT DEFAULT FALSE DECLARE idval INT DECLARE col1val col2val TEXT DECLARE cur CURSOR FOR SELECT id col1 col2 FROM piidetectionqueue

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUEDECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ENDOPEN curreadloop LOOP    FETCH cur INTO idval col1val col2val    IF done THEN        LEAVE readloop    END IF   SET jsonobject = JSONOBJECT(     id idval     col1 col1val     col2 col2val   )    SELECT lambdaasync(@lambdaarn @jsonobject) INTO @result    DELETE FROM piidetectionqueue WHERE id = idvalEND LOOPCLOSE cur

ENDDELIMITER

测试自动 PII 检测机制

现在,您需要测试机制的功能。连接到数据库并运行几个 INSERT 查询,以验证功能:

sqlINSERT INTO piidetection (col1 col2) VALUES (This entry contains no PII No notification expected)INSERT INTO piidetection (col1 col2) VALUES (This entry contains PII John Doe)

根据 CloudWatch 日志,确认您收到了 PII 检测的通知。

清理

要从数据库中删除自动 PII 检测机制,您需要删除所有构建块。

在 Amazon Aurora 中使用 Amazon Comprehend 检测个人可识别信息PI删除您创建的触发器和事件。删除中间表和 SNS 主题。删除您所创建的 IAM 角色。

结论

通过本篇文章,您已经配置了 Aurora MySQL 数据库以检测 PII 数据并发送通知。此机制将数据库触发器和事件结合使用,可在监测到 PII 数据时触发 Lambda 函数。

如有任何问题或建议,请在评论区留言。