(Facoltativo) Creare uno schema (utenti esperti) - AWS Clean Rooms

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

(Facoltativo) Creare uno schema (utenti esperti)

La creazione manuale di uno schema è riservata agli utenti esperti.

Di seguito è riportata una descrizione del formato di file dello schema JSON per i file di input con o senza intestazioni di colonna. Gli utenti esperti possono scrivere o modificare direttamente lo schema, se lo desiderano.

Nota

Il client di crittografia C3R può aiutarti a creare uno schema tramite il processo interattivo descritto in Esempio: generazione di uno schema di crittografia con sealedfingerprint, e colonne cleartext o tramite la creazione di un modello di stub.

Schemi di tabelle mappati e posizionali

La sezione seguente descrive due tipi di schemi di tabelle:

  • Schema di tabella mappato: questo schema viene utilizzato per crittografare i file.csv con una riga di intestazione e file. Apache Parquet

  • Schema della tabella posizionale: questo schema viene utilizzato per crittografare i file.csv senza una riga di intestazione.

Il client di crittografia C3R può crittografare un file tabulare per una collaborazione. A tale scopo, deve disporre di un file di schema corrispondente che specifichi in che modo l'output crittografato deve essere derivato dall'input.

Il client di crittografia C3R può aiutare a generare uno schema per un INPUT file eseguendo il comando schema del client di crittografia C3R nella riga di comando. Un esempio di comando è. java -jar c3r-cli.jar schema --interactive INPUT

Lo schema specifica le seguenti informazioni:

  1. Quali colonne di origine vengono mappate a quali colonne trasformate nel file di output tramite i nomi di intestazione (schemi mappati) o la posizione (schemi posizionali)

  2. Quali colonne di destinazione devono rimanere cleartext

  3. Quali colonne di destinazione devono essere crittografate per le SELECT query

  4. Quali colonne di destinazione devono essere crittografate per le query JOIN

Queste informazioni sono codificate in un file di schema JSON specifico della tabella, che consiste in un singolo oggetto il cui headerRow campo è un valore booleano. Il valore deve riguardare Parquet i file e true i file.csv con una riga di intestazione e altro. false

Schema della tabella mappata

Lo schema mappato ha la forma seguente.

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

In caso headerRow affermativotrue, il campo successivo nell'oggetto ècolumns, che contiene una matrice di schemi di colonne che mappano le intestazioni di origine alle intestazioni di destinazione (ovvero oggetti JSON che descrivono cosa devono contenere le colonne di output).

  • sourceHeader— Il nome dell'STRINGintestazione della colonna di origine da cui derivano i dati.

    Nota

    La stessa colonna di origine può essere utilizzata per più colonne di destinazione.

    Una colonna del file di input non elencata in sourceHeader nessun punto dello schema non viene visualizzata nel file di output.

  • targetHeader— Il nome dell'STRINGintestazione della colonna corrispondente nel file di output.

    Nota

    Questo campo è facoltativo per gli schemi mappati. Se questo campo viene omesso, sourceHeader viene riutilizzato come nome dell'intestazione nell'output. _sealedViene aggiunto _fingerprint o se la colonna di output è rispettivamente una colonna o una fingerprint colonna. sealed

  • type— La colonna TYPE di destinazione nel file di output. Cioè, una delle cleartext due o fingerprint dipende da come la colonna verrà utilizzata nella collaborazione. sealed

  • pad— Un campo di un oggetto dello schema a colonne che è presente solo quando TYPE èsealed. Il valore corrispondente di PAD è un oggetto che descrive come aggiungere i dati prima di essere crittografati.

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

    Per specificare il padding di pre-crittografia, type length vengono utilizzati come segue:

    • PAD_TYPEasnone: non verrà applicato alcun riempimento ai dati della colonna e il length campo non è applicabile (ovvero omesso).

    • PAD_TYPEas fixed — I dati della colonna vengono aggiunti al numero di byte specificatolength.

    • PAD_TYPEas max — I dati della colonna vengono aggiunti alla dimensione della lunghezza in byte del valore più lungo più un byte aggiuntivo. length

Di seguito è riportato un esempio di schema mappato, con una colonna di ogni 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 } } ] }

Come esempio più complesso, quello che segue è un esempio di file.csv con intestazioni.

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

Nel seguente esempio di schema mappato, le colonne e sono colonneFirstName. LastName cleartext La State colonna viene crittografata come fingerprint colonna e come sealed colonna con una spaziatura di. none Le colonne rimanenti vengono omesse.

{ "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" } } ] }

Di seguito è riportato il file.csv che risulta dallo schema mappato.

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=

Schema della tabella posizionale

Lo schema posizionale ha la forma seguente.

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

In caso headerRow affermativofalse, il campo successivo nell'oggetto ècolumns, che contiene una matrice di voci. Ogni voce è a sua volta una matrice di zero o più schemi di colonne posizionali (nessun sourceHeader campo), che sono oggetti JSON che descrivono cosa deve contenere l'output.

  • sourceHeader— Il nome dell'STRINGintestazione della colonna di origine da cui derivano i dati.

    Nota

    Questo campo deve essere omesso negli schemi posizionali. Negli schemi posizionali, la colonna di origine viene dedotta dall'indice corrispondente della colonna nel file di schema.

  • targetHeader— Il nome dell'STRINGintestazione della colonna corrispondente nel file di output.

    Nota

    Questo campo è obbligatorio per gli schemi posizionali.

  • type— La colonna TYPE di destinazione nel file di output. Cioè, una delle cleartext due o fingerprint dipende da come la colonna verrà utilizzata nella collaborazione. sealed

  • pad— Un campo di un oggetto dello schema a colonne che è presente solo quando TYPE èsealed. Il valore corrispondente di PAD è un oggetto che descrive come aggiungere i dati prima di essere crittografati.

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

    Per specificare il padding di pre-crittografia, type length vengono utilizzati come segue:

    • PAD_TYPEasnone: non verrà applicato alcun riempimento ai dati della colonna e il length campo non è applicabile (ovvero omesso).

    • PAD_TYPEas fixed — I dati della colonna vengono aggiunti al numero di byte specificatolength.

    • PAD_TYPEas max — I dati della colonna vengono aggiunti alla dimensione della lunghezza in byte del valore più lungo più un byte aggiuntivo. length

      Nota

      fixedè utile se si conosce in anticipo il limite superiore della dimensione in byte dei dati della colonna. Viene generato un errore se i dati in quella colonna sono più lunghi di quelli length specificati.

      maxè utile quando la dimensione esatta dei dati di input non è nota perché funziona indipendentemente dalla dimensione dei dati. Tuttavia, max richiede tempi di elaborazione aggiuntivi perché crittografa i dati due volte. maxcrittografa i dati una volta quando vengono letti nel file temporaneo e una volta dopo che è nota l'immissione dei dati più lunga nella colonna.

      Inoltre, la lunghezza del valore più lungo non viene salvata tra le chiamate del client. Se prevedi di crittografare i dati in batch o di crittografare periodicamente nuovi dati, tieni presente che le lunghezze del testo cifrato risultanti potrebbero variare da un batch all'altro.

Di seguito è riportato un esempio di schema posizionale.

{ "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 } } ] ] }

Come esempio complesso, quello che segue è un esempio di file.csv se non aveva la prima riga con le intestazioni.

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

Lo schema posizionale ha la forma seguente.

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

Lo schema precedente produce il seguente file di output con una riga di intestazione contenente le intestazioni di destinazione specificate.

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=