使用 AWS DMS 和 Amazon Macie 在迁移过程中屏蔽 PII 数据 数据库博客

在迁移过程中使用 AWS DMS 和 Amazon Macie 对 PII 数据进行掩码处理

由 Chithra Krishnamurthy 和 Mansi Suratwala 发表于 2023 年 11 月 2 日,Amazon Macie,AWS 数据库迁移服务,技术实践

关键要点

在迁移包含敏感个人身份信息PII的数据时,使用 AWS DMS 和 Amazon Macie 进行数据掩码处理至关重要,以确保在测试和开发环境中符合法规要求并保护数据隐私。本文章详细介绍了如何通过集成 AWS DMS 和 Macie 有效识别并掩盖 PII 数据。

当涉及到敏感的个人身份信息PII时,大型企业在将生产数据转移到非生产或横向环境进行测试或其他目的时,往往会遇到困难。大多数公司都须遵循合规性规定,在将生产 PII 数据转移进行测试和开发时进行掩码处理。

飞鸟加速器免费下载

目前,已复制或迁移到下游或横向环境中的数据需要在发布给最终用户之前手动进行掩码处理。这通常需要大量的时间、精力和额外的人工成本。因此,若缺少数据库领域的专业人士或相关文档,企业在定位和处理 PII 数据时可能会非常棘手。

本文提出了一种解决方案,利用 Amazon Macie 识别 PII 数据,使用 AWS 数据库迁移服务AWS DMS进行掩码处理,并将数据从一个 亚马逊关系数据库服务Amazon RDS for Oracle 生产数据库迁移到 RDS for Oracle 开发目标数据库,确保在环境发布给用户之前保护敏感数据。

解决方案概述

本文展示了如何利用 Macie 的托管和自定义标识符在源 RDS for Oracle 数据库中识别 PII 数据,并在使用 AWS DMS 迁移到目标数据库时进行掩码处理。

解决方案架构概述

该过程包括以下步骤:

使用 AWS DMS 从源 RDS for Oracle 数据库实例中提取数据,并将其以 Parquet 格式保存到 亚马逊简单存储服务Amazon S3存储桶中的文件夹中。启用 Macie 以扫描 Parquet 文件以发现 PII 数据,并将发现结果存储在 S3 桶中的另一个文件夹中。使用 AWS Glue 创建 数据目录,通过上一步骤生成的 JSONL 文件进行爬取,该文件包含关于 PII 在 RDS for Oracle 数据副本中存储位置的元数据信息。使用 Amazon Athena 查询数据目录,提取 PII 数据在 RDS for Oracle 数据副本中存储的元数据信息,包括模式名称、表名称和列名称。这些信息将在下一步骤创建转换规则时用到。为在上一步骤中识别的表和列创建 转换规则。使用 AWS DMS 将数据迁移至目标 RDS for Oracle 数据库,按转换规则对 PII 数据进行掩码处理。

实施解决方案的步骤如下:

在源 RDS for Oracle 数据库中填充示例 PII 数据。配置 AWS DMS 和 Amazon S3 组件。使用 AWS DMS 将 PII 数据从源 RDS for Oracle 数据库迁移到 Amazon S3。配置 Macie 作业和 AWS Glue 爬虫。配置 Athena 以提取 PII 元数据。运行 AWS DMS 复制任务,使用转换规则将已掩码的源数据迁移到目标 RDS for Oracle 数据库。

先决条件

在开始之前,您需要具备以下先决条件:

对以下 AWS 服务有所了解,以便跟随本文:Amazon AthenaAWS 数据库迁移服务AWS DMSAWS GlueAWS 身份与访问管理IAMAmazon MacieAmazon RDS for Oracle亚马逊简单存储服务Amazon S3已有的源 RDS for Oracle 数据库实例已有的目标 RDS for Oracle 数据库实例创建 IAM 角色和策略的权限

使用示例 PII 数据填充源 RDS for Oracle 数据库

完成以下步骤以填充源数据库:

使用首选 SQL 客户端连接到源 RDS for Oracle 数据库。创建一个名为 AWSTESTUSER 的数据库用户:

sql CREATE USER AWSTESTUSER IDENTIFIED BY ltpasswordgt

