Utiliser des clés de chiffrement gérées par le client (CMEK)
Cette page explique comment effectuer des tâches liées aux clés de chiffrement gérées par le client (CMEK) pour Bigtable. Pour plus d'informations sur la CMEK en général, y compris quand et pourquoi l'activer, consultez la documentation Cloud KMS.
Nous vous recommandons d'utiliser Google Cloud Console pour toutes les tâches de gestion des clés. Si vous prévoyez d'utiliser Google Cloud CLI, installez gcloud CLI pour Bigtable.
Préparer vos clés CMEK
Pour pouvoir créer une ressource Bigtable protégée par une clé CMEK, vous devez effectuer les étapes suivantes afin de créer une clé CMEK pour chaque région dans laquelle se trouvent les clusters de l'instance:
- Créez (ou récupérez) un agent de service Bigtable.
- Créez une clé CMEK.
- Configurez les paramètres IAM pour cette clé.
Créer un agent de service Bigtable
Avant de créer une clé CMEK, vous devez disposer d'un agent de service Bigtable, que Bigtable utilise pour accéder à la clé.
Console
Vous ne pouvez pas créer d'agent de service dans la console Google Cloud. Toutefois, si vous créez votre clé dans la console Google Cloud, vous êtes invité à attribuer le rôle Chiffreur/Déchiffreur Cloud KMS, et s'il n'existe pas encore, l'agent de service est créé à cette étape.
gcloud
Exécutez la commande gcloud services identity create pour afficher l'agent de service utilisé par Bigtable pour accéder à la clé CMEK en votre nom. Cette commande crée le compte de service s'il n'existe pas déjà, puis l'affiche.
gcloud beta services identity create \ --service=bigtableadmin.googleapis.com \ --project CBT_PROJECT
Remplacez
CBT_PROJECT
par le projet contenant vos ressources Bigtable.La commande affiche l'ID de l'agent de service, qui est formaté comme une adresse e-mail. Enregistrez la chaîne de l'e-mail de sortie, car vous en aurez besoin à une étape ultérieure.
Service identity created: service-xxx@gcp-sa-bigtable.iam.gserviceaccount.com
Créer une clé
Vous pouvez utiliser une clé créée directement dans Cloud KMS ou une clé gérée en externe que vous rendez disponible avec Cloud External Key Manager.
Dans le projet Google Cloud dans lequel vous souhaitez gérer vos clés, procédez comme suit :
Créez un trousseau de clés et une clé à l'aide de l'une des options suivantes :
- Créez le trousseau de clés et la clé directement dans Cloud KMS.
- Utilisez une clé gérée en externe. Créez la clé externe, puis créez une clé Cloud EKM permettant de la rendre disponible via Cloud KMS.
L'emplacement de clé Cloud KMS doit être identique au cluster Bigtable avec lequel il sera utilisé. Par exemple, si vous créez un trousseau de clés et une clé dans la région
us-central1
(Iowa), les clusters deus-central1-a
,us-central1-b
etus-central1-c
peuvent être protégés par des clés de ce trousseau.
Configurer les paramètres IAM de la clé
Console
Pour attribuer un rôle Cloud KMS à votre agent de service, procédez comme suit : Vous pouvez également accorder une autorisation au niveau de la clé ou du trousseau si vous souhaitez bénéficier d'un niveau de précision inférieur.
Dans la console Google Cloud, accédez à la page IAM.
Cliquez sur Ajouter.
Saisissez l'ID au format adresse e-mail de votre agent de service Bigtable.
Sélectionnez le rôle Chiffreur/Déchiffreur de clés cryptographiques Cloud KMS.
Cliquez sur Enregistrer.
gcloud
Attribuez le rôle
cloudkms.cryptoKeyEncrypterDecrypter
à votre agent de service :gcloud kms keys add-iam-policy-binding KMS_KEY \ --keyring KMS_KEYRING\ --location KMS_LOCATION \ --member serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project KMS_PROJECT
Indiquez les éléments suivants :
KMS_KEY
: nom attribué à la clé.KMS_KEYRING
: trousseau de clés KMS contenant la clé.KMS_LOCATION
: région contenant le trousseau de clés.SERVICE_ACCOUNT_EMAIL
: identifiant au format adresse e-mail de l'agent de service auquel vous accordez l'accès.KMS_PROJECT
: projet contenant la clé.
Créer une instance configurée pour utiliser les CMEK
Une fois les clés CMEK créées et configurées, vous pouvez créer une instance protégée par une clé CMEK. Les instances Bigtable existantes protégées par le chiffrement par défaut de Google ne peuvent pas être converties en vue d'une utilisation avec les CMEK. Vous pouvez uniquement choisir un type de chiffrement et une clé au moment de la création.
Pour créer votre instance protégée par une clé CMEK, suivez les étapes décrites dans la section Créer une instance.
Afficher la clé utilisée
Les informations sur les versions de clé proviennent du champ encryption_info
.
Pour afficher les informations de version de clé CMEK d'une table, procédez comme suit :
Console
Accédez à la page "Instances Bigtable" de la console Google Cloud.
Cliquez sur le nom de l'instance contenant la table pour ouvrir la page Détails de l'instance et afficher la liste des clusters de l'instance.
À côté d'un ID de cluster, cliquez sur le nom de la clé sous Clé de chiffrement pour afficher la page Versions de la clé du cluster.
gcloud
Pour chaque cluster, vous pouvez confirmer sa configuration CMEK comme suit :
gcloud bigtable clusters describe CLUSTER_ID \
--instance INSTANCE_ID --project CBT_PROJECT
Indiquez les éléments suivants :
CLUSTER_ID
: identifiant permanent du cluster.INSTANCE_ID
: identifiant permanent de l'instance.CBT_PROJECT
: projet contenant vos ressources Bigtable.
La commande affiche un résultat semblable à celui-ci :
defaultStorageType: SSD
encryptionConfig:
kmsKeyName: projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key
location: projects/cloud-bigtable-project/locations/us-central1-a
name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster
serveNodes: 1
state: READY
Désactiver une clé
La désactivation d'une version de clé gérée par le client entraîne la suspension de l'accès à toutes les données protégées par celle-ci. La destruction d'une version de clé est la contrepartie permanente (après 24 heures) de cette action. Désactivez toujours toutes les clés d'une instance plutôt que de désactiver uniquement les clés d'un ou plusieurs clusters spécifiques.
Console
Cette méthode est recommandée. L'utilisation de la console Google Cloud vous permet de désactiver toutes les versions d'une clé à la fois.
Suivez ces instructions pour chaque version de clé.
gcloud
Nous vous recommandons d'utiliser la console Google Cloud pour désactiver les clés. Si vous préférez utiliser Google Cloud CLI, exécutez les commandes suivantes.
Répertoriez toutes les versions de la clé CMEK :
gcloud kms keys versions list --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT
Indiquez les éléments suivants :
KMS_KEY
: nom de la clé CMEK.KMS_KEYRING
: trousseau de clés KMS contenant la clé.KMS_LOCATION
: région contenant le trousseau de clés.KMS_PROJECT
: projet contenant la clé.
Le résultat ressemble à ce qui suit :
NAME STATE KMS_KEY_NAME/cryptoKeyVersions/1 ENABLED KMS_KEY_NAME/cryptoKeyVersions/2 ENABLED KMS_KEY_NAME/cryptoKeyVersions/3 ENABLED KMS_KEY_NAME/cryptoKeyVersions/4 ENABLED
Pour désactiver toutes les versions :
for $KV in 1 2 3 4; do gcloud kms keys versions disable KV --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT; done
Indiquez les éléments suivants :
1 2 3 4
: versions à désactiver.KMS_KEY
: nom de la clé CMEK.KMS_KEYRING
: trousseau de clés KMS contenant la clé.KMS_LOCATION
: région contenant le trousseau de clés.KMS_PROJECT
: projet contenant la clé.
Si vous répertoriez à nouveau toutes les versions de clé, l'état est renvoyé à
DISABLED
, mais il peut s'écouler jusqu'à quatre heures avant que Bigtable prenne en compte ce changement d'état.[Facultatif] Pour confirmer l'état d'une clé CMEK désactivée au bout de quatre heures, exécutez la commande suivante :
gcloud bigtable instances tables describe TABLE_ID \ --instance INSTANCE_ID --view ENCRYPTION \ --project CBT_PROJECT
Indiquez les éléments suivants :
TABLE_ID
: identifiant permanent de la table.INSTANCE_ID
: identifiant permanent de l'instance.CBT_PROJECT
: projet contenant vos ressources Bigtable.
La commande affiche un résultat semblable à celui-ci :
clusterStates: CLUSTER: encryptionInfo: - encryptionStatus: code: 9 details: - '@type': type.googleapis.com/google.rpc.PreconditionFailure violations: - subject: KMS_KEY_NAME/cryptoKeyVersions/<int> type: KEY_DISABLED message: KMS_KEY_NAME is not enabled, current state is: DISABLED. encryptionType: CUSTOMER_MANAGED_ENCRYPTION kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/<int> name: projects/CBT_PROJECT/instances/INSTANCE/tables/TABLE
[Facultatif] Pour vérifier que les clusters de l'instance sont désactivés, exécutez la commande suivante :
gcloud bigtable clusters list --instances INSTANCE_ID --project CBT_PROJECT
Indiquez les éléments suivants :
INSTANCE_ID
: identifiant permanent de l'instance.CBT_PROJECT
: projet contenant vos ressources Bigtable.
La commande affiche un résultat semblable à celui-ci :
NAME ZONE NODES STORAGE STATE my-cluster us-central1-a 1 SSD DISABLED my-other-cluster us-central1-b 1 SSD DISABLED
Activer une clé
Si une version de clé a été désactivée, vous pouvez la réactiver pour avoir de nouveau accès à vos ressources Bigtable. Cette option est disponible pendant 30 jours à compter de la désactivation de la version de clé.
Console
Cette méthode est recommandée. Utiliser la console Google Cloud vous permet d'activer toutes les versions d'une clé à la fois.
Suivez ces instructions pour chaque version de clé.
gcloud
Nous vous recommandons d'activer des clés à l'aide de la console Google Cloud. Si vous préférez utiliser Google Cloud CLI, exécutez les commandes suivantes.
Pour afficher la liste des versions en vue de l'identification de toutes les versions de la clé :
gcloud kms keys versions list --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT
Indiquez les éléments suivants :
KMS_KEY
: nom de la clé CMEK.KMS_KEYRING
: trousseau de clés KMS contenant la clé.KMS_LOCATION
: région contenant le trousseau de clés.KMS_PROJECT
: projet contenant la clé.
La commande affiche un résultat semblable à celui-ci :
NAME STATE KMS_KEY_NAME/cryptoKeyVersions/1 DISABLED KMS_KEY_NAME/cryptoKeyVersions/2 DISABLED KMS_KEY_NAME/cryptoKeyVersions/3 DISABLED KMS_KEY_NAME/cryptoKeyVersions/4 DISABLED
Exécutez la commande
kms keys versions enable
en spécifiant toutes les versions répertoriées. À l'aide de l'exemple de résultat, la commande se présente comme suit :for $KV in 1 2 3 4; do gcloud kms keys versions enable KV --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT; done
Indiquez les éléments suivants :
1 2 3 4
: versions à désactiver.KMS_KEY
: nom de la clé CMEK.KMS_KEYRING
: trousseau de clés KMS contenant la clé.KMS_LOCATION
: région contenant le trousseau de clés.KMS_PROJECT
: projet contenant la clé.
Si vous répertoriez à nouveau les versions de clé, l'état est renvoyé à
ENABLED
.
Afficher les journaux d'audit d'une clé Cloud KMS
Avant d'activer les journaux d'audit d'accès aux données Cloud KMS, vous devez vous familiariser avec les journaux d'audit Cloud.
Les journaux d'audit de l'accès aux données Cloud KMS vous indiquent quand Bigtable ou tout autre produit configuré pour une utilisation avec votre clé CMEK effectue des appels de chiffrement/déchiffrement vers Cloud KMS. Bigtable n'émet pas d'appel de chiffrement/déchiffrement pour chaque requête de données, mais conserve un service d'interrogation qui vérifie régulièrement la clé. Les résultats s'affichent dans les journaux d'audit.
Vous pouvez configurer les journaux d'audit dans la console Google Cloud et interagir avec ces éléments :
Assurez-vous de l'activation de la journalisation pour l'API Cloud KMS dans votre projet.
Accédez à Cloud Logging dans la console Google Cloud.
Limitez les entrées de journal à votre clé Cloud KMS en ajoutant les lignes suivantes au générateur de requêtes :
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY
Indiquez les éléments suivants :
KMS_KEY
: nom de la clé CMEK.KMS_KEYRING
: trousseau de clés KMS contenant la clé.
Le journal affiche quelques entrées de journal toutes les cinq minutes par table dans chaque cluster. Les entrées du journal se présentent comme suit :
Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-bigtable.iam.gserviceaccount.com" Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com"
Pour en savoir plus sur l'interprétation des journaux d'audit, consultez la section Comprendre les journaux d'audit.
Afficher l'utilisation des clés
Cloud KMS vous permet d'afficher les informations suivantes sur les ressources Bigtable que vos clés protègent.
- Récapitulatif de l'utilisation de la clé: inclut des informations sur le nombre de ressources protégées et de projets qui utilisent la clé.
- Détails d'utilisation de la clé: identifie les ressources protégées par une clé et celles qui en dépendent.
Les ressources Bigtable suivantes sont compatibles:
bigtableadmin.googleapis.com/Backup
bigtableadmin.googleapis.com/Cluster
bigtableadmin.googleapis.com/Table
Pour en savoir plus sur l'affichage de l'utilisation des clés, consultez Afficher des informations sur l'utilisation des clés.
Afficher l'état de chiffrement d'une table
Console
Vous ne pouvez pas afficher l'état de chiffrement d'une table dans la console Google Cloud.
gcloud
Pour afficher les détails CMEK d'une table, définissez view
sur ENCRYPTION
ou FULL
.
La réponse inclut la version de clé en cours d'utilisation et son état observé par Bigtable.
gcloud alpha bigtable instances tables describe TABLE_ID \
--instance INSTANCE_ID --view ENCRYPTION \
--project CBT_PROJECT
Indiquez les éléments suivants :
TABLE_ID
: identifiant permanent du cluster.INSTANCE_ID
: identifiant permanent de l'instance contenant la sauvegarde.CBT_PROJECT
: projet contenant vos ressources Bigtable.
La commande affiche un résultat semblable à celui-ci :
clusterStates:
my-cluster:
encryptionInfo:
- encryptionStatus: {}
encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
my-other-cluster:
encryptionInfo:
- encryptionStatus: {}
encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
name: projects/cloud-bigtable-project/instances/cmek-test-instance/tables/my-table
Afficher les détails de chiffrement d'une sauvegarde
Une sauvegarde reste épinglée sur sa version de clé d'origine. Les rotations de versions de clé dans Cloud KMS n'entraînent pas l'alternance entre les versions utilisées pour déchiffrer les sauvegardes.
Console
Accédez à la page "Instances Bigtable" de la console Google Cloud.
Cliquez sur le nom de l'instance pour ouvrir la page Détails de l'instance pour la VM.
Dans le volet de navigation de gauche, cliquez sur Sauvegardes.
Le nom de clé et la version de clé de chaque sauvegarde sont répertoriés sous Clé gérée par le client.
gcloud
Exécutez la commande suivante pour afficher les informations de chiffrement d'une sauvegarde.
gcloud alpha bigtable backups describe BACKUP_ID \
--instance INSTANCE_ID --cluster CLUSTER_ID \
--project CBT_PROJECT
Indiquez les éléments suivants :
BACKUP_ID
: ID attribué à la sauvegarde.CLUSTER_ID
: identifiant permanent du cluster.INSTANCE_ID
: identifiant permanent de l'instance contenant la sauvegarde.CBT_PROJECT
: projet contenant vos ressources Bigtable.
La commande renvoie un résultat semblable au suivant : kmsKeyVersion
est la version de clé CMEK à laquelle la sauvegarde est épinglée. L'état de la version de clé n'est pas indiqué.
encryptionInfo:
encryptionStatus:
code: 2
message: Status of the associated key version is not tracked.
encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/3
endTime: '2020-09-01T00:03:26.568600Z'
expireTime: '2020-09-02T00:03:25.436473Z'
name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster/backups/my-backup
sizeBytes: '3780'