本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 4:为表格文件生成加密架构
要加密数据,需要一个描述如何使用数据的加密架构。本节介绍 C3R 加密客户端如何帮助为带有标题行的文件或CSV文件生成加密架构。Parquet
每个文件只需进行一次该操作。架构存在后,可以重复使用它来加密同一个文件(或任何具有相同列名的文件)。如果列名或所需的加密架构发生变化,则必须更新架构文件。有关更多信息,请参阅 (可选)创建架构(高级用户)。
重要
所有协作方都必须使用相同的共享密钥。如果要在查询中对列名进行 JOIN 或以其他方式比较列名是否相等,各协作方还应协调列名,使其相匹配。否则,SQL查询可能会产生意外或不正确的结果。但是,如果协作创建者在创建协作期间启用了 allowJoinsOnColumnsWithDifferentNames
加密设置,则无需这样做。有关加密相关设置的更多信息,请参阅加密计算参数。
在架构模式下运行时,C3R 加密客户端会逐列浏览输入文件,提示您是否以及如何处理该列。如果文件中包含许多加密输出不需要的列,交互式模式生成可能会变得繁琐,因为您必须跳过每个不需要的列。为避免这种情况,您可以手动编写架构,或者创建仅包含所需列的输入文件的简化版本。然后,可以在该简化的文件上运行交互式架构生成器。C3R 加密客户端会输出有关架构文件的信息,并询问您应如何在目标输出中包含或加密源列(如果有)。
对于输入文件中的每个源列,系统会提示:
-
应该生成多少个目标列
-
应如何加密每个目标列(如果有)
-
每个目标列的名称
-
如果将列作为 sealed 列进行加密,在加密之前应如何填充数据。
注意
对已加密为 sealed 列的列的数据进行加密时,必须确定哪些数据需要填充。C3R 加密客户端建议在架构生成期间使用默认填充,将列中的所有条目填充到相同的长度。
在确定 fixed
的长度时,请注意填充以字节为单位,而不是以位为单位。
以下是创建架构的决定表。
决策 | 源列中的目标列数 <' name-of-column '>? | 目标列类型:[c] cleartext、[f] fingerprint 或 [s] sealed? | 目标列标题名称 <default 'name-of-column'> | 在标题中添加 <suffix> 后缀以指示它是如何加密的,[y] 是或 [n] 否 <default 'yes'> | <' name-of-column _sealed'> 填充类型:[n] 一、[f] 固定或 [m] 最大 <default 'max'> |
---|---|---|---|---|---|
保持列未加密。 | 1 | c | 不适用 | 不适用 | 不适用 |
将列加密为 fingerprint 列。 | 1 | f | 选择默认值或输入新的标题名称。 | 输入 y 选择默认值 (_fingerprint ) 或输入 n 。 |
不适用 |
将列加密为 sealed 列。 | 1 | s | 选择默认值或输入新的标题名称。 | 输入 y 选择默认值 (_sealed ) 或输入 n 。 |
选择填充类型。 有关更多信息,请参阅 (可选)创建架构(高级用户)。 |
将列同时加密为 fingerprint 和 sealed。 | 2 |
输入第一个目标列:f。 输入第二个目标列:s。 |
为每个目标列选择目标标题。 | 输入 y 选择默认值或输入 n. |
选择填充类型(仅适用于 sealed 列)。 有关更多信息,请参阅 (可选)创建架构(高级用户)。 |
以下是如何创建加密架构的两个示例。交互的具体内容取决于输入文件和您提供的响应。
示例:为 fingerprint 列和 cleartext 列生成加密架构
在此示例中,对于 ads.csv
,只有两列:username
和 ad_variant
。对于这些列,我们需要以下内容:
-
将
username
列加密为fingerprint
列 -
将
ad_variant
列加密为cleartext
列
为 fingerprint 列和 cleartext 列生成加密架构
-
(可选)要确保 c3r-cli.jar 文件和要加密的文件存在,请执行以下操作:
-
导航到所需的目录并运行
ls
(如果使用 Mac 或 Unix/Linux)或dir
(如果使用 Windows)。 -
查看表格数据文件(例如 .csv)列表,然后选择要加密的文件。
在此示例中,
ads.csv
是我们要加密的文件。
-
-
在中CLI,运行以下命令以交互方式创建架构。
java -jar c3r-cli.jar schema ads.csv --interactive --output=ads.json
注意
-
您可以运行
java --jar PATH/TO/c3r-cli.jar
。或者,如果您已PATH/TO/c3r-cli.jar
添加到CLASSPATH环境变量中,也可以运行类名。C3R 加密客户端将在中CLASSPATH查找它(例如,java com.amazon.psion.cli.Main
)。 -
--interactive
标志选择开发架构的交互模式。这将引导用户完成创建架构的向导。具有高级技能的用户JSON无需使用向导即可创建自己的架构。有关更多信息,请参阅 (可选)创建架构(高级用户)。 -
--output
标志设置输出名称。如果不包含--output
标志,则 C3R 加密客户端会尝试选择默认输出名称(例如<input>.out.csv
或架构的<input>.json
)。
-
-
对于
Number of target columns from source column ‘username’?
,输入1
,然后按 Enter。 -
对于
Target column type: [c]leartext, [f]ingerprint, or [s]ealed?
,输入f
,然后按 Enter。 -
对于
Target column headername <default 'username'>
,按 Enter。默认名称为“
username
”。 -
对于
Add suffix '_fingerprint' to header to indicate how it was encrypted, [y]es or [n]o <default 'yes'>
,输入y
,然后按 Enter。注意
交互模式建议在加密的列标题中添加的后缀(fingerprint 列添加
_fingerprint
,sealed 列添加_sealed
)。当您执行诸如将数据上传到 AWS 服务 或创建 AWS Clean Rooms 协作之类的任务时,后缀可能会有所帮助。这些后缀可以帮助指示对每列中的加密数据可以做些什么。例如,如果您将列加密为 sealed 列 (_sealed
) 并尝试对其进行 JOIN 或尝试反向操作,则会出现问题。 -
对于
Number of target columns from source column ‘ad_variant’?
,输入1
,然后按 Enter。 -
对于
Target column type: [c]leartext, [f]ingerprint, or [s]ealed?
,输入c
,然后按 Enter。 -
对于
Target column headername <default 'username'>
,按 Enter。默认名称为“
ad_variant
”。架构被写入名为
ads.json
的新文件。注意
您可以通过在任何文本编辑器(例如 Windows 上的 Notepad 或 macOS 上的 TextEdit)中打开架构来查看架构。
-
现在,您可以加密数据了。
示例:生成带有 sealed、fingerprint 和 cleartext 列的加密架构
在此示例中,对于 sales.csv
,有三列:username
、purchased
和 product
。对于这些列,我们需要以下内容:
-
将
product
列加密为sealed
列 -
将
username
列加密为fingerprint
列 -
将
purchased
列加密为cleartext
列
生成带有 sealed、fingerprint 和 cleartext 列的加密架构
-
(可选)要确保 c3r-cli.jar 文件和要加密的文件存在,请执行以下操作:
-
导航到所需的目录并运行
ls
(如果使用 Mac 或 Unix/Linux)或dir
(如果使用 Windows)。 -
查看表格数据文件 (.csv) 列表并选择要加密的文件。
在此示例中,
sales.csv
是我们要加密的文件。
-
-
在中CLI,运行以下命令以交互方式创建架构。
java -jar c3r-cli.jar schema sales.csv --interactive --output=sales.json
注意
-
--interactive
标志选择开发架构的交互模式。这将引导用户完成创建架构的指导性工作流程。 -
如果您是高级用户,则JSON无需使用指导式工作流程即可创建自己的架构。有关更多信息,请参阅 (可选)创建架构(高级用户)。
-
对于没有列标题的.csv 文件,请参阅中提供的架构命令标
--noHeaders
志。CLI -
--output
标志设置输出名称。如果不包含--output
标志,则 C3R 加密客户端会尝试选择默认输出名称(例如<input>.out
或架构的<input>.json
)。
-
-
对于
Number of target columns from source column ‘username’?
,输入1
,然后按 Enter。 -
对于
Target column type: [c]leartext, [f]ingerprint, or [s]ealed?
,输入f
,然后按 Enter。 -
对于
Target column headername <default 'username'>
,按 Enter。默认名称为“
username
”。 -
对于
Add suffix '_fingerprint' to header to indicate how it was encrypted, [y]es or [n]o <default 'yes'>
,输入y
,然后按 Enter。 -
对于
Number of target columns from source column ‘purchased’?
,输入1
,然后按 Enter。 -
对于
Target column type: [c]leartext, [f]ingerprint, or [s]ealed?
,输入c
,然后按 Enter。 -
对于
Target column headername <default 'purchased'>
,按 Enter。默认名称为“
purchased
”。 -
对于
Number of target columns from source column ‘product’?
,输入1
,然后按 Enter。 -
对于
Target column type: [c]leartext, [f]ingerprint, or [s]ealed?
,输入s
,然后按 Enter。 -
对于
Target column headername <default 'product'>
,按 Enter。默认名称为“
product
”。 -
对于
‘product_sealed’ padding type: [n]one, [f]ixed, or [m]ax <default ’max’?>
,按 Enter 选择默认值。 -
对于
Byte-length beyond max length to pad cleartext to in ‘product_sealed’ <default ‘0’>?
,按 Enter 选择默认值。架构被写入名为
sales.json
的新文件。 -
现在,您可以加密数据了。