Ce document présente Cloud HSM et explique comment créer et utiliser des clés de chiffrement protégées par un HSM dans Cloud Key Management Service.
Qu'est-ce que Cloud HSM ?
Cloud HSM est un service de module de sécurité matériel (HSM) hébergé dans le cloud qui vous 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 de clés dans un emplacement Google Clouddonné. 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 Google Cloud emplacement compatible avec Cloud HSM.
Console
Dans la console Google Cloud , accédez à la page Gestion des clés.
Cliquez sur Créer un trousseau de clés.
Dans le champ Nom du trousseau de clés, saisissez un nom pour votre trousseau de clés.
Pour Emplacement du trousseau de clés, sélectionnez un emplacement tel que
"us-east1".Cliquez sur Créer.
gcloud
-
Dans la console Google Cloud , activez Cloud Shell.
-
Dans votre environnement, exécutez la commande
gcloud kms keyrings create:gcloud kms keyrings create KEY_RING \ --location LOCATIONRemplacez 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 découvrir comment utiliser PHP sur Google Cloud et installer le SDK PHP Cloud KMS.
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é
Pour créer une clé Cloud HSM dans le trousseau de clés et l'emplacement spécifiés, procédez comme suit.
Console
Dans la console Google Cloud , accédez à la page Gestion des clés.
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 ou HSM à locataire unique.
Si vous avez sélectionné HSM à locataire unique, sélectionnez l'instance HSM à locataire unique dans laquelle vous souhaitez créer la clé.
Cliquez sur le menu déroulant Objectif, puis 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 à niveau la dernière version de Google Cloud CLI.
Pour créer une clé Cloud HSM multitenant, exécutez la commande kms keys create avec le niveau de protection hsm.
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm"
Remplacez les éléments suivants :
KEY_NAME: nom que vous souhaitez utiliser pour la clé.KEY_RING: nom du trousseau de clés dans lequel vous souhaitez créer la clé.LOCATION: emplacement du trousseau de clés.
Pour en savoir plus sur toutes les options et valeurs possibles, exécutez la commande avec l'option --help.
Pour créer une clé Cloud HSM à locataire unique, exécutez la commande kms keys create avec le niveau de protection hsm-single-tenant et spécifiez l'instance Cloud HSM à locataire unique dans laquelle vous souhaitez créer la clé. L'instance Cloud HSM à locataire unique doit se trouver au même emplacement que le trousseau de clés.
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm-single-tenant" \
--crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
Remplacez les éléments suivants :
KEY_NAME: nom que vous souhaitez utiliser pour la clé.KEY_RING: nom du trousseau de clés dans lequel vous souhaitez créer la clé.LOCATION: emplacement du trousseau de clés.PROTECTION_LEVEL: niveau de protection de la clé que vous souhaitez créer.INSTANCE_PROJECT: identifiant du projet dans lequel se trouve votre instance Cloud HSM à locataire unique.INSTANCE_NAME: nom de l'instance Cloud HSM à locataire unique dans laquelle vous souhaitez créer la clé. Pour en savoir plus sur les instances Cloud HSM à locataire unique, consultez Créer et gérer une instance Cloud HSM à locataire unique.
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 découvrir comment utiliser PHP sur Google Cloud et installer le SDK PHP Cloud KMS.
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.
Pour créer une clé Cloud HSM multitenant, utilisez la méthode CryptoKey.create avec le niveau de protection HSM :
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM", "algorithm": "ALGORITHM" }}'
Remplacez les éléments suivants :
PROJECT_ID: ID du projet contenant le trousseau de clés.LOCATION: emplacement Cloud KMS du trousseau de clés.KEY_RING: nom du trousseau de clés qui inclut la cléKEY_NAME: nom de la clé.ALGORITHM: algorithme que vous souhaitez utiliser (par exemple,GOOGLE_SYMMETRIC_ENCRYPTION). Pour afficher tous les algorithmes compatibles, consultez Objectifs et algorithmes des clés.
Pour créer une clé Cloud HSM à locataire unique, utilisez la méthode CryptoKey.create avec le niveau de protection HSM_SINGLE_TENANT :
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM_SINGLE_TENANT", "algorithm": "ALGORITHM",
"cryptoKeyBackend": "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME" }}'
Remplacez les éléments suivants :
PROJECT_ID: ID du projet contenant le trousseau de clés.LOCATION: emplacement Cloud KMS du trousseau de clés.KEY_RING: nom du trousseau de clés qui inclut la cléKEY_NAME: nom de la clé.ALGORITHM: algorithme que vous souhaitez utiliser (par exemple,GOOGLE_SYMMETRIC_ENCRYPTION). Pour afficher tous les algorithmes compatibles, consultez Objectifs et algorithmes des clés.INSTANCE_PROJECT: identifiant du projet dans lequel se trouve votre instance Cloud HSM à locataire unique.INSTANCE_NAME: nom de l'instance Cloud HSM à locataire unique dans laquelle vous souhaitez créer la clé. Pour en savoir plus sur les instances Cloud HSM à locataire unique, consultez Créer et gérer une instance Cloud HSM à locataire unique.
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 à niveau 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 vers lequel vous souhaitez enregistrer le résultat chiffré.
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 découvrir comment utiliser PHP sur Google Cloud et installer le SDK PHP Cloud KMS.
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 encodé en base64 avant de pouvoir être chiffré par Cloud KMS.
Pour chiffrer des données, envoyez une requête POST, fournissez les informations appropriées sur le projet et la clé, 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 à niveau 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 vers lequel vous souhaitez enregistrer le résultat déchiffré.
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 découvrir comment utiliser PHP sur Google Cloud et installer le SDK PHP Cloud KMS.
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é renvoyé dans le JSON par Cloud KMS est encodé en base64.
Pour déchiffrer des données chiffrées, envoyez une requête POST, fournissez les informations appropriées sur le projet et la clé, 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 utiliser une clé asymétrique avec le niveau de protection HSM pour la signature de courbe elliptique ou la signature RSA, suivez les étapes décrites dans Créer et valider des signatures en 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 de l'API Cloud KMS.
Consultez les guides d'utilisation pour découvrir comment créer des clés, les faire pivoter et définir des autorisations sur celles-ci.
Consultez la page Concepts pour mieux comprendre 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 avec des niveaux de protection HSM et logiciel.
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 des messages 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.
Cloud HSM n'est pas disponible dans tous les emplacements multirégionaux. Pour obtenir la liste de tous les emplacements compatibles avec Cloud HSM mutualisé, consultez Emplacements Cloud KMS, puis sélectionnez Compatible avec HSM mutualisé pour le filtre Compatibilité HSM.
Cloud HSM à locataire unique est disponible dans un sous-ensemble d'emplacements où Cloud HSM multilocataire est disponible. Pour obtenir la liste de tous les emplacements compatibles avec Cloud HSM à locataire unique, consultez Emplacements Cloud KMS, puis sélectionnez Compatible avec le HSM à locataire unique pour le filtre Compatibilité avec le 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.
Les opérations sur les clés asymétriques stockées dans Cloud HSM peuvent entraîner une latence sensiblement plus élevée que l'utilisation de clés logicielles Cloud KMS.
Rack HSM Bare Metal
Google Cloud propose des options HSM supplémentaires, telles que la location unique. Bare Metal Rack HSM est disponible pour permettre aux clients d'héberger leurs propres HSM dans un espace fourni par Google. Pour en savoir plus, contactez votre responsable de compte.