步骤 4:为表格文件生成加密架构 - AWS Clean Rooms

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 4:为表格文件生成加密架构

要加密数据,需要一个描述如何使用数据的加密架构。本节介绍 C3R 加密客户端如何帮助为带有标题行的文件或CSV文件生成加密架构。Parquet

每个文件只需进行一次该操作。架构存在后,可以重复使用它来加密同一个文件(或任何具有相同列名的文件)。如果列名或所需的加密架构发生变化,则必须更新架构文件。有关更多信息,请参阅 (可选)创建架构(高级用户)

重要

所有协作方都必须使用相同的共享密钥。如果要在查询中对列名进行 JOIN 或以其他方式比较列名是否相等,各协作方还应协调列名,使其相匹配。否则,SQL查询可能会产生意外或不正确的结果。但是,如果协作创建者在创建协作期间启用了 allowJoinsOnColumnsWithDifferentNames 加密设置,则无需这样做。有关加密相关设置的更多信息,请参阅加密计算参数

在架构模式下运行时,C3R 加密客户端会逐列浏览输入文件,提示您是否以及如何处理该列。如果文件中包含许多加密输出不需要的列,交互式模式生成可能会变得繁琐,因为您必须跳过每个不需要的列。为避免这种情况,您可以手动编写架构,或者创建仅包含所需列的输入文件的简化版本。然后,可以在该简化的文件上运行交互式架构生成器。C3R 加密客户端会输出有关架构文件的信息,并询问您应如何在目标输出中包含或加密源列(如果有)。

对于输入文件中的每个源列,系统会提示:

  1. 应该生成多少个目标列

  2. 应如何加密每个目标列(如果有)

  3. 每个目标列的名称

  4. 如果将列作为 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,只有两列:usernamead_variant。对于这些列,我们需要以下内容:

  • username 列加密为 fingerprint

  • ad_variant 列加密为 cleartext

为 fingerprint 列和 cleartext 列生成加密架构
  1. 可选)要确保 c3r-cli.jar 文件和要加密的文件存在,请执行以下操作:

    1. 导航到所需的目录并运行 ls(如果使用 Mac 或 Unix/Linux)或 dir(如果使用 Windows)。

    2. 查看表格数据文件(例如 .csv)列表,然后选择要加密的文件。

      在此示例中,ads.csv 是我们要加密的文件。

  2. 在中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)。

  3. 对于 Number of target columns from source column ‘username’?,输入 1,然后按 Enter

  4. 对于 Target column type: [c]leartext, [f]ingerprint, or [s]ealed?,输入 f,然后按 Enter

  5. 对于 Target column headername <default 'username'>,按 Enter

    默认名称为“username”。

  6. 对于 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 或尝试反向操作,则会出现问题。

  7. 对于 Number of target columns from source column ‘ad_variant’?,输入 1,然后按 Enter

  8. 对于 Target column type: [c]leartext, [f]ingerprint, or [s]ealed?,输入 c,然后按 Enter

  9. 对于 Target column headername <default 'username'>,按 Enter

    默认名称为“ad_variant”。

    架构被写入名为 ads.json 的新文件。

    注意

    您可以通过在任何文本编辑器(例如 Windows 上的 Notepad 或 macOS 上的 TextEdit)中打开架构来查看架构。

  10. 现在,您可以加密数据了。

示例:生成带有 sealed、fingerprint 和 cleartext 列的加密架构

在此示例中,对于 sales.csv,有三列:usernamepurchasedproduct。对于这些列,我们需要以下内容:

  • product 列加密为 sealed

  • username 列加密为 fingerprint

  • purchased 列加密为 cleartext

生成带有 sealed、fingerprint 和 cleartext 列的加密架构
  1. 可选)要确保 c3r-cli.jar 文件和要加密的文件存在,请执行以下操作:

    1. 导航到所需的目录并运行 ls(如果使用 Mac 或 Unix/Linux)或 dir(如果使用 Windows)。

    2. 查看表格数据文件 (.csv) 列表并选择要加密的文件。

      在此示例中,sales.csv 是我们要加密的文件。

  2. 在中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)。

  3. 对于 Number of target columns from source column ‘username’?,输入 1,然后按 Enter

  4. 对于 Target column type: [c]leartext, [f]ingerprint, or [s]ealed?,输入 f,然后按 Enter

  5. 对于 Target column headername <default 'username'>,按 Enter

    默认名称为“username”。

  6. 对于 Add suffix '_fingerprint' to header to indicate how it was encrypted, [y]es or [n]o <default 'yes'>,输入 y,然后按 Enter

  7. 对于 Number of target columns from source column ‘purchased’?,输入 1,然后按 Enter

  8. 对于 Target column type: [c]leartext, [f]ingerprint, or [s]ealed?,输入 c,然后按 Enter

  9. 对于 Target column headername <default 'purchased'>,按 Enter

    默认名称为“purchased”。

  10. 对于 Number of target columns from source column ‘product’?,输入 1,然后按 Enter

  11. 对于 Target column type: [c]leartext, [f]ingerprint, or [s]ealed?,输入 s,然后按 Enter

  12. 对于 Target column headername <default 'product'>,按 Enter

    默认名称为“product”。

  13. 对于 ‘product_sealed’ padding type: [n]one, [f]ixed, or [m]ax <default ’max’?>,按 Enter 选择默认值。

  14. 对于 Byte-length beyond max length to pad cleartext to in ‘product_sealed’ <default ‘0’>?,按 Enter 选择默认值。

    架构被写入名为 sales.json 的新文件。

  15. 现在,您可以加密数据了。