教程:使用 S3 Object Lambda 和 Amazon Comprehend 检测和修订 PII 数据 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

教程:使用 S3 Object Lambda 和 Amazon Comprehend 检测和修订 PII 数据

将 Amazon S3 用于多个应用程序和用户访问的共享数据集时,请务必将特权信息(如个人身份信息 (PII))限制为仅授权实体。例如,当营销应用程序使用某些包含 PII 的数据时,可能需要首先掩盖 PII 数据以满足数据隐私要求。此外,分析应用程序使用生产订单清单数据集时,可能需要首先编辑客户信用卡信息,防止意外的数据泄露。

S3 Object Lambda 和预构建的 Amazon Lambda 函数,您可以在将从 S3 检索 Amazon Comprehend 的 PII 数据返回到应用程序之前进行保护。具体来说,您可以使用预构建的 Lambda 函数作为编校函数,并将其附加到 S3 Object Lambda 访问点。应用程序(例如,分析应用程序)发送标准 S3 GET 请求时,这些通过 S3 Object Lambda 访问点发出的请求将调用预构建的编辑 Lambda 函数,检测和修订通过支持的 S3 访问点从 S3 存储桶检索到的 PII 数据。然后,S3 Object Lambda 访问点将修订的结果返回到 应用程序 。

在此过程中,无论 PII 在文本中的存在方式如何(例如,数字或单词和数字的组合),预构建的 Lambda 函数均使用 Amazon Comprehend,这是一种自然语言处理 (NLP) 服务,用于捕获 PII 表示方式的变化。Amazon Comprehend 甚至可以用文本中的上下文来了解 4 位数字是否是 PIN、社会保险号 (SSN) 的最后四个数字还是年份。Amazon Comprehend 处理 UTF-8 格式的任何文本文件,并可以大规模保护 PII,而不会影响准确性。有关更多信息,请参阅 《Amazon Comprehend 开发人员指南》中的什么是 Amazon Comprehend?

目标

在本教程中,您将学习如何将 S3 Object Lambda 与预构建的 Lambda 函数一起使用 ComprehendPiiRedactionS3ObjectLambda。此函数使用 Amazon Comprehend 来检测 PII 实体。然后,通过用星号替换这些实体来修订它们。通过修订 PII,您可以隐藏敏感数据,这有助于提高安全性和合规性。

您还可以了解在 Amazon Serverless Application Repository 中如何使用和配置预构建的 Amazon Lambda 函数与 S3 Object Lambda 一起使用便于部署。

先决条件:创建具有权限的 IAM 用户

在开始本教程前,您必须具有一个 Amazon 帐户,您可以使用 Amazon Identity and Access Management (IAM) 具有正确权限的用户。

您可以为本教程创建 IAM 用户,也可以向现有 IAM 用户添加权限。要完成本教程,您的 IAM 用户必须附加以下 IAM policy 才能访问相关 Amazon 资源并执行特定操作。

注意

为简单起见,本教程使用完全访问策略。对于生产用途,我们建议您根据安全最佳实践仅授予用例所需的最低权限。

您的 IAM 用户需要以下 Amazon 托管策略:

您可以在创建 IAM 用户时直接附加这些现有策略。有关如何创建 IAM 用户的更多信息,请参阅 《IAM 用户指南》中的创建 IAM 用户(控制台)

此外,您的 IAM 用户需要客户托管策略。将 IAM 用户权限授予所有 Amazon Serverless Application Repository 资源和操作,您必须创建 IAM policy 并将此策略附加给 IAM 用户。

