Cette page montre comment utiliser Cloud Key Management Service pour chiffrer directement les données d'application sur un client, avant de les transmettre sur un réseau.
Dans cet exemple, les données chiffrées sont transmises à Google Cloud et stockées dans un bucket Cloud Storage. Cloud Storage est également compatible avec le chiffrement automatique côté serveur à l'aide de clés de chiffrement gérées par le client, qui automatise l'ensemble de ce processus. Pour protéger les données d'application avant de les transmettre àGoogle Cloud, nous vous recommandons d'utiliser la bibliothèque Tink.
La bibliothèque Tink est une bibliothèque multilingue et multiplate-forme qui fournit des API pour les tâches de cryptographie courantes. Compatible avec Java, Python, C++, Go, Objective-C et d'autres langages, ainsi que des services de stockage d'objets et de base de données relationnelles, elle peut être utilisée pour chiffrer les données avant leur entrée dans les datastores Google Cloud .
Dans ce tutoriel, vous allez chiffrer un fichier à l'aide de Cloud KMS avant de l'importer dans un bucket. Ensuite, vous allez télécharger et déchiffrer les mêmes données afin de pouvoir les lire sur le client.
Lorsque vous suivez ces instructions, vos clés et toutes les opérations cryptographiques restent dans Google Cloud , et vous devez utiliser Cloud KMS pour le déchiffrement. Chiffrement symétrique brut vous permet de chiffrer ou de déchiffrer des données localement sur site ou de déplacer des données chiffrées entre différentes bibliothèques et fournisseurs de services sans avoir à les déchiffrer au préalable.
Avant de commencer
Au sein de votre Google Cloud organisation, vous devez disposer des autorisations nécessaires pour créer des projets, activer la facturation, créer des utilisateurs et gérer les autorisations au sein de ces projets. Le rôle roles/resourcemanager.organizationAdmin
accorde cette autorisation.
Prérequis
Nous vous recommandons d'utiliser deux projets et deux utilisateurs pour assurer la séparation des tâches. Si vous suivez la procédure décrite dans ce guide, les utilisateurs et services qui gèrent les clés de chiffrement sont distincts de ceux qui les utilisent. Un projet contient et gère les clés. L'autre projet stocke les données chiffrées dans un bucket Cloud Storage et les déchiffre selon les besoins.
Créer des projets
Vous créez des projets dans la console Google Cloud. Pour obtenir des instructions détaillées, consultez le guide de démarrage rapide d'Identity and Access Management.
Créez les projets suivants dans votre organisation:
Créez un Google Cloud projet contenant le bucket Cloud Storage utilisé pour stocker les secrets. Ces derniers seront stockés en tant qu'objets dans le bucket. Ce projet s'appelle STORAGE_PROJECT_ID.
Créez un deuxième Google Cloud projet pour gérer les clés Cloud KMS utilisées pour chiffrer et déchiffrer le secret. Ce projet est appelé KEY_PROJECT_ID.
Pour chaque projet, activez l'API Cloud KMS et la facturation en suivant les étapes de la section Avant de commencer du guide de démarrage rapide de Cloud KMS.
Créer des utilisateurs
Vous créez des utilisateurs et leur attribuez des rôles dans la console Google Cloud. Pour obtenir des instructions détaillées, consultez le guide de démarrage rapide d'Identity and Access Management.
Cette procédure crée deux utilisateurs. L'administrateur de clés gère les clés de chiffrement, et l'utilisateur de la clé peut chiffrer et déchiffrer des données à l'aide des clés.
Exécutez cette procédure dans le projet KEY_PROJECT_ID.
Créez le compte administrateur principal.
Attribuez le rôle Identity and Access Management
roles/cloudkms.admin
à l'administrateur de clés. Ce rôle permet à l'administrateur de clés de créer et de gérer des clés.Créez le compte utilisateur principal.
Attribuez le rôle IAM
roles/cloudkms.cryptoKeyEncrypterDecrypter
à l'utilisateur clé. Ce rôle permet à l'utilisateur de la clé de chiffrer et de déchiffrer les données.
Créer un bucket de stockage
Exécutez cette procédure dans le projet STORAGE_PROJECT_ID
.
- Créez un bucket de stockage appelé
STORAGE_BUCKET
. - Accordez le rôle
roles/storage.objectAdmin
sur le bucket de stockage STORAGE_BUCKET au compte utilisateur principal.
Créer une clé de chiffrement
Exécutez cette procédure en tant qu'utilisateur administrateur principal dans le projet KEY_PROJECT_ID.
Créer un trousseau de clés. Le nom d'un trousseau de clés doit être unique dans le projet. Un trousseau de clés ne peut pas être renommé ni supprimé. Utilisez la Google Cloud CLI pour créer un trousseau de clés.
gcloud kms keyrings create KEY_RING \ --location LOCATION
Remplacez les éléments suivants :
KEY_RING
: nom à utiliser pour le trousseau de clés de stockage (par exemple,storage
)LOCATION
: emplacement dans lequel vous souhaitez créer le trousseau de clés Il doit se trouver géographiquement à proximité de l'emplacement où vous souhaitez créer le bucket Cloud Storage.
Créez une clé de chiffrement dans le trousseau de clés. Le nom de la clé doit être unique dans le trousseau de clés. Les clés ne peuvent pas être renommées ni supprimées, mais leurs versions peuvent être détruites. Utilisez Google Cloud CLI pour créer la clé. Une version de clé initiale est créée automatiquement et devient la version principale.
gcloud kms keys create KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose encryption
Remplacez les éléments suivants :
LOCATION
: emplacement dans lequel vous avez créé le trousseau de clés.KEY_NAME
: nom à utiliser pour la clé de stockage (par exemple,storage
)KEY_RING
: nom que vous avez utilisé pour le trousseau de clés de stockage (par exemple,storage
).
Remarque: Pour utiliser des clés de chiffrement symétrique brut, définissez le champ "Purpose" (Objectif) sur
raw-encryption
.
Vous pouvez en savoir plus sur la création de trousseaux de clés et de clés.
Chiffrer le fichier contenant le code secret
Exécutez cette procédure en tant que compte utilisateur principal, dans les deux projets.
Sur votre machine locale, enregistrez le secret.
echo "SECRET_TEXT" > PATH_TO_SECRET
Remplacez les éléments suivants :
SECRET_TEXT
: secret que vous souhaitez protéger, en texte brut (par exemple,this is a secret
).PATH_TO_SECRET
: chemin d'accès où vous souhaitez créer le secret (par exemple,secret.txt
).
Chiffrez le secret à l'aide de Cloud KMS et de la clé de chiffrement.
gcloud kms encrypt \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --plaintext-file PATH_TO_SECRET \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET
Remplacez les éléments suivants :
LOCATION
: emplacement dans lequel vous avez créé le trousseau de clés.KEY_RING
: nom du trousseau de clés.KEY_NAME
: nom de la clé de chiffrement.PATH_TO_SECRET
: chemin d'accès au secret que vous avez créé.PATH_TO_ENCRYPTED_SECRET
: chemin d'accès dans lequel vous souhaitez enregistrer le secret chiffré (par exemple,secret.txt.encrypted
).
Pour en savoir plus sur le chiffrement des données, consultez le guide de démarrage rapide du chiffrement des données.
Utilisez plutôt
raw-encrypt
pour le chiffrement symétrique brut.Importez le fichier secret chiffré dans le bucket de stockage. Vous pouvez utiliser la commande gcloud CLI suivante:
gcloud storage cp PATH_TO_ENCRYPTED_SECRET gs://STORAGE_BUCKET
Vous pouvez en savoir plus sur l'importation d'objets dans un bucket de stockage.
Facultatif: Supprimez le fichier de secret en texte brut (
PATH_TO_SECRET
) de la machine locale. Cette pratique est recommandée pour les fichiers contenant des données sensibles non chiffrées.
Le bucket de stockage STORAGE_BUCKET
contient désormais le fichier secret chiffré, qui est chiffré à l'aide de la clé de chiffrement KEY_NAME
.
Déchiffrer le fichier contenant le code secret
Effectuez ces étapes en tant que compte utilisateur principal, en travaillant sur les deux projets.
Téléchargez le fichier secret chiffré à partir du bucket de stockage. Vous pouvez utiliser la commande suivante de la CLI gcloud:
gcloud storage cp gs://STORAGE_BUCKET/PATH_TO_ENCRYPTED_SECRET .
Vous pouvez en savoir plus sur le téléchargement d'objets à partir d'un bucket de stockage.
Déchiffrez le fichier à l'aide de la même clé que celle que vous avez utilisée pour le chiffrer.
gcloud kms decrypt --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET \ --plaintext-file PATH_TO_DECRYPTED_SECRET
Remplacez les éléments suivants :
LOCATION
: emplacement dans lequel vous avez créé le trousseau de clés.KEY_RING
: nom du trousseau de clés.KEY_NAME
: nom de la clé de chiffrement.PATH_TO_ENCRYPTED_SECRET
: chemin d'accès au secret chiffré téléchargé (par exemple,secret.txt.encrypted
).PATH_TO_DECRYPTED_SECRET
: chemin d'accès dans lequel vous souhaitez enregistrer le secret déchiffré (par exemple,secret_decrypted.txt
).
Pour en savoir plus sur le déchiffrement des données, consultez le guide de démarrage rapide du chiffrement des données.
Utilisez plutôt
raw-decrypt
pour le chiffrement symétrique brut.Vous pouvez désormais lire le texte brut déchiffré du secret à l'aide de
cat
ou d'un éditeur de texte. Son contenu est identique au contenu d'origine du fichierPATH_TO_SECRET
.Facultatif: supprimez les fichiers
PATH_TO_ENCRYPTED_SECRET
etPATH_TO_DECRYPTED_SECRET
de la machine locale.
Nettoyer
Pour procéder au nettoyage, supprimez tous les fichiers que vous avez créés sur la machine locale, puis supprimez les projets KEY_PROJECT_ID
et STORAGE_PROJECT_ID
.
Étape suivante
- Consultez la section Gestion de code secret.
- Consultez la section Séparation des tâches.
- Découvrez comment attribuer, modifier et révoquer les accès à des ressources.
- Découvrez comment créer un compte de service.