(Opcional) Crie um esquema (usuários avançados) - AWS Clean Rooms

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

(Opcional) Crie um esquema (usuários avançados)

A criação manual de um esquema é para usuários avançados.

A seguir está uma descrição do formato do arquivo de JSON esquema para arquivos de entrada com ou sem cabeçalhos de coluna. Usuários avançados podem escrever ou modificar diretamente o esquema, se desejarem.

nota

O cliente de criptografia C3R pode ajudá-lo a criar um esquema por meio do processo interativo descrito em Exemplo: gerar um esquema de criptografia com sealedfingerprint, e colunas cleartext ou por meio da criação de um modelo de stub.

Esquemas de tabelas mapeadas e posicionais

A seção a seguir descreve dois tipos de esquemas de tabela:

  • Esquema de tabela mapeada — Esse esquema é usado para criptografar arquivos.csv com uma linha de cabeçalho e arquivos. Apache Parquet

  • Esquema de tabela posicional — Esse esquema é usado para criptografar arquivos.csv sem uma linha de cabeçalho.

O cliente de criptografia C3R pode criptografar um arquivo tabular para uma colaboração. Para fazer isso, ele deve ter um arquivo de esquema correspondente que especifique como a saída criptografada deve ser derivada da entrada.

O cliente de criptografia C3R pode ajudar a gerar um esquema para um INPUT arquivo executando o comando esquema do cliente de criptografia C3R na linha de comando. Um exemplo de comando éjava -jar c3r-cli.jar schema --interactive INPUT.

O esquema especifica as seguintes informações:

  1. Quais colunas de origem são mapeadas para quais colunas transformadas no arquivo de saída por meio de seus nomes de cabeçalho (esquemas mapeados) ou posição (esquemas posicionais)

  2. Quais colunas-alvo devem permanecer cleartext

  3. Quais colunas de destino devem ser criptografadas para SELECT consultas

  4. Quais colunas de destino devem ser criptografadas para JOIN consultas

Essas informações são codificadas em um arquivo de JSON esquema específico da tabela, que consiste em um único objeto cujo headerRow campo é um valor booleano. O valor deve ser true para Parquet arquivos e arquivos.csv com uma linha de cabeçalho e false outros.

Esquema de tabela mapeada

O esquema mapeado tem a seguinte forma.

{ "headerRow": true, "columns": [ { "sourceHeader": STRING, "targetHeader": STRING, "type": TYPE, "pad": PAD }, ... ] }

Se headerRow fortrue, o próximo campo no objeto serácolumns, que contém uma matriz de esquemas de colunas que mapeiam cabeçalhos de origem para cabeçalhos de destino (ou seja, JSON objetos que descrevem o que as colunas de saída devem conter).

  • sourceHeader— O nome do STRING cabeçalho da coluna de origem da qual os dados são derivados.

    nota

    A mesma coluna de origem pode ser usada para várias colunas de destino.

    Uma coluna do arquivo de entrada não listada como em sourceHeader nenhum lugar do esquema não aparece no arquivo de saída.

  • targetHeader— O nome do STRING cabeçalho da coluna correspondente no arquivo de saída.

    nota

    Esse campo é opcional para esquemas mapeados. Se esse campo for omitido, o sourceHeader será reutilizado para o nome do cabeçalho na saída. _fingerprintOu _sealed é anexado se a coluna de saída for uma fingerprint coluna ou sealed coluna, respectivamente.

  • type— A coluna TYPE de destino no arquivo de saída. Ou seja, uma das cleartextsealed, ou fingerprint dependendo de como a coluna será usada na colaboração.

  • pad— Um campo de um objeto de esquema de coluna que só está presente quando o TYPE ésealed. Seu valor correspondente de PAD é um objeto que descreve como os dados devem ser preenchidos antes de serem criptografados.

    { "type": PAD_TYPE, "length": INT }

    Para especificar o preenchimento de pré-criptografia, type e length são usados da seguinte forma:

    • PAD_TYPEas none — Nenhum preenchimento será aplicado aos dados da coluna e o length campo não é aplicável (ou seja, omitido).

    • PAD_TYPEas fixed — Os dados da coluna são length preenchidos com os bytes especificados.

    • PAD_TYPEas max — Os dados da coluna são preenchidos até o tamanho do byte do valor mais longo, mais bytes adicionais. length