创建一个 IAM policy 并将其附加到 IAM 用户

  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在左侧导航窗格中,选择 Policies (策略)

  3. 选择 Create policy(创建策略)

  4. 可视化编辑器选项卡上,服务,选择服务。然后,选择 Serverless Application Repository

  5. 对于操作,在手动操作中,选择此教程中所有 Serverless Application Repository 操作(serverlessrepo:*)

    作为安全最佳实践,您应根据用例仅允许用户所需的操作和资源的权限。有关更多信息,请参阅 《IAM 用户指南》中的 IAM 安全最佳实践

  6. 对于资源中,选择本教程中的所有资源

    作为最佳实践,您应仅为特定账户中的特定资源定义权限。您也可以使用条件键授予最低权限。有关更多信息,请参阅 《IAM 用户指南》 中的授予最低权限

  7. 请选择下一步:标签

  8. 请选择下一步:审核

  9. 查看策略页面上,为创建的策略输入名称(例如,tutorial-serverless-application-repository)和描述(可选)。查看策略摘要以确保您授予了所需的权限,然后选择创建策略以保存新策略。

  10. 在左侧导航窗格中,选择 Users (用户)。然后,为本教程选择 IAM 用户。

  11. 在所选用户的摘要页面上,选择权限选项卡,然后选择添加权限

  12. Grant permissions (授予权限) 下,选择 Attach existing policies directly (直接挂载现有策略)

  13. 选择刚创建的策略旁边的复选框(例如,tutorial-serverless-application-repository),然后选择下一步:审查

  14. 策略摘要下,查看摘要确保附加了预期的策略。然后选择 添加权限

步骤 1:创建 S3 存储桶

创建存储桶来存储您计划转换的原始数据。

创建存储桶

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择存储桶

  3. 选择创建存储桶

    此时将打开创建存储桶页面。

  4. 对于存储桶名称,输入您的存储桶名称 (例如,tutorial-bucket)。

    有关 Amazon S3 存储桶命名的更多信息,请参阅 存储桶命名规则

  5. 对于区域,选择要放置存储桶的位置 Amazon Web Services 区域。

    有关存储桶区域的更多信息,请参阅 存储桶概述

  6. 对于阻止此存储桶的公有访问设置,保留默认设置(阻止全部公有访问权限已启用)。

    除非您需要为您的用例关闭一个或多个设置,我们建议您启用所有阻止公共访问设置。有关阻止公有访问的更多信息,请参阅 阻止对您的 Amazon S3 存储的公有访问

  7. 保留其余设置为默认值。

    (可选)如果要为您的特定用例配置其他存储桶设置,请参阅 创建存储桶

  8. 选择创建存储桶

步骤 2:将文件上传到 S3 存储桶。

将包含各种类型的已知 PII 数据(如姓名、银行信息、电话号码和SSN)的文本文件作为原始数据上传到 S3 存储桶中,您将在本教程稍后部分对PII进行修订。

例如,您可以上传 tutorial.txt 文件。这是 Amazon Comprehend 的示例输入文件。

Hello Zhang Wei, I am John. Your AnyCompany Financial Services, LLC credit card account 1111-0000-1111-0008 has a minimum payment of $24.53 that is due by July 31st. Based on your autopay settings, we will withdraw your payment on the due date from your bank account number XXXXXX1111 with the routing number XXXXX0000. Your latest statement was mailed to 100 Main Street, Any City, WA 98121. After your payment is received, you will receive a confirmation text message at 206-555-0100. If you have questions about your bill, AnyCompany Customer Service is available by phone at 206-555-0199 or email at support@anycompany.com.

要上传文件到存储桶

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择存储桶

  3. 存储桶列表中,选择您在步骤 1中创建的存储桶名称(例如,tutorial-bucket)上传您的文件。

  4. 在存储桶的对象 选项卡上,选择上传

  5. 上传页面的文件和文件夹下,选择添加文件

  6. 选择要上传的文件,然后选择打开。例如,您可以上传之前提到的 tutorial.txt 文件示例。

  7. 请选择 Upload(上传)。

步骤 3:创建 S3 访问点

要使用 S3 Object Lambda 访问点访问和转换原始数据,您必须创建一个 S3 访问点,并将其与您在步骤 1中创建的 S3 存储桶进行关联。访问点必须与要转换的对象位于同一 Amazon Web Services 区域中。

在本教程的后面部分,您将使用此访问点作为对象 Lambda 访问点的支持访问点。

