📢 转载信息
原文作者:Himanshu Dixit, David Zhang, Richard Session, and Viyoma Sachdeva
组织通过各种通信渠道处理着大量的客户敏感信息。保护个人身份信息(PII),如社会安全号码(SSN)、驾驶执照号码和电话号码,对于维护数据隐私法规的合规性以及建立客户信任变得越来越关键。然而,手动审查和编辑PII既耗时、容易出错,而且随着数据量的增长,也很难扩展。
组织在处理分散在不同内容类型(从文本到图像)中的PII时面临挑战。传统方法通常需要针对文本和图像内容使用不同的工具和工作流程,导致编辑实践不一致并可能出现安全漏洞。这种碎片化的方法不仅增加了运营开销,也提高了意外泄露PII的风险。
本文将通过一个处理高容量传入电子邮件及其附件中文本和图像内容的使用案例,展示如何使用 Amazon Bedrock Data Automation 和 Amazon Bedrock Guardrails 实现自动化的PII检测和编辑解决方案。该解决方案包含一个完整的电子邮件处理工作流程,并配有基于React的用户界面,供授权人员更安全地管理和审查编辑后的电子邮件通信和附件。我们将介绍部署此解决方案所采用的分步实施流程。最后,我们将讨论解决方案的优势,包括运营效率、可扩展性、安全性和合规性,以及适应性。
解决方案概述
该解决方案通过以下三个主要功能,提供了一个保护业务通信中敏感信息的自动化系统:
- 自动化的PII检测和编辑:利用 Amazon Bedrock Data Automation 和 Guardrails 对电子邮件内容和附件进行处理,确保敏感数据在不同内容类型中得到一致保护。
- 更安全的数据管理工作流程:以适当的访问控制加密和存储处理后的通信,同时保持操作的完整审计跟踪。
- 基于Web的界面选项:支持自动电子邮件分类和可定制的文件夹管理功能,使授权代理人能够高效地管理已编辑的通信。
这种统一的方法有助于组织在简化通信工作流程的同时,保持对数据隐私要求的合规性。
下图概述了解决方案的架构。 
该图说明了由 AWS Lambda 和 Amazon EventBridge 编排的后端 PII 检测和编辑工作流程以及前端应用程序用户界面。该过程遵循以下步骤:
- 工作流程从用户向托管在 Amazon Simple Email Service (Amazon SES) 上的传入电子邮件服务器发送电子邮件开始。这是一个可选步骤。
- 或者,用户可以直接将电子邮件和附件上传到 Amazon Simple Storage Service (S3) 登陆存储桶中。
- S3 事件通知触发初始处理 AWS Lambda 函数,该函数生成唯一的案例 ID 并在 Amazon DynamoDB 中创建跟踪记录。
- Lambda 编排 PII 检测和编辑工作流程,方法是从电子邮件中提取邮件正文和附件并将其保存到原始邮件存储桶中,随后调用 Amazon Bedrock Data Automation 和 Guardrails 来检测和编辑 PII。
- Amazon Bedrock Data Automation 处理附件以从文件中提取文本。
- Amazon Bedrock Guardrails 从邮件正文和附件文本中检测并编辑 PII,并将编辑后的内容存储在另一个 S3 存储桶中。
- DynamoDB 表使用电子邮件消息、文件夹元数据和电子邮件过滤规则进行更新。
- 使用 Amazon EventBridge Scheduler 按计划运行规则引擎 Lambda,该引擎根据启用的电子邮件过滤规则条件处理尚未分类到文件夹中的新电子邮件。
- 规则引擎 Lambda 还与 DynamoDB 通信,以访问消息表和规则表。
- 用户可以通过 Amazon API Gateway 访问可选的应用程序用户界面,该 API Gateway 管理用户 API 请求并将请求路由到 S3 静态托管以呈现用户界面。用户可以根据其安全要求选择为用户界面启用身份验证。或者,用户可以在 DynamoDB 表和带有 PII 已编辑内容的 S3 存储桶中查看其电子邮件处理状态。
- Portal API Lambda 根据用户请求获取案例详细信息。
- API Gateway 提供的静态资源存储在私有 S3 存储桶中。
- 可以选择启用 Amazon CloudWatch 和 AWS CloudTrail,为 PII 检测和编辑过程提供可见性,同时使用 Amazon Simple Notification Service 交付任何失败的实时警报,从而有助于立即关注问题。
在接下来的部分中,我们将介绍实施此解决方案的步骤。
演练
解决方案的实施涉及基础设施和可选的门户设置。
先决条件
在开始实施之前,请确保已安装并配置了以下组件。
- 一个 AWS 账户
- Git
- Python 3.7 或更高版本
- Node v18 或更高版本
- NPM v9.8 或更高版本
- AWS CDK v2.166 或更高版本
- 终端/CLI,如 macOS 终端、PowerShell 或 Windows 终端,或 Linux 命令行。AWS CloudShell 也可以在所有代码都位于 AWS 账户内时使用。
基础设施设置和部署过程
请验证在您的 AWS 账户中是否已创建包含三个私有子网且没有互联网访问权限的现有虚拟私有云 VPC。所有 AWS CloudFormation 堆栈都需要在同一个 AWS 账户中部署。
CloudFormation 堆栈
该解决方案包含三个堆栈(两个必需,一个可选),将在您的 AWS 账户中部署:
- S3Stack – 调配核心基础设施,包括用于原始和已编辑邮件存储的 S3 存储桶(带有自动生命周期策略)、用于邮件元数据跟踪的 DynamoDB 表(带有 TTL 和全局二级索引)以及用于更安全地访问 Lambda 函数的 VPC 安全组。它还会创建 Amazon Identity and Access Management (IAM) 角色,提供对 S3、DynamoDB 和 Bedrock 服务的全面权限,为整个 PII 检测和编辑工作流程奠定更安全的基础。
- ConsumerStack – 调配核心处理基础设施,包括用于文档文本提取的 Amazon Bedrock Data Automation 项目和配置为匿名化全面 PII 实体的 Bedrock Guardrails,以及用于电子邮件和附件处理的 Lambda 函数(带有用于成功/失败通知的 Amazon Simple Notification Service (SNS) 主题)。它还会创建 Amazon Simple Email Service (SES) 接收规则,用于在配置了域时处理传入电子邮件,以及 S3 事件通知以自动触发电子邮件处理工作流程。
- PortalStack (可选) – 仅在用户希望使用基于 Web 的用户界面管理电子邮件时才需要此项。它调配可选的 Web 界面,包括区域 API Gateway、用于存储已编辑消息的 DynamoDB 表以及用于静态 Web 资源的 S3 存储桶。
Amazon SES (可选)
如果您不使用 Amazon SES,请直接跳到接下来的“解决方案部署”部分。
以下 Amazon SES 设置是可选的。也可以在没有此设置的情况下测试代码。在“测试”部分涵盖了有/无 Amazon SES 测试应用程序的步骤。
使用生产访问权限设置 Amazon SES,并验证解决方案将要使用的域/电子邮件身份。我们还需要在维护域的 DNS 提供商中添加 MX 记录。请参阅以下链接:
为 SMTP 创建凭证并将其保存在 AWS Secrets Manager 密钥中,名称为 SmtpCredentials。为此过程创建了一个 IAM 用户。
如果密钥使用了任何其他名称,请使用所创建密钥的名称更新 context.json 文件中的 secret_name 行。
在 AWS Secrets Manager 中存储用户名和密码的密钥应分别为 smtp_username 和 smtp_password。
解决方案部署
请从终端/CLI 环境中运行以下命令。
- 克隆存储库
git clone https://github.com/aws-samples/sample-bda-redaction.git infra/cdk.json文件告诉 CDK Toolkit 如何执行您的应用程序cd sample-bda-redaction/infra/- 可选: 创建并激活一个新的 Python 虚拟环境(确保使用 python 3.12,因为 CDK 中的 lambda 已为此配置。如果使用其他 Python 版本,请更新 CDK 代码以反映 Lambda 运行时中的相同设置)
python3 -m venv .venv . .venv/bin/activate - 升级 pip
pip install --upgrade pip - 安装 Python 包
pip install -r requirements.txt - 创建
context.json文件cp context.json.example context.json - 使用正确的环境配置选项更新
context.json文件。
| 属性名称 | 默认值 | 描述 | 创建时机 |
|---|---|---|---|
vpc_id |
“” | 部署资源的 VPC ID | VPC 需要在执行前创建 |
raw_bucket |
“” | 存储原始消息和附件的 S3 存储桶 | CDK 部署期间创建 |
redacted_bucket_name |
“” | 存储已编辑消息和附件的 S3 存储桶 | CDK 部署期间创建 |
inventory_table_name |
“” | 存储已编辑消息详细信息的 DynamoDB 表名 | CDK 部署期间创建 |
resource_name_prefix |
“” | 堆栈创建期间用于命名资源的前缀 | 堆栈创建期间 |
retention |
90 | 已编辑和原始 S3 存储桶中消息的保留天数 | 堆栈创建期间 |
- 以下属性仅在调配门户时需要。
| 属性名称 | 默认值 | 描述 |
|---|---|---|
environment |
development | 资源调配的环境类型。值为 development 或 production |
- 需要使用 Amazon SES 来管理已编辑电子邮件消息的使用案例需要设置以下配置变量。否则,这些是可选的。
| 属性名称 | 描述 | 备注 |
|---|---|---|
domain |
用于 Amazon SES 的已验证域名或电子邮件名称 | 如果未设置 Amazon SES,可以留空 |
auto_reply_from_email |
电子邮件消息“发件人”字段的电子邮件地址。也用作从 Portal 应用程序转发电子邮件的电子邮件地址 | 如果未设置 Portal,可以留空 |
secret_name |
包含用于从门户转发电子邮件功能的 SMTP 凭证的 AWS Secrets Manager 密钥 |
- 通过在infra目录的根目录运行以下命令来部署基础设施。
- 为使用 AWS CDK 引导 AWS 账户
cdk bootstrap - 用户现在可以合成此代码的 CloudFormation 模板。在
cdk synth之前添加额外的环境变量会抑制警告。部署过程对于首次部署大约需要 10 分钟才能完成。JSII_DEPRECATED=quiet JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=quiet cdk synth --no-notices - 将
<<resource_name_prefix>>替换为您选择的值,然后运行:JSII_DEPRECATED=quiet JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=quiet cdk deploy <<resource_name_prefix>>-S3Stack <<resource_name_prefix>>-ConsumerStack --no-notices
- 为使用 AWS CDK 引导 AWS 账户
测试
- 使用 Amazon SES 测试应用程序
在开始测试之前,请确保 <<resource_name_prefix>>-ConsumerStack 堆栈创建的 Amazon SES 电子邮件接收规则集处于活动状态。我们可以通过执行以下命令进行检查,并确保输出中的名称是 <<resource_name_prefix>>-rule-set:aws ses describe-active-receipt-rule-set。如果名称不匹配或输出为空,请执行以下命令以激活它:
# 将 <<resource_name_prefix>> 替换为 context.json 中使用的 resource_name_prefix
aws ses set-active-receipt-rule-set --rule-set-name <<resource_name_prefix>>-rule-set
正确规则集激活后,我们可以通过向 Amazon SES 中验证的电子邮件或域发送电子邮件来使用 Amazon SES 测试应用程序,这将自动触发编辑管道。可以在 DynamoDB 表 <<inventory_table_name>> 中跟踪进度。每个正在处理的电子邮件在 DynamoDB 库存表中都会生成一个唯一的 <<case_id>>。库存表名称可以在 <<resource_name_prefix>>-S3Stack 堆栈的 AWS CloudFormation 控制台资源选项卡中找到,逻辑 ID 为 EmailInventoryTable。一旦编辑完成,编辑后的邮件正文可以在 <<redacted_bucket_name>>/redacted/<<today_date>>/<<case_id>>/email_body/ 中找到,编辑后的附件可以在 <<redacted_bucket_name>>/redacted/<<today_date>>/<<case_id>>/attachments/ 中找到。
- 在没有 Amazon SES 的情况下测试应用程序
如前所述,该解决方案用于编辑邮件正文和附件中的任何 PII 数据。因此,为了测试应用程序,我们需要提供一个需要编辑的电子邮件文件。我们可以在没有 Amazon SES 的情况下通过直接将电子邮件文件上传到原始 S3 存储桶来实现此目的。可以在 <<resource_name_prefix>>-S3Stack 堆栈的 AWS CloudFormation 控制台输出选项卡中找到原始存储桶名称,导出名称为 RawBucket。这会触发 S3 事件通知调用 Lambda 来编辑邮件正文和附件的工作流程。为方便起见,存储库的 infra/pii_redaction/sample_email 目录中提供了示例电子邮件。以下是在没有 Amazon SES 的情况下使用同一电子邮件文件测试应用程序的步骤。
# 将 <<raw_bucket>> 替换为部署期间创建的原始存储桶名称
aws s3 cp pii_redaction/sample_email/ccvod0ot9mu6s67t0ce81f8m2fp5d2722a7hq8o1 s3://<<raw_bucket>>/domain_emails/
上述命令会触发电子邮件处理的编辑过程。您可以在 DynamoDB 表 <<inventory_table_name>> 中跟踪进度。每个正在处理的电子邮件在 DynamoDB 库存表中都会生成一个唯一的 <<case_id>>。库存表名称可以在 <<resource_name_prefix>>-S3Stack 堆栈的 AWS CloudFormation 控制台资源选项卡中找到,逻辑 ID 为 EmailInventoryTable。一旦编辑完成,编辑后的邮件正文可以在 <<redacted_bucket_name>>/redacted/<<today_date>>/<<case_id>>/email_body/ 中找到,编辑后的附件可以在 <<redacted_bucket_name>>/redacted/<<today_date>>/<<case_id>>/attachments/ 中找到。
门户设置
门户的安装是完全可选的。可以跳过此部分;请检查部署解决方案的 AWS 账户控制台以查看创建的资源。门户是用于管理由后端 AWS 基础设施处理的 PII 已编辑电子邮件的 Web 界面,允许用户查看经过清理的电子邮件内容。门户可用于:
- 列出消息:查看已编辑内容的已处理电子邮件
- 消息详情:查看单个电子邮件内容和附件
门户先决条件:此门户需要安装以下软件工具:
- TypeScript
- Node v18 或更高版本
- NPM v9.8 或更高版本
基础设施部署
- 通过导航到解决方案的目录根目录,合成此代码的 CloudFormation 模板。然后运行以下命令:
cd sample-bda-redaction/infra/ - 可选:创建并激活一个新的 Python 虚拟环境(如果尚未创建虚拟环境):
python3 -m venv .venv. .venv/bin/activatepip install -r requirements.txt - 用户现在可以合成此代码的 CloudFormation 模板。
JSII_DEPRECATED=quiet JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=quiet cdk synth --no-notices - 部署基于 React 的门户。替换
<<resource_name_prefix>>为您选择的值:JSII_DEPRECATED=quiet JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=quiet cdk deploy <<resource_name_prefix>>-PortalStack --no-notices
首次部署大约需要 10 分钟才能完成。
环境变量
- 通过导航到
app目录的根目录,创建一个新的环境文件,并使用以下命令更新.env文件中的以下变量(通过将.env.example文件复制到.env):cp .env.example .env - 也可以使用您喜欢的文本编辑器创建该文件。
| 环境变量名称 | 默认值 | 描述 | 必需 |
|---|---|---|---|
VITE_APIGW |
“” | API Gateway 调用 URL(包括协议),不包含路径(从值中删除 /portal)。此值可以在通过 AWS CDK 部署 PortalStack 后在 AWS CDK 的输出中找到。它也可以在 PortalStack CloudFormation 堆栈的“输出”选项卡下,在导出名称 PiiPortalApiGatewayInvokeUrl 中找到 |
是 |
VITE_BASE |
/portal | 它指定用于请求渲染门户所需的静态文件的路径 | 是 |
VITE_API_PATH |
/api | 它指定用于向 API Gateway 发送请求所需的路径 | 是 |
门户部署
请从终端/CLI 环境中运行以下命令。
- 在运行以下任何命令之前,请导航到
app目录的根目录,通过运行以下命令为生产环境构建此应用程序:- 安装 NPM 包
npm install - 构建文件
npm run build
- 安装 NPM 包
- 构建成功后,将
dist/目录中的所有文件传输到指定用于这些资产的 Amazon S3 存储桶中(通过 CDK 调配的 PortalStack 中指定)。- 示例:
aws s3 sync dist/ s3://<<name-of-s3-bucket>> --delete<<name-of-s3-bucket>>是在<<resource-name-prefix>>-PortalStackCloudFormation 堆栈中具有逻辑 IDPrivateWebHostingAssets的 S3 存储桶。该值可以在 AWS 控制台的 CloudFormation 堆栈的“资源”选项卡中获取。该值也在成功完成 PortalStack 的cdk deploy过程中输出。
- 示例:
访问门户
使用在 cdk deploy 过程中创建的 API Gateway 的 API Gateway 调用 URL,从 Web 浏览器访问门户。此 URL 可通过以下步骤找到:
- 访问 AWS 控制台
- 转到 API Gateway,找到在
cdk deploy过程中创建的 API Gateway。API Gateway 的名称可以在<<resource_name_prefix>>-PortalStackCloudFormation 堆栈的“资源”部分中找到。 - 点击左侧菜单中的 Stages 链接。
- 确保选择了 portal 阶段。
- 找到 Invoke URL 并复制该值。
- 将该值输入到 Web 浏览器的地址栏中。
现在可以在 Web 浏览器中看到门户的用户界面。如果已处理任何电子邮件,它们将列在门户的主页上。
访问控制(可选)
对于生产部署,我们推荐这些方法来控制和管理对门户的访问。
清理
为避免产生后续费用,请按照以下步骤删除此解决方案创建的资源:
- 删除解决方案创建的 S3 存储桶的内容:
- 原始邮件存储桶
- 已编辑邮件存储桶
- 门户静态资产存储桶(如果部署了门户)
- 使用以下 CLI 命令删除或禁用解决方案创建的 Amazon SES 规则步骤:
#要禁用规则集,请使用以下命令 aws ses set-active-receipt-rule-set #要删除规则集,请使用以下命令 # 将 <<resource_name_prefix>> 替换为 context.json 中使用的 resource_name_prefix aws ses delete-receipt-rule-set --rule-set-name <resource_name_prefix>>-rule-set - 按以下顺序删除 CloudFormation 堆栈:
cdk destroy <<resource_name_prefix>>-PortalStack (if deployed) cdk destroy <<resource_name_prefix>>-ConsumerStack cdk destroy <<resource_name_prefix>>-S3Stack - CDK Destroy 不会删除作为部署一部分创建的访问日志 Amazon S3 存储桶。用户可以... [内容被截断]
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区