Le Blog Amazon Web Services

Comment chiffrer et déchiffrer vos données avec le CLI de chiffrement AWS

Avec AWS, vous pouvez chiffrer et déchiffrer vos données en utilisant l’interface en ligne de commande et les scripts – il n’est pas nécessaire d’être un expert en chiffrement ou en programmation. L’interface de ligne de commande, interface de ligne de commande Kit SDK de chiffrement AWS (Kit CLI de chiffrement AWS), intègre le Kit de chiffrement AWS à la ligne de commande.

Avec le Kit CLI de chiffrement AWS, vous pouvez profiter de la protection avancée des données intégrée dans le Kit SDK de chiffrement AWS, y compris le chiffrement d’enveloppe et les suites d’algorithmes évoluées, tels que AES-GCM 256 bits avec HKDF. Le Kit CLI de chiffrement AWS prend en charge les meilleures pratiques, telles que le chiffrement authentifié avec des clés de chiffrement symétriques et des clés de signature asymétriques, ainsi que des clés de données uniques pour chaque opération de chiffrement. Vous pouvez utiliser le CLI avec les clés principales client (CMK) d’AWS Key Management Service (AWS KMS), les clés principales que vous gérez dans AWS CloudHSM, ou les clés principales de votre propre fournisseur de clés principales personnalisées. Néanmoins, sachez que le Kit CLI de chiffrement AWS peut également être utilisé sans aucun service AWS.

Le Kit CLI de chiffrement AWS repose sur le kit SDK de chiffrement AWS pour Python et est interopérable avec toutes les implémentations spécifiques au langage du Kit SDK de chiffrement AWS. Il est supporté sous Linux, macOS et Windows. Vous pouvez exécuter des commandes et des scripts pour chiffrer et déchiffrer vos données dans le shell de votre choix sous Linux ou macOS, dans une fenêtre d’invite de commande (cmd.exe) sous Windows, et dans une console PowerShell sur n’importe quel système.

Dans cet article, nous allons vous montrer comment utiliser le Kit CLI de chiffrement AWS pour chiffrer et déchiffrer un fichier. Vous pouvez trouver d’autres exemples d’utilisation du CLI et des instructions détaillées pour l’installation et la configuration du CLI dans le guide du développeur du Kit SDK de chiffrement AWS. Vous êtes également bienvenu pour participer au développement du Kit CLI de chiffrement AWS (aws-encryption-sdk-cli) sur GitHub.

Chiffrer un fichier

Utilisons le CLI de chiffrement AWS pour chiffrer un fichier appelé secret.txt dans votre répertoire courant. Nous allons écrire le fichier de sortie chiffré dans le même répertoire. Ce fichier secret.txt contient une chaîne de caractères “Hello World”, mais il pourrait contenir aussi des données critiques pour votre entreprise.

$ ls
secret.txt

$ cat secret.txt
Hello World

Nous utilisons ici un shell Linux, mais vous pouvez exécuter des commandes similaires dans un shell macOS, une fenêtre d’invite de commande ou une console PowerShell.

Lorsque vous chiffrez des données, vous spécifiez une clé principale client (Customer Master Key – CMK). Cet exemple utilise une CMK provenant d’AWS KMS, mais vous pouvez utiliser une clé principale de n’importe quel fournisseur de clé principale compatible avec le Kit SDK de chiffrement AWS. Le Kit CLI de chiffrement AWS utilise la clé principale pour générer une clé de données unique pour chaque fichier chiffré.

Si vous utilisez une CMK provenant d’AWS KMS comme clé principale, vous devez installer et configurer l’interface de ligne de commande AWS (AWS CLI) de sorte que les informations d’identification que vous utilisez pour vous authentifier auprès d’AWS KMS soient disponibles pour le Kit CLI de chiffrement AWS. Ces identifiants vous donnent la permission d’appeler les API GenerateDataKey et Decrypt d’AWS KMS sur la CMK.

La première ligne de cet exemple enregistre un AWS KMS CMK ID dans la variable $keyID. La deuxième ligne chiffre les données dans le fichier secret.txt. (Note: La barre oblique inverse, “\”, est le caractère de continuation de ligne dans les shells Linux). Pour exécuter la commande suivante, vous devez utiliser un identifiant CMK valide comme valeur de la variable $keyID à la place de <111122223333>.

$ keyID = "<111122223333>"
$ aws-encryption-cli --encrypt --input secret.txt \
                     --master-keys key=$keyID \
                     --encryption-context purpose=test \
                     --metadata-output ~/metadata \
                     --output .

Cette commande utilise le paramètre --encrypt (-e) pour spécifier l’action de chiffrement et le paramètre --master-keys (-m) avec un attribut de clé pour spécifier une CMK AWS KMS. Si vous n’utilisez pas une CMK AWS KMS, vous devez inclure l’attribut provider qui identifie le fournisseur de la clé principale.

La commande utilise également le paramètre --encryption-context (-c) pour spécifier un contexte de chiffrement, purpose=test, pour l’opération. Le contexte de chiffrement est constitué de données non secrètes qui sont liées cryptographiquement aux données chiffrées et incluses en texte clair dans le message chiffré que le CLI renvoie. Fournir des données authentifiées supplémentaires, telles qu’un contexte de chiffrement, est une bonne pratique recommandée.

Le paramètre --metadata-output indique au Kit CLI de chiffrement AWS où écrire les métadonnées pour la commande de chiffrement. Les métadonnées comprennent les chemins d’accès complets aux fichiers d’entrée et de sortie, le contexte de chiffrement, la suite d’algorithmes et d’autres informations précieuses que vous pouvez utiliser pour examiner l’opération et vérifier qu’elle répond à vos normes de sécurité.