创建访问点

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择访问点

  3. 访问点页面上,选择创建访问点

  4. 访问点名称字段中输入访问点名称(例如,tutorial-pii-access-point)。

    有关命名访问点的更多信息,请参阅命名 Amazon S3 访问点的规则

  5. 存储桶名称字段中,输入您在步骤 1中创建的存储桶名称(例如,tutorial-bucket)。S3 将访问点附加到存储桶。

    您也可以选择浏览 S3 浏览和搜索账户中的存储桶。如果选择浏览 S3,请选择所需的存储桶,然后选择选择路径使用该存储桶的名称填充存储桶名称字段。

  6. 适用于网络源中,选择互联网

    有关访问点的网络源的更多信息,请参阅创建限制到 Virtual Private Cloud 的访问点

  7. 默认情况下,为访问点启用所有阻止公有访问设置。我们建议您将阻止所有公有访问设置保留为启用状态。有关更多信息,请参阅管理访问点的公有访问

  8. 对于所有其他访问点设置,保留默认设置。

    (可选)您可以修改访问点设置以支持您的用例。在本教程中,我们建议您保留默认设置。

    (可选)如果需要管理对访问点的访问,可以指定访问点策略。有关更多信息,请参阅访问点策略示例

  9. 选择 Create access point (创建访问点)

步骤 4:配置和部署预构建的 Lambda 函数

要修订 PII 数据,请配置和部署预构建的 Amazon Lambda 函数 ComprehendPiiRedactionS3ObjectLambda 以便与 S3 Object Lambda 访问点一起使用。

要配置和部署 Lambda 函数

  1. 登录到 Amazon Web Services Management Console,然后查看 Amazon Serverless Application Repository 中的 ComprehendPiiRedactionS3ObjectLambda 函数。

  2. 对于应用程序设置,在应用程序名称下,请保留本教程默认值 (ComprehendPiiRedactionS3ObjectLambda)。

    (可选)您可以输入要为此应用程序提供的名称。如果计划为同一共享数据集的不同访问需求配置多个 Lambda 函数,则可能需要执行此操作。

  3. 对于 MaskCharacter,请保留默认值 (*)。掩码字符将替换已修订的 PII 实体中的每个字符。

  4. 对于 MaskMode,请保留默认值 (MASK)。MaskMode 值指定 PII 实体是否使用 MASK 字符或 PII_ENTITY_TYPE 值。

  5. 要修订数据指定类型,对于 PiiEntityTypes,请保留默认值 ALLPiiEntityTypes 值指定要考虑修订的 PII 实体类型。

    有关支持的 PII 实体类型列表的更多信息,请参阅 《Amazon Comprehend 开发人员指南》中的检测个人身份信息 (PII)

  6. 保留其余设置为原定设置值。

    (可选)如果要为特定用例配置其他设置,请参阅页面左侧的自述文件部分。

  7. 选中 I acknowledge that this app creates custom IAM roles (我确认此应用程序创建自定义 IAM 角色) 旁边的复选框。

  8. 选择 Deploy(部署)。

  9. 在新应用程序的页面上,在资源下,选择Lambda 函数的逻辑 ID,在 Lambda 函数页面上部署的 Lambda 函数。

步骤 5:创建 S3 Object Lambda 访问点

S3 Object Lambda 访问点提供了直接从 S3 GET 请求调用 Lambda 函数的灵活性,以便该函数可以编辑从 S3 访问点检索的PII数据。创建和配置 S3 Object Lambda访问点时,必须指定要调用的修订 Lambda 函数,并以 JSON 格式提供事件上下文作为 Lambda 使用的自定义参数。

事件上下文提供有关在从 S3 Object Lambda 传递到 Lambda 的事件中发出请求的信息。有关事件上下文中所有字段的更多信息,请参阅 事件上下文格式和用法