授予用户 AWSTESTUSER 必要的权限:

sql GRANT CONNECT RESOURCE TO AWSTESTUSER

创建三张表并插入记录:

sql CREATE TABLE AWSTESTUSERCUSTOMER ( CUSTID NUMBER(300) CUSTNAME CHAR(30) CRCARDEXPIRY DATE HOMEADD VARCHAR2(30) JOINDATE DATE COMMPREF VARCHAR2(20) SSN VARCHAR2(30) )

CREATE TABLE AWSTESTUSEREMPLOYEE ( EMPID NUMBER(300) EMPNM CHAR(30) PASSPORT VARCHAR2(20) HOMEADD VARCHAR2(30) JOINDATE DATE JOBCODE VARCHAR2(20) MANAGER VARCHAR2(30) BIRTHDAY DATE SSN VARCHAR2(30) )

CREATE TABLE AWSTESTUSERSUPPLIERS ( SUPPID NUMBER(30) SUPPNAME CHAR(30) PRDCODE CHAR(30) COMM NUMBER(30) )

插入数据如下:

使用 AWS DMS 和 Amazon Macie 在迁移过程中屏蔽 PII 数据 数据库博客

sql INSERT INTO awstestusercustomer VALUES (100Zee28OCT22AustinTexas20JUL22email690225818) INSERT INTO awstestusercustomer VALUES (101ANC28OCT22AtlantaGeorgia20JUL22email490228513) INSERT INTO awstestusercustomer VALUES (102NBC28OCT22DenverCO20JUL22email690229090) INSERT INTO awstestuseremployee VALUES (750GeetC53HL5134LosAngelesCA24OCT22DBApk16JUL22789628145) INSERT INTO awstestusersuppliers VALUES (501ArtelP1010) COMMIT

配置 AWS DMS 和 Amazon S3 组件

在本节中,我们详细说明配置 AWS DMS 和 Amazon S3 组件的步骤。

创建复制实例

要创建 AWS DMS 复制实例,请完成以下步骤:

在 AWS DMS 控制台中,选择导航窗格中的 Replication instances复制实例。选择 Create replication instance创建复制实例。按照 创建复制实例 的说明创建一个新的复制实例。选择与 RDS for Oracle 实例相同的 VPC、区域和可用区。

源和目标数据库的安全组应为 AWS DMS 复制实例打开入站权限,以确保成功连接。

创建带有客户管理密钥的 S3 存储桶

在此步骤中,您将创建带有客户管理的 AWS 密钥管理服务AWS KMS密钥的 S3 存储桶。

在 Amazon S3 控制台中,选择导航窗格中的 Buckets存储桶。选择 Create bucket创建存储桶。按照 创建第一个 S3 存储桶 的说明创建新的存储桶。在 Default encryption默认加密部分,选择 Serverside encryption with AWS Key Management Service keys (SSEKMS),并为您的存储桶 创建 KMS 密钥。

添加 S3 存储桶策略

更新存储桶策略以允许 Macie 在扫描存储在 Amazon S3 中的 RDS for Oracle 数据后将其发现结果存储到 S3 存储桶中。

允许 PutObject 以确保 Macie 能够访问 S3 存储桶,存储其发现结果的 JSONL 文件。

允许 GetBucketLocation 让 Macie 扫描 S3 存储桶中的 RDS for Oracle 数据,以寻找 PII 数据。

此外,出于对数据的保护,需要拒绝对存储在那些包含 PII 数据的 Parquet 文件上的访问,包括禁止下载这些 Parquet 文件,因此必须禁止 GetObject 特权,但要允许 Macie 扫描这些文件以寻找 PII 数据。

完成以下步骤:

在 Amazon S3 控制台中导航到您的存储桶。选择 Permissions权限选项卡,然后编辑存储桶策略。向存储桶策略中添加以下内容:

