(Facultatif) Créez un schéma (utilisateurs avancés) - AWS Clean Rooms

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

(Facultatif) Créez un schéma (utilisateurs avancés)

La création manuelle d'un schéma est réservée aux utilisateurs expérimentés.

Vous trouverez ci-dessous une description du format de fichier de JSON schéma pour les fichiers d'entrée avec ou sans en-têtes de colonne. Les utilisateurs avancés peuvent directement écrire ou modifier le schéma s'ils le souhaitent.

Note

Le client de chiffrement C3R peut vous aider à créer un schéma par le biais du processus interactif décrit dans Exemple : génération d'un schéma de chiffrement avec des cleartext colonnes sealedfingerprint, et ou par la création d'un modèle de stub.

Schémas de tables cartographiées et positionnelles

La section suivante décrit deux types de schémas de table :

  • Schéma de table mappé — Ce schéma est utilisé pour chiffrer les fichiers .csv avec une ligne d'en-tête et des fichiers. Apache Parquet

  • Schéma de table positionnelle — Ce schéma est utilisé pour chiffrer des fichiers .csv sans ligne d'en-tête.

Le client de chiffrement C3R peut chiffrer un fichier tabulaire pour une collaboration. Pour ce faire, il doit disposer d'un fichier de schéma correspondant qui indique comment la sortie cryptée doit être dérivée de l'entrée.

Le client de chiffrement C3R peut aider à générer un schéma pour un INPUT fichier en exécutant la commande C3R encryption client schema sur la ligne de commande. Voici un exemple de commandejava -jar c3r-cli.jar schema --interactive INPUT.

Le schéma indique les informations suivantes :

  1. Quelles colonnes source correspondent à quelles colonnes transformées dans le fichier de sortie par le biais de leur nom d'en-tête (schémas mappés) ou de leur position (schémas positionnels)

  2. Quelles colonnes cibles doivent rester cleartext

  3. Quelles colonnes cibles doivent être cryptées pour les SELECT requêtes

  4. Quelles colonnes cibles doivent être cryptées pour les JOIN requêtes

Ces informations sont codées dans un fichier de JSON schéma spécifique à une table, composé d'un seul objet dont headerRow le champ est une valeur booléenne. La valeur doit être true pour Parquet les fichiers et les fichiers .csv avec une ligne d'en-tête, et false sinon.

Schéma de table mappé

Le schéma mappé a la forme suivante.

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

Si tel headerRow est le castrue, le champ suivant de l'objet contient un tableau de schémas de colonnes qui mappent les en-têtes source aux en-têtes cibles (c'est-à-dire des JSON objets décrivant ce que les colonnes de sortie doivent contenir). columns

  • sourceHeader— Le nom d'STRINGen-tête de la colonne source dont les données sont dérivées.

    Note

    La même colonne source peut être utilisée pour plusieurs colonnes cibles.

    Une colonne du fichier d'entrée qui n'est répertoriée sourceHeader nulle part dans le schéma n'apparaît pas dans le fichier de sortie.

  • targetHeader— Le nom d'STRINGen-tête de la colonne correspondante dans le fichier de sortie.

    Note

    Ce champ est facultatif pour les schémas mappés. Si ce champ est omis, il sourceHeader est réutilisé comme nom d'en-tête dans la sortie. L'_fingerprintun ou l'autre _sealed est ajouté si la colonne de sortie est une fingerprint colonne ou une sealed colonne respectivement.

  • type— Celui TYPE de la colonne cible dans le fichier de sortie. C'est-à-dire l'une des options cleartext ou fingerprint selon la manière dont la colonne sera utilisée dans le cadre de la collaboration. sealed

  • pad— Champ d'un objet de schéma de colonne qui n'est présent que lorsque TYPE c'est le cassealed. La valeur correspondante de PAD est un objet qui décrit la manière dont les données doivent être remplies avant d'être cryptées.

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

    Pour spécifier le rembourrage avant le chiffrement, type length ils sont utilisés comme suit :

    • PAD_TYPEas none — Aucun remplissage ne sera appliqué aux données de la colonne et le length champ n'est pas applicable (c'est-à-dire omis).

    • PAD_TYPEas fixed — Les données de la colonne sont complétées au nombre length d'octets spécifié.

    • PAD_TYPEas max — Les données de la colonne sont complétées à la taille de l'octet de la valeur la plus longue plus un length octet supplémentaire.