创建 S3 Object Lambda 访问点

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在控制台左侧的导航窗格中,选择 Object Lambda 访问点

  3. Object Lambda 访问点页面上,选择创建 Object Lambda 访问点

  4. 对于 Object Lambda 访问点名称,输入想要使用的访问点名称。(例如,tutorial-pii-object-lambda-accesspoint

  5. 适用于支持访问点中,输入或浏览到您在步骤 3(例如,tutorial-pii-access-point),然后选择选择支持的访问点

  6. 对于调用 Lambda 函数,您可以为本教程选择以下两个选项之一。

    • 选择从您的账户中的函数中选择,选择您在步骤 4中部署的来自 Lambda 函数下拉列表的 Lambda 函数(例如,serverlessrepo-ComprehendPiiRedactionS3ObjectLambda)。

    • 选择输入 ARN,然后输入您在步骤 4中创建的 Lambda 函数 Amazon Resource Name (ARN)。

  7. 对于 Lambda 函数版本中,选择$LATEST(您在步骤 4中部署的最新版本 Lambda 函数)。

  8. (可选)如果您需要 Lambda 函数识别和处理带有范围和分段编号标头的 GET 请求,选择 Lambda 函数支持,使用范围的请求Lambda 函数支持带零件编号的请求。否则,请清除这两个复选框。

    有关如何将范围或分段编号与 S3 Object Lambda 结合使用的更多信息,请参阅 使用 Range 和 partNumber 标头

  9. (可选)在 Payload (负载) - 可选下,添加 JSON 文本,向 Lambda 函数提供其他信息。

    负载是可选 JSON 文本,您可以将其作为来自特定 S3 Object Lambda 访问点的所有调用的输入提供给 Lambda 函数。您可以为调用同一 Lambda 函数的不同 Object Lambda 访问点配置具有不同参数的负载,从而扩展 Lambda 函数的灵活性。

    更多有关路径模式的信息,请参阅 事件上下文格式和用法

  10. (可选)对于请求指标 - 可选,选择禁用启用以将 Amazon S3 监视添加到对象 Lambda 访问点。请求指标按标准 Amazon CloudWatch 费率计费。有关更多信息,请参阅 CloudWatch 定价

  11. 对象 Lambda 访问点策略 -可选下,保留默认设置。

    (可选)您可以设置资源策略。此资源策略向指定的 Object Lambda 访问点授予 GetObject API 权限

  12. 保留其余设置为默认值,选择创建 Object Lambda 访问点

步骤 6:使用 S3 Object Lambda 访问点检索修订的文件

现在,S3 Object Lambda 已准备好从原始文件修订 PII 数据。

使用 S3 Object Lambda 访问点检索修订的文件

请求通过 S3 Object Lambda 访问点检索文件时,需要创建一个 GetObject API 调用到 S3 Object Lambda。S3 Object Lambda 调用 Lambda 函数来编辑 PII 数据,并将转换后的数据作为对标准 S3 GetObject API调用的响应返回。

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择 Object Lambda 访问点

  3. Object Lambda 访问点页面上,选择您在步骤 5中创建的 S3 Object Lambda 访问点(例如,tutorial-pii-object-lambda-accesspoint)。

  4. 在 S3 Object Lambda 访问点的对象选项卡中,选择与步骤 2中上载到 S3 存储桶的文件同名的文件(例如,tutorial.txt)。

    此文件应包含所有转换的数据。

  5. 要查看转换后的数据,请选择打开或者下载

    您应该能够看到修订的文件,如以下示例所示。

    Hello *********. Your AnyCompany Financial Services, LLC credit card account ******************* has a minimum payment of $24.53 that is due by *********. Based on your autopay settings, we will withdraw your payment on the due date from your bank account ********** with the routing number *********. Your latest statement was mailed to **********************************. After your payment is received, you will receive a confirmation text message at ************. If you have questions about your bill, AnyCompany Customer Service is available by phone at ************ or email at **********************.

步骤 7:清除

如果您仅作为学习练习通过 S3 Object Lambda 修订数据,请删除分配的 Amazon 资源,以便不再累积费用。

删除 Object Lambda 访问点

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择 Object Lambda 访问点

  3. Object Lambda 访问点页面上,选择在步骤 5中创建的S3 Object Lambda 访问点左侧的选项按钮(例如,tutorial-pii-object-lambda-accesspoint)。

  4. 选择 Delete(删除)。

  5. 通过在显示的文本字段中输入 Object Lambda 访问点的名称,确认要删除的Object Lambda访问点,然后选择删除

删除 S3 访问点

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择访问点

  3. 导航到您在步骤 3中创建的访问点(例如,tutorial-pii-access-point),然后选择访问点名称旁边的选项按钮。

  4. 选择 Delete(删除)。

  5. 在显示的文本字段中输入访问点名称,然后选择删除,确认您要删除访问点。

删除 Lambda 函数

  1. 在 Amazon Lambda 控制台左侧导航窗格中 https://console.aws.amazon.com/lambda/ 中,选择函数

  2. 选择您在步骤 4中创建的函数(例如,serverlessrepo-ComprehendPiiRedactionS3ObjectLambda)。

  3. 选择 Actions,然后选择 Delete

  4. 删除函数对话框中,选择删除

删除 CloudWatch 日志组

  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在左侧导航窗格中,选择日志组

  3. 查找名称以步骤4中创建的 Lambda 函数结尾的日志组(例如,serverlessrepo-ComprehendPiiRedactionS3ObjectLambda)。

  4. 选择操作,然后选择删除日志组

  5. 删除日志组对话框中,选择删除

删除 S3 源存储桶中的原始文件

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择存储桶

  3. 存储桶名称列表中,选择您在步骤 2中将原始文件上传到的存储桶名称(例如,tutorial-bucket)。

  4. 选中要删除的对象名称左侧的复选框(例如,tutorial.txt)。

  5. 选择 Delete(删除)。

  6. 永久删除对象?删除对象页面上,在文本框中输入 permanently delete 确认您希望删除此对象。

  7. 选择删除对象

删除 S3 源存储桶

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择存储桶

  3. 存储桶列表中,选择您在步骤 1中创建存储桶名称旁边的选项按钮(例如,tutorial-bucket)。

  4. 选择 Delete(删除)。

  5. 删除存储桶页面上,通过在文本字段中输入存储桶名称来确认要删除存储桶,然后选择删除存储桶

删除您的 Lambda 函数的 IAM 角色

  1. 登录Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在左侧导航窗格中,选择角色,然后选中要删除的角色旁的复选框。角色名称以您在步骤 4中部署的 Lambda 函数名称开头(例如,serverlessrepo-ComprehendPiiRedactionS3ObjectLambda)。

  3. 选择 Delete(删除)。

  4. 删除对话框中,在文本输入字段中输入角色名称以确认删除。然后选择 Delete(删除)。

删除 IAM 用户的客户托管策略

  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在左侧导航窗格中,选择 Policies (策略)

  3. 策略页面上,输入您在搜索框中先决条件中创建的客户托管策略名称(例如,tutorial-serverless-application-repository) 以筛选策略列表。选择要删除的策略名称旁边的选项按钮。

  4. 选择 Actions,然后选择 Delete

  5. 在出现的文本字段中输入此策略的名称,确认要删除此策略,然后选择删除

删除 IAM 用户

  1. 登录Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在左侧导航窗格中,选择用户,然后选中要删除的用户旁的复选框。

  3. 在页面的顶部,选择删除用户

  4. 删除用户名?对话框中,在文本输入字段中输入用户名以确认删除用户。选择 Delete(删除)。

后续步骤

完成本教程后,您可以进一步探索以下相关用例:

  • 您可以创建多个S3 Object Lambda访问点,并使用预先构建的 Lambda 函数启用这些访问点,根据数据访问器的业务需要,这些函数的配置不同,编辑特定类型的PII。

    每种类型的用户都代入一个 IAM 角色,只能访问一个 S3 Object Lambda 访问点(通过 IAM policy 进行托管)。然后,将为不同编校用例配置的每个 ComprehendPiiRedactionS3ObjectLambda Lambda 函数附加到不同的 S3 Object Lambda 访问点。对于每个 S3 Object Lambda 访问点,您可以拥有一个支持的 S3 访问点,以便从存储共享数据集的 S3 存储桶读取数据。

    有关如何创建 S3 存储桶策略(仅允许用户通过 S3 访问点读取存储桶)的详细信息,请参阅 配置使用访问点的 IAM policy

    有关如何授予用户访问 Lambda 函数、S3 访问点和 S3 Object Lambda 访问点权限的更多信息,请参阅 为 Object Lambda 访问点配置 IAM policy

  • 您可以构建自己的 Lambda 函数,并将 S3 Object Lambda 与自定义的 Lambda 函数结合使用,满足您的特定数据需求。

    例如,要探索各种数据值,您可以使用 S3 Object Lambda 和自己的 Lambda 函数,该函数使用其他Amazon Comprehend 功能(例如实体识别、关键短语识别、情绪分析和文档分类)来处理数据。您也可以使用 S3 Object Lambda 与 Amazon Comprehend Medical(符合 HIPAA 条件的 NLP 服务),用于以上下文感知的方式分析和提取数据。

    有关如何使用 S3 Object Lambda 和自己的 Lambda 函数转换数据的详细信息,请参阅 教程:使用 S3 Object Lambda 转换应用程序的数据