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) 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 HSM certifiés FIPS 140-2 de niveau 3. Google gère le cluster HSM pour vous. Vous n'avez donc pas à vous préoccuper du clustering, du scaling ni de l'application de correctifs. Étant donné que Cloud HSM utilise Cloud KMS comme interface, vous pouvez exploiter toutes les fonctionnalités et tous les avantages offerts par ce service.
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 de clés.
Dans le champ Nom du trousseau de clés, saisissez le nom du trousseau de clés.
Pour Emplacement du trousseau, 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 LOCATION
Remplacez les éléments suivants :
KEY_RING
: nom du trousseau de clés contenant 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 contenant 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 via la ligne de commande, commencez par installer ou mettre à niveau 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 via la ligne de commande, commencez par installer ou mettre à niveau la dernière version de Google Cloud CLI.
gcloud kms encrypt \ --key key \ --keyring key-ring \ --location location \ --plaintext-file file-with-data-to-encrypt \ --ciphertext-file file-to-store-encrypted-data
Remplacez key par le nom de la clé à utiliser pour le chiffrement. Remplacez key-ring par le nom du trousseau de clés où se trouve la clé. Remplacez location par l'emplacement Cloud KMS du trousseau de clés. Remplacez file-with-data-to-encrypt et file-to-store-encrypted-data par les chemins d'accès aux fichiers locaux pour la lecture des données en texte brut et l'enregistrement du 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 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-name/cryptoKeys/key-name:encrypt" \ --request "POST" \ --header "authorization: Bearer token" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"base64-encoded-input\"}"
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 via la ligne de commande, commencez par installer ou mettre à niveau la dernière version de Google Cloud CLI.
gcloud kms decrypt \ --key key \ --keyring key-ring \ --location location \ --ciphertext-file file-path-with-encrypted-data \ --plaintext-file file-path-to-store-plaintext
Remplacez key par le nom de la clé à utiliser pour le déchiffrement. Remplacez key-ring par le nom du trousseau de clés où sera située la clé. Remplacez location par l'emplacement Cloud KMS du trousseau de clés. Remplacez file-path-with-encrypted-data et file-path-to-store-plaintext par les chemins d'accès aux fichiers locaux pour la lecture des données chiffrées et l'enregistrement du 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 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é (cipher) à 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-name/cryptoKeys/key-name:decrypt" \ --request "POST" \ --header "authorization: Bearer token" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"encrypted-content\"}"
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 cet article utilise une clé symétrique avec le niveau de protection HSM. Pour chiffrer à l'aide d'une clé asymétrique avec 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 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 à courbes elliptiques ou la signature RSA, procédez comme suit dans la section Créer et valider des signatures avec 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.
Consultez les guides pratiques pour découvrir comment créer, alterner et définir des autorisations sur les clés.
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 dotées à la fois de HSM et de niveaux de protection logicielle.
Pour en savoir plus sur la manière dont Cloud HSM protège vos données, consultez le livre blanc sur l'architecture de 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é pour les clés asymétriques stockées dans Cloud HSM peuvent entraîner une latence nettement supérieure à celle des clés logicielles Cloud KMS.
HSM privés hébergés
Google Cloud propose des options HSM supplémentaires, telles que la location unique. Les HSM privés hébergés 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.