Introduction
Pour stocker et chiffrer des données à l'échelle de Google, vous devez recourir à un service central de gestion des clés de chiffrement possédant plusieurs couches de clés pour les données chiffrées. Le chiffrement encapsulé, par exemple, consiste à chiffrer une clé avec une autre clé.
Vous pouvez chiffrer des données au niveau de la couche d'application, qui est chargée d'afficher les données pour les utilisateurs, et de la couche de stockage, qui assure le stockage physique des données.
Par défaut, au niveau de la couche de stockage, Google Cloud chiffre les contenus client stockés au repos à l'aide du chiffrement encapsulé, en employant le service interne de gestion des clés de Google comme keystore central. Si vous stockez et chiffrez vous-même des données, vous pouvez utiliser Cloud Key Management Service comme keystore central au niveau de la couche d'application, processus qui est le sujet de cet article.
Cloud KMS stocke les clés dans une hiérarchie de clés conçue dans un souci de facilité d'emploi, et dont l'accès aux ressources est régi par Identity and Access Management. Les principaux niveaux d'une hiérarchie de clés Cloud KMS sont les suivants :
Pour en savoir plus sur la hiérarchie des clés, consultez la page Hiérarchie des objets.
Clés de chiffrement de données
La clé servant au chiffrement des données elles-mêmes est appelée clé de chiffrement de données (DEK, Data Encryption Key).
Voici des bonnes pratiques en matière de gestion des DEK :
- Générez les DEK en local.
- Une fois les DEK stockées, assurez-vous toujours qu'elles sont chiffrées au repos.
- Pour pouvoir y accéder facilement, stockez la DEK à proximité des données qu'elle chiffre.
- Générez une nouvelle DEK à chaque fois que vous écrivez les données. Cela signifie qu'aucune rotation des DEK n'est nécessaire.
- N'utilisez pas la même DEK pour chiffrer les données de deux utilisateurs différents.
- Utilisez un algorithme puissant comme AES (Advanced Encryption Standard) 256 bits en mode GCM (Galois Counter Mode).
Clés de chiffrement de clés
La DEK est chiffrée (ou encapsulée) par une clé de chiffrement de clés (KEK, Key Encryption Key). Le processus de chiffrement d'une clé avec une autre clé est appelé chiffrement encapsulé.
Voici des bonnes pratiques en matière de gestion des KEK :
Stockez les KEK de manière centralisée.
Définissez la précision des DEK qu'elles chiffrent en fonction de leur cas d'utilisation. Prenons l'exemple d'une charge de travail dont le chiffrement des fragments de données nécessite plusieurs DEK. Vous pouvez encapsuler toutes les DEK chargées du chiffrement de cette charge de travail à l'aide d'une seule KEK.
Procédez à la rotation des clés de manière régulière, ainsi qu'après toute suspicion d'incident. Pour en savoir plus, consultez la page Rotation des clés.
Équilibrer les DEK et les KEK
Le fait d'avoir un nombre de KEK inférieur à celui des DEK et d'utiliser un service central de gestion des clés permet de gérer plus facilement le stockage et le chiffrement des données à grande échelle. Ce type de service constitue également un point unique pour auditer et limiter plus facilement l'accès aux données.
Selon votre situation et le volume de données que vous chiffrez, vous pouvez choisir d'employer un modèle similaire. Une seule KEK peut servir à protéger plusieurs DEK. Avec ce modèle, les objets de données individuels ont tous leur propre DEK, sans que le volume de clés stockées dans un service central de gestion des clés n'augmente massivement.
Cloud Key Management Service a été conçu pour gérer les KEK. La taille maximale des entrées de données pour les fonctions Encrypt
et Decrypt
est donc de 64 Kio. Toutefois, si vous savez que les données n'atteindront pas cette limite, vous pouvez les chiffrer et les déchiffrer directement à l'aide de Cloud KMS.
Chiffrer des données à l'aide du chiffrement encapsulé
Le processus de chiffrement des données est le suivant : vous générez localement une DEK, avec laquelle vous chiffrez les données. Ensuite, vous l'encapsulez au moyen d'une KEK, puis stockez les données chiffrées et la DEK encapsulée. La KEK ne quitte jamais Cloud KMS.
Pour chiffrer des données à l'aide du chiffrement encapsulé :
Générez une DEK en local. Pour ce faire, vous pouvez employer une bibliothèque Open Source comme OpenSSL, en spécifiant un type d'algorithme de chiffrement et un mot de passe à partir desquels générer la clé. Si vous le souhaitez, vous pouvez également spécifier un salage et un condensé à utiliser.
Utilisez cette DEK localement pour chiffrer les données.
Par exemple, vous pouvez employer OpenSSL comme indiqué dans l'exemple de la section Chiffrer le message. Nous vous recommandons d'utiliser l'algorithme de chiffrement AES-256 (Advanced Encryption Standard, 256 bits) en mode GCM (Galois Counter Mode).
Générez une nouvelle clé dans Cloud KMS ou employez une clé existante, qui servira de KEK. Utilisez cette clé pour chiffrer (encapsuler) la DEK.
Stockez les données chiffrées et la DEK encapsulée.
Déchiffrer des données à l'aide du chiffrement encapsulé
Le processus de déchiffrement des données consiste à récupérer les données chiffrées et les utiliser la clé DEK, identifier la clé KEK qui l'a encapsulée, la désencapsuler à l'aide de cette clé ; puis utiliser la clé DEK désencapsulée pour déchiffrer les données. La KEK ne quitte jamais Cloud KMS.
Pour déchiffrer des données à l'aide du chiffrement encapsulé :
Récupérez les données chiffrées et la DEK encapsulée.
Désencapsulez la DEK à l'aide de la clé stockée dans Cloud KMS.
Avec la DEK en texte brut, déchiffrez les données. Si vous utilisez OpenSSL comme indiqué précédemment, consultez l'exemple de la section Déchiffrer le message.
Exemple de code montrant comment chiffrer et déchiffrer des données avec une enveloppe consultez la page Chiffrement côté client avec Tink et Cloud KMS.
Intégration aux services Google Cloud
Plusieurs produits Google Cloud sont intégrés à Cloud KMS pour assurer la fonctionnalité de clé de chiffrement gérée par le client (CMEK, Customer-Managed Encryption Key). La fonctionnalité CMEK avec Cloud KMS ajoute une couche supplémentaire de protection pour vos données, vous permet de contrôler vos clés de chiffrement et tire parti des avantages présentés par Cloud KMS en matière de gestion des clés. Pour obtenir la liste complète des produits compatibles avec les CMEK, consultez la page Utiliser Cloud KMS avec d'autres services.
Autres options pour les services Google Cloud
Pour les données stockées dans des produits Google Cloud non compatibles avec la fonctionnalité CMEK, vous pouvez mettre en œuvre votre propre chiffrement au niveau de la couche d'application. Pour cela, vous devez mettre en œuvre votre propre chiffrement encapsulé, comme décrit ci-dessus, afin de stocker les données chiffrées localement dans Google Cloud. C'est également ainsi que vous pouvez utiliser Cloud KMS pour chiffrer les données que vous stockez chez d'autres fournisseurs de services cloud ou sur site.
En plus d'être compatibles avec la fonctionnalité CMEK, les produits suivants acceptent la fonctionnalité de clé de chiffrement fournie par le client (CSEK, Customer-Supplied Encryption Key).
Produit | Article sur la fonctionnalité CSEK |
---|---|
Cloud Storage | Clés de chiffrement fournies par le client |
Compute Engine | Chiffrer des disques avec des clés fournies par le client |
Avec la fonctionnalité CSEK, vous fournissez votre propre clé AES-256 qui servira de KEK, et votre clé protège les DEK qui protègent vos données. Votre clé CSEK est protégée par une couche de protection supplémentaire, à l'aide d'une clé Cloud KMS.
Maintenant que vous pouvez importer des clés dans Cloud KMS, vous pouvez importer vos clés et les utiliser avec des services compatibles CMEK au lieu de compter sur une CSEK.