Veja a seguir um exemplo de esquema mapeado, com uma coluna de cada tipo.

{ "headerRow": true, "columns": [ { "sourceHeader": "FullName", "targetHeader": "name", "type": "cleartext" }, { "sourceHeader": "City", "targetHeader": "city_sealed", "type": "sealed", "pad": { "type": "max", "length": 16 } }, { "sourceHeader": "PhoneNumber", "targetHeader": "phone_number_fingerprint", "type": "fingerprint" }, { "sourceHeader": "PhoneNumber", "targetHeader": "phone_number_sealed", "type": "sealed", "pad": { "type": "fixed", "length": 20 } } ] }

Como um exemplo mais complexo, a seguir está um exemplo de arquivo.csv com cabeçalhos.

FirstName,LastName,Address,City,State,PhoneNumber,Title,Level,Notes Jorge,Souza,12345 Mills Rd,Anytown,SC,703-555-1234,CEO,10, Paulo,Santos,0 Street,Anytown,MD,404-555-111,CIO,9,This is a really long note that could really be a paragraph Mateo,Jackson,1 Two St,Anytown,NY,304-555-1324,COO,9,"" Terry,Whitlock4 N St,Anytown,VA,407-555-8888,EA,7,Secret notes Diego,Ramirez,9 Hollows Rd,Anytown,VA,407-555-1222,SDE I,4,null John,Doe,8 Hollows Rd,Anytown,VA,407-555-4321,SDE I,4,Jane's younger brother Jane,Doe,8 Hollows Rd,Anytown,VA,407-555-4322,SDE II,5,John's older sister

No exemplo de esquema mapeado a seguir, as colunas FirstName e LastName são cleartext colunas. A State coluna é criptografada como uma fingerprint coluna e como uma sealed coluna com um preenchimento denone. As colunas restantes são omitidas.

{ "headerRow": true, "columns": [ { "sourceHeader": "FirstName", "targetHeader": "GivenName", "type": "cleartext" }, { "sourceHeader": "LastName", "targetHeader": "Surname", "type": "cleartext" }, { "sourceHeader": "State", "targetHeader": "State_Join", "type": "fingerprint" }, { "sourceHeader": "State", "targetHeader": "State", "type": "sealed", "pad": { "type": "none" } } ] }

A seguir está o arquivo.csv que resulta do esquema mapeado.

givenname,surname,state_fingerprint,state John,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:FQ3n3Ahv9BQQNWQGcugeHzHYzEZE1vapHa2Uu4SRgSAtZ3qObjPA4TcsHt+BOkMKBcnHWI13BeGG/SBqmj7vKpI= Paulo,Santos,01:hmac:CHF4eIrtTNgAooU9v4h9Qjc+txBnMidQTjdjWuaDTTA=,01:enc:KZ5n5GtaXACco65AXk48BQO2durDNR2ULc4YxmMC8NaZZKKJiksU1IwFadAvV4iBQ1Bus5TU5c4biez3bilfTY8= Mateo,Jackson,01:hmac:iIRnjfNBzryusIJ1w35lgNzeY1RQ1bSfq6PDHW8Xrbk=,01:enc:mLKpS5HIOSgphdEsrzhEdIp/eN9nBO2gAbIygt4OFn4LalYn9Xyj/XUWXlmn8zFe2T4kyDTD8kGOvpQEUGxAUFk= Diego,Ramirez,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:rmZhT98Zm+IIGw1UTjMIJP4IrW/AAltBLMXcHvnYfRgmWP623VFQ6aUnhsb2MDqEw4G5Uwg5rKKZepUxx5uKbfk= Jorge,Souza,01:hmac:3BxJdXiFFyZ8HBbYNqqEhBVqhNOd7s2ZiKUe7QiTyo8=,01:enc:vVaqWC1VRbhvkf8gnuR7q0zxVPcvEjuaglYz34+KyyLcGZLpAmsDUc6wZ07f2KvHoOySqRsEU7dG1QfdHYcTSWE= Terry,Whitlock01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:3c9VEWbODO/xbQjdGuccLvI7oZTBdPU+SyrJIyr2kudfAxbuMQ2uRdU/q7rbgyJjxZS8M2U35ILJf/lDgTyg7cM= Jane,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:9RWv46YLveykeNZ/G0NdlYFg+AVdOnu05hHyAYTQkPLHnyX+0/jbzD/g9ZT8GCgVE9aB5bV4ooJIXHGBVMXcjrQ=

