Cette rubrique présente Cloud HSM et vous explique comment créer et utiliser des clés de chiffrement protégées par HSM dans le service Cloud Key Management Service.
Qu'est-ce que Cloud HSM ?
Cloud HSM est un service de module de sécurité matériel (HSM, Hardware Security Module) sur le cloud, qui permet d'héberger des clés de chiffrement et d'effectuer des opérations cryptographiques dans un cluster de modules HSM certifiés FIPS 140-2 niveau 3. La gestion de ce cluster HSM étant assurée par Google, vous n'avez pas à vous soucier des questions de mise en cluster, de scaling ni de déploiement de correctifs. Dans la mesure où Cloud HSM utilise Cloud KMS comme interface, vous pouvez tirer parti de l'ensemble des avantages et des fonctionnalités offerts par Cloud KMS.
Créer un trousseau de clés
Lorsque vous créez une clé, vous l'ajoutez à un trousseau dans un emplacement Google Cloud donné. Vous pouvez créer un trousseau de clés ou en utiliser un existant. Dans cette rubrique, vous allez créer un trousseau de clés et y ajouter une nouvelle clé.
Créez un trousseau de clés dans un emplacement Google Cloud compatible avec Cloud HSM.
Console
Accédez à la page Gestion des clés dans la console Google Cloud.
Cliquez sur Créer un trousseau.
Dans Nom du trousseau, saisissez un nom pour votre trousseau de clés.
Dans Key ring location (Emplacement du trousseau), sélectionnez un emplacement tel que
"us-east1"
.Cliquez sur Créer.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
-
Dans votre environnement, exécutez la commande
gcloud kms keyrings create
:gcloud kms keyrings create KEY_RING \ --location LOCATION
Remplacez les éléments suivants :
KEY_RING
: nom du trousseau de clés qui inclut la cléLOCATION
: emplacement Cloud KMS du trousseau de clés.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option
--help
.
C#
Pour exécuter ce code, commencez par configurer un environnement de développement C#, puis installez le SDK Cloud KMS pour C#.
Go
Pour exécuter ce code, commencez par configurer un environnement de développement Go, puis installez le SDK Cloud KMS pour Go.
Java
Pour exécuter ce code, commencez par configurer un environnement de développement Java et installez le SDK Cloud KMS pour Java.
Node.js
Pour exécuter ce code, commencez par configurer un environnement de développement Node.js, puis installez le SDK Cloud KMS pour Node.js.
PHP
Pour exécuter ce code, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.
Python
Pour exécuter ce code, commencez par configurer un environnement de développement Python, puis installez le SDK Cloud KMS pour Python.
Ruby
Pour exécuter ce code, commencez par configurer un environnement de développement Ruby, puis installez le SDK Cloud KMS pour Ruby.
API
Ces exemples utilisent curl comme client HTTP pour démontrer l'utilisation de l'API. Pour en savoir plus sur le contrôle des accès, consultez la page Accéder à l'API Cloud KMS.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \ --request "POST" \ --header "authorization: Bearer TOKEN"
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet contenant le trousseau de clés.KEY_RING
: nom du trousseau de clés qui inclut la cléLOCATION
: emplacement Cloud KMS du trousseau de clés.
Pour plus d'informations, consultez la documentation de l'API KeyRing.create
.
Créer une clé
Suivez ces étapes pour créer une clé Cloud HSM dans le trousseau et l'emplacement spécifiés.
Console
Accédez à la page Gestion des clés dans la console Google Cloud.
Cliquez sur le nom du trousseau de clés pour lequel vous souhaitez créer une clé.
Cliquez sur Créer une clé.
Dans la section Quel type de clé souhaitez-vous créer ?, sélectionnez Clé générée.
Dans le champ Nom de la clé, saisissez le nom de votre clé.
Cliquez sur le menu déroulant Niveau de protection, puis sélectionnez HSM.
Cliquez sur la liste déroulante Objectif et sélectionnez Chiffrement/déchiffrement symétriques.
Acceptez les valeurs par défaut pour Rotation period (Période de rotation) et Starting on (Rotation à partir du).
Cliquez sur Créer.
gcloud
Pour utiliser Cloud KMS sur la ligne de commande, commencez par installer ou mettre à jour la dernière version de Google Cloud CLI.
gcloud kms keys create key \ --keyring key-ring \ --location location \ --purpose "encryption" \ --protection-level "hsm"
Remplacez key par le nom de la nouvelle clé. Remplacez key-ring par le nom du trousseau de clés existant où sera située la clé. Remplacez location par l'emplacement Cloud KMS du trousseau de clés.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option --help
.
C#
Pour exécuter ce code, commencez par configurer un environnement de développement C#, puis installez le SDK Cloud KMS pour C#.
Go
Pour exécuter ce code, commencez par configurer un environnement de développement Go, puis installez le SDK Cloud KMS pour Go.
Java
Pour exécuter ce code, commencez par configurer un environnement de développement Java et installez le SDK Cloud KMS pour Java.
Node.js
Pour exécuter ce code, commencez par configurer un environnement de développement Node.js, puis installez le SDK Cloud KMS pour Node.js.
PHP
Pour exécuter ce code, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.
Python
Pour exécuter ce code, commencez par configurer un environnement de développement Python, puis installez le SDK Cloud KMS pour Python.
Ruby
Pour exécuter ce code, commencez par configurer un environnement de développement Ruby, puis installez le SDK Cloud KMS pour Ruby.
Chiffrer des données
Maintenant que vous disposez d'une clé, vous pouvez vous en servir pour chiffrer un texte ou un contenu binaire.
gcloud
Pour utiliser Cloud KMS sur la ligne de commande, commencez par installer ou mettre à jour la dernière version de Google Cloud CLI.
gcloud kms encrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --plaintext-file FILE_TO_ENCRYPT \ --ciphertext-file ENCRYPTED_OUTPUT
Remplacez les éléments suivants :
KEY_NAME
: nom de la clé que vous souhaitez utiliser pour le chiffrement.KEY_RING
: nom du trousseau de clés qui inclut la cléLOCATION
: emplacement Cloud KMS contenant le trousseau de clés.FILE_TO_ENCRYPT
: chemin d'accès au fichier que vous souhaitez chiffrer.ENCRYPTED_OUTPUT
: chemin d'accès vers lequel vous souhaitez enregistrer la sortie chiffrée.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option --help
.
C#
Pour exécuter ce code, commencez par configurer un environnement de développement C#, puis installez le SDK Cloud KMS pour C#.
Go
Pour exécuter ce code, commencez par configurer un environnement de développement Go, puis installez le SDK Cloud KMS pour Go.
Java
Pour exécuter ce code, commencez par configurer un environnement de développement Java et installez le SDK Cloud KMS pour Java.
Node.js
Pour exécuter ce code, commencez par configurer un environnement de développement Node.js, puis installez le SDK Cloud KMS pour Node.js.
PHP
Pour exécuter ce code, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.
Python
Pour exécuter ce code, commencez par configurer un environnement de développement Python, puis installez le SDK Cloud KMS pour Python.
Ruby
Pour exécuter ce code, commencez par configurer un environnement de développement Ruby, puis installez le SDK Cloud KMS pour Ruby.
API
Ces exemples utilisent curl comme client HTTP pour démontrer l'utilisation de l'API. Pour en savoir plus sur le contrôle des accès, consultez la page Accéder à l'API Cloud KMS.
Lorsque vous utilisez JSON et l'API REST, le contenu doit être codé en base64 avant de pouvoir être chiffré par Cloud KMS.
Pour chiffrer des données, effectuez une requête POST
et fournissez les informations de projet et de clé appropriées, puis spécifiez le texte encodé en base64 à chiffrer dans le champ plaintext
du corps de la requête.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet contenant le trousseau de clés et la clé que vous souhaitez utiliser pour le chiffrement.LOCATION
: emplacement Cloud KMS contenant le trousseau de clés.KEY_RING
: trousseau de clés contenant la clé que vous souhaitez utiliser pour le chiffrement.KEY_NAME
: nom de la clé que vous souhaitez utiliser pour le chiffrement.PLAINTEXT_TO_ENCRYPT
: données en texte brut que vous souhaitez chiffrer. Le texte brut doit être encodé en base64 avant d'appeler la méthodeencrypt
.
Voici un exemple de charge utile avec des données encodées en base64:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
Déchiffrer le texte chiffré
Pour déchiffrer le contenu chiffré, vous devez utiliser la même clé que celle qui a servi à chiffrer ce contenu.
gcloud
Pour utiliser Cloud KMS sur la ligne de commande, commencez par installer ou mettre à jour la dernière version de Google Cloud CLI.
gcloud kms decrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file FILE_TO_DECRYPT \ --plaintext-file DECRYPTED_OUTPUT
Remplacez les éléments suivants :
KEY_NAME
: nom de la clé que vous souhaitez utiliser pour le déchiffrement.KEY_RING
: nom du trousseau de clés qui inclut la cléLOCATION
: emplacement Cloud KMS contenant le trousseau de clés.FILE_TO_DECRYPT
: chemin d'accès au fichier que vous souhaitez déchiffrer.DECRYPTED_OUTPUT
: chemin d'accès où vous souhaitez enregistrer la sortie déchiffrée.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option --help
.
C#
Pour exécuter ce code, commencez par configurer un environnement de développement C#, puis installez le SDK Cloud KMS pour C#.
Go
Pour exécuter ce code, commencez par configurer un environnement de développement Go, puis installez le SDK Cloud KMS pour Go.
Java
Pour exécuter ce code, commencez par configurer un environnement de développement Java et installez le SDK Cloud KMS pour Java.
Node.js
Pour exécuter ce code, commencez par configurer un environnement de développement Node.js, puis installez le SDK Cloud KMS pour Node.js.
PHP
Pour exécuter ce code, commencez par en apprendre plus sur l'utilisation de PHP sur Google Cloud, puis installez le SDK Cloud KMS pour PHP.
Python
Pour exécuter ce code, commencez par configurer un environnement de développement Python, puis installez le SDK Cloud KMS pour Python.
Ruby
Pour exécuter ce code, commencez par configurer un environnement de développement Ruby, puis installez le SDK Cloud KMS pour Ruby.
API
Ces exemples utilisent curl comme client HTTP pour démontrer l'utilisation de l'API. Pour en savoir plus sur le contrôle des accès, consultez la page Accéder à l'API Cloud KMS.
Le texte déchiffré qui est renvoyé au format JSON depuis Cloud KMS est encodé en base64.
Pour déchiffrer des données chiffrées, effectuez une requête POST
et fournissez les informations de projet et de clé appropriées, puis spécifiez le texte chiffré (également appelé texte chiffré) à déchiffrer dans le champ ciphertext
du corps de la requête.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet contenant le trousseau de clés et la clé que vous souhaitez utiliser pour le déchiffrement.LOCATION
: emplacement Cloud KMS contenant le trousseau de clés.KEY_RING
: trousseau de clés contenant la clé que vous souhaitez utiliser pour le déchiffrement.KEY_NAME
: nom de la clé que vous souhaitez utiliser pour le déchiffrement.ENCRYPTED_DATA
: données chiffrées que vous souhaitez déchiffrer.
Voici un exemple de charge utile avec des données encodées en base64:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
Étapes suivantes
L'exemple de chiffrement présenté dans cette rubrique utilisait une clé symétrique dotée du niveau de protection HSM. Pour chiffrer à l'aide d'une clé asymétrique présentant le niveau de protection HSM, suivez les étapes décrites dans la page Chiffrer et déchiffrer des données avec une clé asymétrique en y apportant les modifications suivantes :
- Créez le trousseau de clés dans l'une des régions disponibles pour Cloud HSM.
- Créez la clé avec le niveau de protection HSM.
Pour effectuer une signature à courbe elliptique ou une signature RSA à l'aide d'une clé asymétrique dotée du niveau de protection HSM, suivez les étapes décrites dans la page Créer et valider des signatures en y apportant les modifications suivantes:
- Créez le trousseau de clés dans l'une des régions disponibles pour Cloud HSM.
- Créez la clé avec le niveau de protection HSM.
Commencez à utiliser l'API.
Consultez la documentation de référence sur l'API Cloud KMS.
Lisez les guides d'utilisation pour découvrir comment créer des clés, effectuer des rotations de clés et définir des autorisations sur les clés.
Familiarisez-vous avec les concepts pour en savoir plus sur la hiérarchie des objets, les états des clés et la rotation des clés.
Apprenez-en plus sur la journalisation dans Cloud KMS. Notez que la journalisation est basée sur les opérations et s'applique aux clés présentant les deux niveaux de protection Logiciel et HSM.
Pour en savoir plus sur la façon dont Cloud HSM protège vos données, consultez le livre blanc sur l'architecture Cloud HSM.
Limitations connues
La taille du message est limitée à 8 Kio (contre 64 Kio pour les clés logicielles Cloud KMS) pour le texte brut et le texte chiffré fournis par l'utilisateur, y compris les données authentifiées supplémentaires.
Il est possible que Cloud HSM ne soit pas disponible dans certains emplacements multirégionaux ou birégionaux. Pour plus d'informations, consultez la section Régions disponibles pour Cloud HSM.
Si vous utilisez des clés Cloud HSM avec des intégrations de clés de chiffrement gérées par le client (CMEK) dans d'autres services Google Cloud, les emplacements que vous utilisez pour les services doivent correspondre exactement à ceux de vos clés Cloud HSM. Cela s'applique aux emplacements régionaux, birégionaux et multirégionaux.
Pour en savoir plus sur les intégrations de CMEK, consultez la section correspondante du document Chiffrement au repos.
Actuellement, les opérations de clé portant sur des clés stockées dans Cloud HSM peuvent entraîner une latence nettement supérieure à celle obtenue avec les clés logicielles Cloud KMS.
Rack HSM Bare Metal
Google Cloud propose des options HSM supplémentaires, telles que la location unique. Les rack HSM Bare Metal sont disponibles pour les clients afin d'héberger leurs propres HSM dans un espace fourni par Google. Renseignez-vous auprès de votre responsable de compte pour en savoir plus.