在 Amazon Redshift 中使

使用 AWS Glue 自动检测 Amazon Redshift 中的个人身份信息

关键要点

本文将介绍如何利用 AWS Glue 自动识别 Amazon Redshift 中的个人身份信息(PII)。在数据迅速增长的背景下,企业需要有效管理大量包含 PII 的数据,以满足合规和隐私要求。通过 AWS Glue 和 Amazon Redshift,我们提供了一种自动化解决方案来简化这一过程。


随着数据量的指数级增长,企业正处理大量的各类数据,包括个人身份信息(PII)。PII是一个法律术语,指的是可以识别、联系或定位特定个体的信息。因此,在大规模环境中识别和保护敏感数据已变得愈加复杂和耗时。组织必须遵守数据隐私、合规和监管要求,例如 和 ,因此识别和保护 PII对于维护合规性至关重要。你需要识别敏感数据,包括姓名、社交安全号码(SSN)、地址、电子邮件、驾驶执照等。即使识别出这些信息,在大规模环境中实施数据屏蔽或加密也相当繁琐。

许多公司通过手动、耗时且易出错的 来标识和标记其数据库、数据仓库和数据湖中的 PII,从而使其敏感数据未受到保护,面临监管处罚和数据泄露的风险。

在本文中,我们提供了一种自动化解决方案,通过 使用 来检测 PII 数据。

解决方案概述

本解决方案在我们的 Redshift 数据仓库中检测 PII,以便进行数据保护。我们使用以下服务:

  • 是一个云数据仓库服务,使用 SQL 来分析结构化和半结构化数据,结合 AWS 设计的硬件和机器学习 (ML),在任意规模上提供最佳的性价比。在我们的方案中,我们使用 Amazon Redshift 存储数据。
  • 是一种无服务器数据集成服务,使发现、准备和合并数据以便分析、机器学习和应用开发变得简单。我们利用 AWS Glue 发现存储在 Amazon Redshift 中的 PII 数据。
  • (Amazon S3) 是一种提供行业领先的可扩展性、数据可用性、安全性和性能的存储服务。

以下图示展示了我们的解决方案架构。

删除)

本解决方案包括以下高层步骤:

  1. 使用 模板设置基础设施。
  2. 将数据从 Amazon S3 加载到 Redshift 数据仓库。
  3. 运行 AWS Glue 爬虫,以填充 AWS Glue 数据目录中的表。
  4. 运行 AWS Glue 作业以检测 PII 数据。
  5. 使用 分析输出结果。

前提条件

本文中创建的资源假设已经设立了 VPC,并包含私有子网以及它们的标识符。这确保了 VPC 和子网配置不会发生重大更改。因此,我们希望根据选择的 VPC和子网设置 VPC 端点。

在开始之前,请创建以下资源作为前提条件:

  • 一个现有的 VPC
  • 一个该 VPC 中的私有子网
  • 一个 VPC 网关 S3 端点
  • 一个 VPC STS 网关端点

使用 AWS CloudFormation 设置基础设施

要使用 CloudFormation 模板创建基础设施,请完成以下步骤:

  1. 打开 AWS CloudFormation 控制台。
  2. 选择 Launch Stack : 删除)
  3. 选择 Next
  4. 提供以下信息:
  5. 堆栈名称
  6. Amazon Redshift 用户名
  7. Amazon Redshift 密码
  8. VPC ID
  9. 子网 ID
  10. 子网 ID 的可用区 删除)
  11. 在下一页面,选择 Next
  12. 审阅详情并选择 我认识到 AWS CloudFormation 可能会创建 IAM 资源
  13. 选择 创建堆栈
  14. 请记下堆栈 输出 标签中的 S3BucketNameRedshiftRoleArn 的值。

从 Amazon S3 加载数据到 Redshift 数据仓库

使用 ,我们可以从一个或多个 S3存储桶加载数据文件。我们使用 FROM 子句来指明 COPY 命令如何在 Amazon S3 中查找文件。你可以作为 FROM子句的一部分提供数据文件的对象路径,也可以提供包含 S3 对象路径列表的清单文件位置。COPY 从 Amazon S3 使用 HTTPS 连接。

在本文中,我们使用一个样本个人健康 。按以下步骤加载数据:

  1. 在 Amazon S3 控制台中,导航到从 CloudFormation 模板创建的 S3 存储桶,并检查数据集。
  2. 使用 连接到 Redshift 数据仓库,建立与使用 CloudFormation 堆栈创建的数据库的连接,提供用户名和密码。

![连接到 删除)

连接后,你可以使用以下命令在 Redshift 数据仓库中创建表并复制数据。

  1. 使用以下查询创建表: sql CREATE TABLE personal_health_identifiable_information ( mpi char (10), firstName VARCHAR (30), lastName VARCHAR (30), email VARCHAR (75), gender CHAR (10), mobileNumber VARCHAR(20), clinicId VARCHAR(10), creditCardNumber VARCHAR(50), driverLicenseNumber VARCHAR(40), patientJobTitle VARCHAR(100), ssn VARCHAR(15), geo VARCHAR(250), mbi VARCHAR(50) );
  2. 从 S3 存储桶加载数据: sql COPY personal_health_identifiable_information FROM 's3://<S3BucketName>/personal_health_identifiable_information.csv' IAM_ROLE '<RedshiftRoleArn>' CSV delimiter ',' region '<aws region>' IGNOREHEADER 1;