Les paramètres --input (-i) et --output (-o) sont requis dans chaque commande du Kit CLI de chiffrement AWS. Dans cet exemple, le fichier d’entrée est le fichier secret.txt. L’emplacement de sortie est le répertoire courant, qui est représenté par un point (“.”).

Lorsque la commande --encrypt réussit, elle crée un nouveau fichier qui contient les données chiffrées, mais elle ne retourne aucun résultat. Pour voir les résultats de la commande, utilisez une commande de listage de répertoire, telle que ls ou dir. L’exécution de la commande ls dans cet exemple montre que le Kit CLI de chiffrement AWS a généré le fichier secret.txt.encrypted.

$ ls
secret.txt  secret.txt.encrypted

Par défaut, le fichier de sortie que la commande --encrypt crée a le même nom que le fichier d’entrée, plus un suffixe .encrypted. Vous pouvez utiliser le paramètre --suffix pour spécifier un suffixe personnalisé.

Le fichier secret.txt.encrypted contient un message chiffré unique, portable et sécurisé. Le message chiffré comprend les données chiffrées, une copie chiffrée de la clé qui a permis de chiffrer les données, et des métadonnées, y compris le contexte de chiffrement en clair que nous avons fourni.

Vous pouvez gérer un fichier chiffré de la manière que vous souhaitez, y compris en le copiant dans un compartiment Amazon S3 ou en l’archivant pour une utilisation ultérieure.

Déchiffrer un fichier

Maintenant, nous allons utiliser le Kit CLI de chiffrement AWS pour déchiffrer le fichier secret.txt.encrypted. Si vous avez les autorisations requises sur votre clé principale, vous pouvez utiliser n’importe quelle version du Kit SDK de chiffrement AWS pour déchiffrer un fichier qui a été chiffré en utilisant le Kit CLI de chiffrement AWS, y compris les bibliothèques du Kit SDK de chiffrement AWS en Java et Python.

Cependant, vous ne pouvez pas utiliser d’autres outils, tels que le client de chiffrement Amazon S3 ou le client de chiffrement Amazon DynamoDB, pour déchiffrer le message chiffré avec le Kit CLI de chiffrement AWS, car ils utilisent un format de message chiffré incompatible.

La commande suivante permet de déchiffrer le contenu du fichier secret.txt.encrypted.

$ aws-encryption-cli --decrypt --input secret.txt.encrypted \
                     --encryption-context purpose=test \
                     --metadata-output ~/metadata \
                     --output .

La commande --decrypt nécessite un message chiffré, comme celui que la commande --encrypt a généré, ainsi que les deux paramètres --input et --output.

Cette commande n’a pas de paramètre --master-keys. Un paramètre --master-keys n’est nécessaire que si vous n’utilisez pas une CMK AWS KMS.

Le paramètre --encryption-context fournit le même contexte de chiffrement que celui utilisé dans la commande de chiffrement. Ce paramètre n’est pas obligatoire, mais la vérification du contexte de chiffrement pendant le déchiffrement est une bonne pratique cryptographique.

Le paramètre --metatdata-output indique à la commande où écrire les métadonnées pour la commande de déchiffrement. Si le fichier existe, ce paramètre ajoute les métadonnées au fichier existant. Le Kit CLI de chiffrement AWS comprend également des paramètres qui modifient le fichier de métadonnées ou qui suppriment les métadonnées.

Lorsqu’elle réussit, la commande de déchiffrement génère le fichier de données déchiffrées (en texte clair), mais ne retourne aucun résultat. Pour voir les résultats de la commande de déchiffrement, utilisez une commande qui récupère le contenu du fichier, comme cat ou Get-Content.

$ ls
secret.txt  secret.txt.encrypted  secret.txt.encrypted.decrypted

$ cat secret.txt.encrypted.decrypted
Hello World

Le fichier de sortie que la commande --decrypt a créé porte le même nom que le fichier d’entrée, plus un suffixe .decrypted. Le paramètre --suffix fonctionne également sur les commandes --decrypt, vous permettant de spécifier des préfixes personnalisés.

Chiffrer des répertoires et plus encore

En plus du chiffrement et du déchiffrement d’un seul fichier, vous pouvez utiliser le Kit CLI de chiffrement AWS pour chiffrer et déchiffrer les chaînes de caractères que vous transmettez au CLI, ainsi que qu’une partie ou tous les fichiers d’un répertoire et de ses sous-répertoires, ou encore des volumes locaux ou externes. Vous trouverez des exemples complémentaires dans la documentation du Kit SDK de chiffrement AWS.

Le Kit CLI de chiffrement AWS prend également en charge des fonctionnalités plus avancées comme des suites d’algorithmes alternatifs, des fournisseurs de clés principales alternatifs basés sur Python, le chiffrement avec plusieurs clés principales, le chiffrement de données diffusées en continu, la création de messages chiffrés avec des longueur de cadre personnalisées et la mise en cache des clés de données.

Pour plus d’informations sur le Kit CLI de chiffrement AWS, consultez le Manuel du développeur du Kit SDK de chiffrement AWS et et regardez la documentation complète sur le site AWS. Si vous avez des questions concernant le Kit CLI de chiffrement AWS, soumettez un problème dans le projet aws-encryption-sdk-cli sur GitHub, ou lisez et postez sur le forum de discussion AWS Crypto Tools.

 

Si vous souhaitez découvrir d’autres contenus pratiques, des actualités et des annonces de fonctionnalités pour AWS Security, suivez-nous sur Twitter.

Article original rédigé en anglais par June Blender, Senior Technical Writer chez AWS, et traduit par Bruno Medeiros de Barros, Solutions Architect dans l’équipe AWS France, LinkedIn.