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:

  1. Créez (ou récupérez) un agent de service Bigtable.
  2. Créez une clé CMEK.
  3. 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

  1. 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.

  1. Dans le projet Google Cloud dans lequel vous souhaitez gérer vos clés, procédez comme suit :

    1. Activez l'API Cloud KMS.

    2. Créez un trousseau de clés et une clé à l'aide de l'une des options suivantes :

      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 de us-central1-a, us-central1-b et us-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.

  1. Dans la console Google Cloud, accédez à la page IAM.

    Accédez à la page IAM.

  2. Cliquez sur Ajouter.

  3. Saisissez l'ID au format adresse e-mail de votre agent de service Bigtable.

  4. Sélectionnez le rôle Chiffreur/Déchiffreur de clés cryptographiques Cloud KMS.

  5. Cliquez sur Enregistrer.

gcloud

  1. 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

  1. Accédez à la page "Instances Bigtable" de la console Google Cloud.

    Ouvrir la liste des instances

  2. 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.

  3. À 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.

  1. 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
    
  2. 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.

  3. [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
    
  4. [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.

  1. 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 :

  1. Assurez-vous de l'activation de la journalisation pour l'API Cloud KMS dans votre projet.

  2. Accédez à Cloud Logging dans la console Google Cloud.

    Accéder à CloudLogging

  3. 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

  1. Accédez à la page "Instances Bigtable" de la console Google Cloud.

    Ouvrir la liste des instances

  2. Cliquez sur le nom de l'instance pour ouvrir la page Détails de l'instance pour la VM.

  3. 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'

Étape suivante