Esquema de tabela posicional

O esquema posicional tem a seguinte forma.

{ "headerRow": false, "columns": [ [ { "targetHeader": STRING, "type": TYPE, "pad": PAD }, { "targetHeader": STRING, "type": TYPE, "pad": PAD } ], [], ... ] }

Se headerRow forfalse, o próximo campo no objeto serácolumns, que contém uma matriz de entradas. Cada entrada em si é uma matriz de zero ou mais esquemas de colunas posicionais (sem sourceHeader campo), que são JSON objetos que descrevem o que a saída deve conter.

  • sourceHeader— O nome do STRING cabeçalho da coluna de origem da qual os dados são derivados.

    nota

    Esse campo deve ser omitido nos esquemas posicionais. Em esquemas posicionais, a coluna de origem é inferida pelo índice correspondente da coluna no arquivo do esquema.

  • targetHeader— O nome do STRING cabeçalho da coluna correspondente no arquivo de saída.

    nota

    Esse campo é obrigatório para esquemas posicionais.

  • type— A coluna TYPE de destino no arquivo de saída. Ou seja, uma das cleartextsealed, ou fingerprint dependendo de como a coluna será usada na colaboração.

  • pad— Um campo de um objeto de esquema de coluna que só está presente quando o TYPE ésealed. Seu valor correspondente de PAD é um objeto que descreve como os dados devem ser preenchidos antes de serem criptografados.

    { "type": PAD_TYPE, "length": INT }

    Para especificar o preenchimento de pré-criptografia, type e length são usados da seguinte forma:

    • PAD_TYPEas none — Nenhum preenchimento será aplicado aos dados da coluna e o length campo não é aplicável (ou seja, omitido).

    • PAD_TYPEas fixed — Os dados da coluna são length preenchidos com os bytes especificados.

    • PAD_TYPEas max — Os dados da coluna são preenchidos até o tamanho do byte do valor mais longo, mais bytes adicionais. length

      nota

      fixedé útil se você souber com antecedência um limite superior no tamanho do byte dos dados da coluna. Um erro é gerado se algum dado nessa coluna for maior que o especificadolength.

      maxé conveniente quando o tamanho exato dos dados de entrada é desconhecido, pois funciona independentemente do tamanho dos dados. No entanto, max requer tempo de processamento adicional porque criptografa os dados duas vezes. maxcriptografa os dados uma vez quando lidos no arquivo temporário e uma vez após a entrada de dados mais longa na coluna ser conhecida.

      Além disso, o comprimento do valor mais longo não é salvo entre as invocações do cliente. Se você planeja criptografar seus dados em lotes ou criptografar novos dados periodicamente, esteja ciente de que os comprimentos de texto cifrado resultantes podem variar entre os lotes.

Veja a seguir um exemplo de um esquema posicional.

{ "headerRow": false, "columns": [ [ { "targetHeader": "name", "type": "cleartext" } ], [ { "targetHeader": "city_sealed", "type": "sealed", "pad": { "type": "max", "length": 16 } } ], [ { "targetHeader": "phone_number_fingerprint", "type": "fingerprint" }, { "targetHeader": "phone_number_sealed", "type": "sealed", "pad": { "type": "fixed", "length": 20 } } ] ] }