Voici un exemple de schéma mappé, avec une colonne de chaque type.

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

À titre d'exemple plus complexe, voici un exemple de fichier .csv avec des en-têtes.

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

Dans l'exemple de schéma mappé suivant, les colonnes FirstName et LastName sont des cleartext colonnes. La State colonne est cryptée en tant que fingerprint colonne et en tant que sealed colonne avec un rembourrage denone. Les autres colonnes sont omises.

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

Le fichier .csv qui résulte du schéma mappé est le suivant.

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=

Schéma de tableau positionnel

Le schéma positionnel a la forme suivante.

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

Si headerRow tel est le casfalse, le champ suivant de l'objet estcolumns, qui contient un tableau d'entrées. Chaque entrée est elle-même un tableau de zéro ou plusieurs schémas de colonnes positionnels (aucun sourceHeader champ), qui sont JSON des objets décrivant ce que la sortie doit contenir.

  • sourceHeader— Le nom d'STRINGen-tête de la colonne source dont les données sont dérivées.

    Note

    Ce champ doit être omis dans les schémas de position. Dans les schémas positionnels, la colonne source est déduite par l'index correspondant de la colonne dans le fichier de schéma.

  • targetHeader— Le nom d'STRINGen-tête de la colonne correspondante dans le fichier de sortie.

    Note

    Ce champ est obligatoire pour les schémas de position.

  • type— Celui TYPE de la colonne cible dans le fichier de sortie. C'est-à-dire l'une des options cleartext ou fingerprint selon la manière dont la colonne sera utilisée dans le cadre de la collaboration. sealed

  • pad— Champ d'un objet de schéma de colonne qui n'est présent que lorsque TYPE c'est le cassealed. La valeur correspondante de PAD est un objet qui décrit la manière dont les données doivent être remplies avant d'être cryptées.

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

    Pour spécifier le rembourrage avant le chiffrement, type length ils sont utilisés comme suit :

    • PAD_TYPEas none — Aucun remplissage ne sera appliqué aux données de la colonne et le length champ n'est pas applicable (c'est-à-dire omis).

    • PAD_TYPEas fixed — Les données de la colonne sont complétées au nombre length d'octets spécifié.

    • PAD_TYPEas max — Les données de la colonne sont complétées à la taille de l'octet de la valeur la plus longue plus un length octet supplémentaire.

      Note

      fixedest utile si vous connaissez à l'avance la limite supérieure de la taille en octets des données de la colonne. Une erreur est générée si les données de cette colonne sont plus longues que celles spécifiéeslength.

      maxest pratique lorsque la taille exacte des données d'entrée est inconnue, car elle fonctionne quelle que soit la taille des données. Cependant, max cela nécessite un temps de traitement supplémentaire car il chiffre les données deux fois. maxchiffre les données une fois lorsqu'elles sont lues dans le fichier temporaire et une fois que l'entrée de données la plus longue dans la colonne est connue.

      De plus, la longueur de la valeur la plus longue n'est pas enregistrée entre les appels du client. Si vous prévoyez de chiffrer vos données par lots, ou de chiffrer régulièrement de nouvelles données, sachez que la longueur du texte chiffré peut varier d'un lot à l'autre.

Voici un exemple de schéma positionnel.

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

À titre d'exemple complexe, voici un exemple de fichier .csv s'il ne contient pas la première ligne avec les en-têtes.

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

Le schéma positionnel se présente sous la forme suivante.

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

Le schéma précédent produit le fichier de sortie suivant avec une ligne d'en-tête contenant les en-têtes cibles spécifiés.

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=