json{ Version 20121017 Statement [ { Sid Allow Macie to upload objects to the bucket Effect Allow Principal { Service macieamazonawscom } Action s3PutObject Resource arnawss3ltYOUR BUCKET NAMEgt/ Condition { StringEquals { awsSourceAccount ltaws account #gt } ArnLike { awsSourceArn [ arnawsmacie2ltYOUR REGION NAMEgtltaws account #gtexportconfiguration arnawsmacie2ltYOUR REGION NAMEgtltaws account #gtclassificationjob/ ] } } } { Sid Allow Macie to use the getBucketLocation operation Effect Allow Principal { Service macieamazonawscom } Action s3GetBucketLocation Resource arnawss3ltYOUR BUCKET NAMEgt Condition { StringEquals { awsSourceAccount ltaws account #gt } ArnLike { awsSourceArn [ arnawsmacie2ltYOUR REGION NAMEgtltaws account #gtexportconfiguration arnawsmacie2ltYOUR REGION NAMEgtltaws account #gtclassificationjob/ ] } } } { Sid Deny S3 select and allow Macie to get Object Effect Deny Principal Action s3GetObject Resource arnawss3ltYOUR BUCKET NAMEgt/orcldata/ Condition { StringNotLike { awsPrincipalArn arnawsiamltaws account #gtrole/awsservicerole/macieamazonawscom/AWSServiceRoleForAmazonMacie } } } ]}

为 S3 存储桶创建 IAM 角色和策略

在此步骤中,您为 AWS DMS 将 RDS for Oracle 数据存储在的 S3 存储桶创建 IAM 角色和策略。首先,创建策略。

在 IAM 控制台中,选择导航窗格中的 Policies策略。选择 Create policy创建策略。在 JSON 选项卡中,选择 Edit,并输入以下策略:

json{ Version 20121017 Statement [ { Effect Allow Action [ s3PutObject s3DeleteObject s3PutObjectTagging ] Resource [arnawss3ltYOUR BUCKET NAMEgt/] } { Effect Allow Action [s3ListBucket] Resource [arnawss3ltYOUR BUCKET NAMEgt] } ]}

选择 Next。为您的策略输入名称。

选择 Create policy。现在您可以创建一个 IAM 角色,AWS DMS 作为信任关系来访问 S3 存储桶。

在 IAM 控制台中,选择导航窗格中的 Roles角色。

选择 Create role创建角色。对于 Trusted entity type受信任实体类型,选择 AWS service。对于 Use case用例,选择 DMS,然后选择 Next。在 Add permission添加权限中,选择您创建的策略,然后选择 Next。

输入角色名称,然后选择 Next。由于 S3 对象使用客户管理的 KMS 密钥SSEKMS 加密进行加密,需要授予 Macie 对该密钥的权限,以使其能够解密包含 PII 数据的文件。因此,我们 向策略添加一条声明,以允许 Macie 服务关联角色和 Amazon S3 IAM 角色使用该密钥进行数据加密和解密。

在 AWS KMS 控制台上,导航到您的密钥。

切换到 Policy view政策视图。编辑策略并添加以下代码:

json{ Version 20121017 Id keyconsolepolicy3 Statement [ { Sid Enable IAM User Permissions Effect Allow Principal { AWS arnawsiamltaws account#gtroot } Action kms Resource } { Sid Allow the Macie servicelinked role to use the key Effect Allow Principal { AWS arnawsiamltaws account#gtrole/awsservicerole/macieamazonawscom/AWSServiceRoleForAmazonMacie } Action kmsDecrypt Resource } { Sid Allow the s3piimaskingrole to use the key Effect Allow Principal { AWS arnawsiamltaws account#gtrole/ltYOUR IAM ROLE NAMEgt } Action [ kmsGenerateDataKey kmsEncrypt ] Resource } { Sid Allow Macie to use the key Effect Allow Principal { Service macieamazonawscom } Action [ kmsGenerateDataKey kmsEncrypt ] Resource ltARN of ltYOUR KMS Key NAMEgtgt Condition { StringEquals { awsSourceAccount ltaws account#gt } ArnLike { awsSourceArn [ arnawsmacie2useast1ltaws account#gtexportconfiguration arnawsmacie2useast1ltaws account#gtclassificationjob/ ] } } } ]}

创建 AWS DMS 端点

在此步骤中,您为源和目标数据库创建端点。有关更多信息,请参考 创建源和目标端点。

首先,创建一个端点,该端点连接到需要识别 PII 数据的源数据库。

在 AWS DMS 控制台中,创建一个 AWS DMS 源端点,源引擎选择 Oracle。