Como um exemplo complexo, a seguir está um exemplo de arquivo.csv se ele não tivesse a primeira linha com os cabeçalhos.

Jorge,Souza,12345 Mills Rd,Anytown,SC, 703 -555 -1234,CEO, 10, Paulo,Santos, 0 Street,Anytown,MD, 404-555-111,CIO, 9,This is a really long note that could really be a paragraph Mateo,Jackson, 1 Two St,Anytown,NY, 304-555-1324,COO, 9, "" Terry,Whitlock, 4 N St,Anytown,VA, 407-555-8888,EA, 7,Secret notes Diego,Ramirez, 9 Hollows Rd,Anytown,VA, 407-555-1222,SDE I, 4,null John,Doe, 8 Hollows Rd,Anytown,VA, 407-555-4321,SDE I, 4,Jane's younger brother Jane,Doe, 8 Hollows Rd,Anytown,VA, 407-555-4322,SDE II, 5,John's older sister

O esquema posicional tem o seguinte formato.

{ "headerRow": false, "columns": [ [ { "targetHeader": "GivenName", "type": "cleartext" } ], [ { "targetHeader": "Surname", "type": "cleartext" } ], [], [], [ { "targetHeader": "State_Join", "type": "fingerprint" }, { "targetHeader": "State", "type": "sealed", "pad": { "type": "none" } } ], [], [], [], [] ] }

O esquema anterior produz o seguinte arquivo de saída com uma linha de cabeçalho contendo os cabeçalhos de destino especificados.

givenname,surname,state_fingerprint,state Mateo,Jackson,01:hmac:iIRnjfNBzryusIJ1w35lgNzeY1RQ1bSfq6PDHW8Xrbk=,01:enc:ENS6QD3cMVl9vQEGfe9MNWfR0UOupchswZFr94zOMG5jY/Q8m/Y5SA89dJwKpT5rGPp8e36h6klwDoslpFzGvU0= Jorge,Souza,01:hmac:3BxJdXiFFyZ8HBbYNqqEhBVqhNOd7s2ZiKUe7QiTyo8=,01:enc:LKo0zirq2++XEIIIMNRjAsGMdyWUDwYaum0B+IFP+rUf1BNeZDJjtFe1Z+zbZfXQWwJy52Rt7HqvAb2WIK1oMmk= Paulo,Santos,01:hmac:CHF4eIrtTNgAooU9v4h9Qjc+txBnMidQTjdjWuaDTTA=,01:enc:MyQKyWxJ9kvK1xDQQtXlUNwv3F+yrBRr0xrUY/1BGg5KFgOn9pK+MZ7g+ZNqZEPcPz4lht1u0t/wbTaqzOCLXFQ= Jane,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:Pd8sbITBfb0/ttUB4svVsgoYkDfnDvgkvxzeci0Yxq54rLSwccy1o3/B50C3cpkkn56dovCwzgmmPNwrmCmYtb4= Terry,Whitlock01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:Qmtzu3B3GAXKh2KkRYTiEAaMopYedsSdF2e/ADUiBQ9kv2CxKPzWyYTD3ztmKPMka19dHre5VhUHNpO3O+j1AQ8= Diego,Ramirez,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:ysdg+GHKdeZrS/geBIooOEPLHG68MsWpx1dh3xjb+fG5rmFmqUcJLNuuYBHhHAlxchM2WVeV1fmHkBX3mvZNvkc= John,Doe,01:hmac:UK8s8Cn/WR2JO/To2dTxWD73aDEe2ZUXeSHy3Tv+1Mk=,01:enc:9uX0wZuO7kAPAx+Hf6uvQownkWqFSKtWS7gQIJSe5aXFquKWCK6yZN0X5Ea2N3bn03Uj1kh0agDWoiP9FRZGJA4=