请为以下占位符提供值:

  • RedshiftRoleArn – 在 CloudFormation 堆栈的 Outputs 标签中找到 ARN
  • S3BucketName – 替换为 CloudFormation 堆栈中的存储桶名称
  • aws region – 更改为部署 CloudFormation 模板的区域
  • 为了验证数据是否已加载,运行以下命令: sql SELECT * FROM personal_health_identifiable_information LIMIT 10;

删除)

运行 AWS Glue 爬虫以填充数据目录中的表

在 AWS Glue 控制台中,选择作为 CloudFormation 堆栈一部分部署的爬虫,名称为 crawler_pii_db,然后选择 运行爬虫

删除)

当爬虫完成后,名为 pii_db 的数据库中的表将被填充到 AWS Glue 数据目录中,表模式如下截图所示。

删除)

运行 AWS Glue 作业以检测 PII 数据并屏蔽 Amazon Redshift 中的相应列

在 AWS Glue 控制台中,选择导航面板中的 ETL Jobs ,并找到 detect-pii-data 作业以了解其配置。基本和高级属性是通过 CloudFormation 模板配置的。

删除)

基本属性如下:

  • 类型 – Spark
  • Glue 版本 – Glue 4.0
  • 语言 – Python

出于演示目的,作业书签选项被禁用,并且自动缩放功能也未启用。

删除)

我们还配置了有关连接和作业参数的高级属性。
为了访问存储在 Amazon Redshift 中的数据,我们创建了一个利用 JDBC 连接的 AWS Glue 连接。

![JDBC删除)

我们还提供了自定义参数作为键值对。在本文中,我们将 PII 划分为五个不同的检测类别:

  • universalPERSON_NAME, EMAIL, CREDIT_CARD
  • hipaaPERSON_NAME, PHONE_NUMBER, USA_SSN, USA_ITIN, BANK_ACCOUNT, USA_DRIVING_LICENSE, USA_HCPCS_CODE, USA_NATIONAL_DRUG_CODE, USA_NATIONAL_PROVIDER_IDENTIFIER, USA_DEA_NUMBER, USA_HEALTH_INSURANCE_CLAIM_NUMBER, USA_MEDICARE_BENEFICIARY_IDENTIFIER
  • networkingIP_ADDRESS, MAC_ADDRESS
  • united_statesPHONE_NUMBER, USA_PASSPORT_NUMBER, USA_SSN, USA_ITIN, BANK_ACCOUNT
  • custom – 坐标

如果你在其他国家尝试此解决方案,可以使用自定义类别指定自定义 PII 字段,因为此解决方案是基于美国地区创建的。

出于演示目的,我们使用单一表,并将其作为以下参数传递:

--table_name: table_name

在本文中,我们将表命名为 personal_health_identifiable_information

删除)

根据个人业务用例,你可以自定义这些参数。

运行作业并等待 Success 状态。

该作业有两个目标。第一个目标是在 Redshift 表中识别与 PII数据相关的列,并生成这些列名的列表。第二个目标是对目标表中特定列的数据进行隐藏。在第二个目标中,它读取表数据,对这些特定列应用用户定义的屏蔽功能,并使用 Redshift 暂存表 (stage_personal_health_identifiable_information) 更新目标表。

另外,你还可以在 Amazon Redshift中使用动态数据屏蔽()来保护数据仓库中的敏感数据。

使用 CloudWatch 分析输出

当作业完成后,让我们查看 CloudWatch 日志以了解 AWS Glue 作业的运行情况。我们可以通过选择 AWS Glue 控制台上作业详情页面中的 输出日志 导航到 CloudWatch 日志。

![CloudWatch删除)

该作业识别了每个包含 PII 数据的列,包括使用 AWS Glue 作业敏感数据检测字段传递的自定义字段。

![包含 PII删除)

清理

为清理基础设施并避免额外费用,请完成以下步骤:

  1. 清空 S3 存储桶。
  2. 删除你创建的端点。
  3. 通过 AWS CloudFormation 控制台删除 CloudFormation 堆栈,以便删除剩余资源。

删除)

结论

通过这个解决方案,你可以利用 AWS Glue 作业自动扫描存放在 Redshift 集群中的数据,识别 PII,并采取必要行动。这可以帮助你的组织实现安全性、合规性、治理和数据保护功能,从而增强数据安全和数据治理。


作者介绍

![Manikanta删除) Manikanta Gona 是 AWS 专业服务的数据与 ML 工程师。他于 2021 年加入 AWS,拥有 6 年以上的 IT 经验。在 AWS,他专注于数据湖实施、搜索和分析工作负载,使用 Amazon OpenSearch 服务。在空闲时间,他喜欢园艺,以及和丈夫一起远足和骑自行车。

![Denys删除) Denys Novikov 是亚马逊网络服务专业服务团队的高级数据湖架构师。他专注于为企业客户设计和实施分析、数据管理以及大数据系统。

![Anjan删除) Anjan Mukherjee 是 AWS 的数据湖架构师,专注于大数据和分析解决方案。他帮助客户在 AWS平台上构建可扩展、可靠、安全和高性能的应用程序。

加载评论…

Leave a Reply

Required fields are marked *