Protéger des ressources avec des clés Cloud KMS

Par défaut, Compute Engine chiffre les contenus client au repos. Le service traite et gère ce chiffrement sans intervention de votre part. Toutefois, si vous souhaitez contrôler et gérer vous-même ce processus de chiffrement, vous pouvez utiliser des clés de chiffrement de clés. Celles-ci ne chiffrent pas directement les données. Le chiffrage s'applique aux clés de chiffrement de données qui, elles, chiffrent vos données.

Deux options sont disponibles pour les clés de chiffrement de clés dans Compute Engine :

  • Vous pouvez utiliser Cloud Key Management Service pour créer et gérer les clés de chiffrement de clés. Pour en savoir plus, consultez la section Gestion des clés. Cette rubrique décrit en détail cette option appelée clés de chiffrement gérées par le client (CMEK, customer-managed encryption keys).

  • Vous pouvez créer et gérer vos propres clés de chiffrement de clés. Pour en savoir plus sur cette option appelée clés de chiffrement fournies par le client (CSEK, customer-supplied encryption keys), consultez la page Chiffrer des disques avec des clés fournies par le client.

Une fois que vous avez créé une ressource Compute Engine protégée par Cloud KMS, vous n'avez pas besoin de spécifier la clé, car Compute Engine identifie la clé KMS utilisée. La méthode employée diffère de celle permettant à Compute Engine d'accéder aux ressources protégées par les clés fournies par le client. Pour ce type d'accès, vous devez spécifier la clé fournie par le client.

Découvrez les options de chiffrement disponibles dans Google Cloud.

Avant de commencer

  1. Familiarisez-vous avec les disques, les images, les instantanés de disques persistants et les instances de machine virtuelle (VM).

  2. Déterminez si vous allez exécuter Compute Engine et Cloud KMS dans le même projet Google Cloud ou dans des projets différents.

    Pour en savoir plus sur les ID et numéros de projet Google Cloud, consultez la section Identifier des projets.

  3. Pour le projet Google Cloud exécutant Compute Engine, configurez l'accès à l'API pour Compute Engine.

  4. Pour le projet Cloud qui exécute Cloud KMS, procédez comme suit :

    1. Activez l'API Cloud KMS.
    2. Créez un trousseau de clés et une clé, comme décrit dans les sections concernant la création de trousseaux et de clés.
  5. Attribuez le rôle Cloud KMS CryptoKey Encrypter/Decrypter (Chiffreur/Déchiffreur de clés cryptographiques Cloud KMS) à l'agent de service Compute Engine. Ce compte se présente comme suit :

    service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
    

    Pour attribuer le rôle, vous pouvez utiliser l'outil de ligne de commande gcloud comme suit :

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
        --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Remplacez l'élément suivant :

    • KMS_PROJECT_ID : ID de votre projet Cloud qui exécute Cloud KMS (même s'il correspond également au projet exécutant Compute Engine)
    • PROJECT_NUMBER : numéro de votre projet Cloud qui exécute les ressources Compute Engine, et non son ID

Limites

  • Les ressources régionales (disques) peuvent être chiffrées par des clés se trouvant au même emplacement ou dans l'emplacement global. Par exemple, un disque de la zone us-west1-a peut être chiffré à l'aide d'une clé située dans la région us-west1 ou dans l'emplacement global. Les ressources globales (images, instantanés) peuvent être chiffrées par des clés se trouvant à n'importe quel emplacement.

  • Le chiffrement d'un disque, d'un instantané ou d'une image avec une clé est définitif. Vous ne pouvez pas supprimer le chiffrement de la ressource ni modifier la clé utilisée. Le seul moyen de supprimer le chiffrement ou de modifier les clés consiste à créer une copie de la ressource tout en spécifiant une nouvelle option de chiffrement.

Spécifications

Cette section décrit la spécification du chiffrement et les limites d'utilisation des clés Cloud KMS.

Chiffrement

Les clés Cloud KMS qui servent à protéger les données dans Compute Engine sont de type AES-256. Il s'agit de clés de chiffrement de clés, s'appliquant aux clés de chiffrement de données qui chiffrent vos données.

Restrictions

  • Vous ne pouvez chiffrer que des nouvelles ressources (telles que les disques persistants, les images et les instantanés) avec vos propres clés. Elles ne permettent pas de chiffrer les ressources existantes.

  • Vous ne pouvez pas utiliser vos propres clés avec des disques SSD locaux, car ces disques ne persistent pas au-delà de la durée de vie d'une machine virtuelle. Les disques SSD locaux sont protégés par une clé de chiffrement éphémère que Google ne conserve pas.

Chiffrer un nouveau disque persistant avec des clés CMEK

Vous pouvez chiffrer un nouveau disque persistant en fournissant une clé lors de la création de la VM ou du disque.

Console

  1. Dans Google Cloud Console, accédez à la page Disques.

    Accéder à la page Disques

  2. Cliquez sur Créer un disque et saisissez les propriétés du nouveau disque.
  3. Sous Chiffrement, sélectionnez Clé gérée par le client.
  4. Dans le menu déroulant, sélectionnez la clé Cloud KMS à utiliser pour chiffrer ce disque.
  5. Pour créer le disque, cliquez sur Créer.

gcloud

gcloud compute disks \
create encrypted-disk \
    --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

Remplacez l'élément suivant :

  • REGION : la région où se trouve le disque.
  • KEY_RING : nom du trousseau de clés qui inclut la clé
  • KEY : nom de la clé utilisée pour chiffrer le disque

API

Chiffrez un disque en utilisant la propriété diskEncryptionKey avec la propriété kmsKeyName. Par exemple, vous pouvez chiffrer un nouveau disque lors de la création de la VM avec votre clé Cloud KMS en procédant comme suit :

POST
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
"machineType": "zones/ZONE/machineTypes/e2-standard-2",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-8-jessie-v20160301"
  },
  "boot": true
 }
],
...
}

Remplacez l'élément suivant :

  • PROJECT_ID : ID du projet Cloud exécutant Compute Engine
  • ZONE : zone dans laquelle créer la VM
  • REGION : la région où se trouve le disque.
  • KEY_RING : nom du trousseau de clés qui inclut la clé
  • KEY : nom de la clé utilisée pour chiffrer le disque

De la même façon, vous pouvez utiliser l'API pour créer un disque persistant autonome et le chiffrer avec votre clé Cloud KMS :

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2Fprojects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-8-jessie-v20160301

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
 "type": "zones/ZONE/diskTypes/pd-standard"
}

Créer un instantané à partir d'un disque chiffré avec une clé CMEK

Pour protéger un instantané que vous créez à partir d'un disque chiffré avec une clé CMEK, vous devez utiliser la même clé de chiffrement que celle utilisée pour chiffrer le disque.

Les instantanés créés à partir de disques chiffrés avec une clé CMEK sont incrémentiels.

Console

  1. Dans Google Cloud Console, accédez à la page Instantanés.

    Accéder à la page Instantanés

  2. Cliquez sur Create snapshot (Créer un instantané).
  3. Sous Disque source, choisissez le disque source pour l'instantané. L'instantané est automatiquement chiffré avec la même clé que celle utilisée par le disque source.

gcloud

gcloud compute \
disks snapshot encrypted-disk \
    --zone ZONE

Remplacez ZONE par la zone dans laquelle créer l'instantané.

API

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY"
 },
 "name": "snapshot-encrypted-disk"
}

Remplacez SNAPSHOT_KEY par le nom de la clé utilisée pour chiffrer le disque source.

Vous ne pouvez pas créer un instantané qui utilise une clé CMEK à moins que le disque source n'utilise également CMEK. En outre, il est impossible de modifier des disques ou des instantanés chiffrés pour qu'ils utilisent le chiffrement Compute Engine par défaut, sauf si vous créez une image disque entièrement nouvelle et un disque persistant.

Chiffrer une image importée avec une clé CMEK

Vous pouvez chiffrer une nouvelle image lorsque vous importez une image personnalisée dans Compute Engine. Pour pouvoir importer une image, vous devez créer et compresser un fichier image de disque, puis importer ce fichier compressé dans Cloud Storage.

Console

  1. Dans Google Cloud Console, accédez à la page Images.

    Accéder à la page "Images"

  2. Cliquez sur Create image (Créer une image).
  3. Sous Disque source, sélectionnez le disque dont vous souhaitez créer une image.
  4. Pour le champ Chiffrement, sélectionnez Clé gérée par le client.
  5. Dans le menu déroulant, sélectionnez la clé Cloud KMS à utiliser pour chiffrer cette image.
  6. Poursuivez le processus de création de l'image.

gcloud

gcloud compute \
images create [...] \
    --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

API

Pour chiffrer une image importée, indiquez l'URI du fichier compressé, ajoutez la propriété imageEncryptionKey à la requête de création d'image, puis spécifiez la clé permettant de chiffrer l'image dans la propriété kmsKeyName :

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images

{
"rawDisk": {
 "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
},
"name": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/IMAGE_KEY"
  }
}

Remplacez IMAGE_KEY par le nom de la clé que vous souhaitez utiliser pour chiffrer l'image.

Créer un disque persistant à partir d'une ressource chiffrée avec une clé CMEK

Créer un disque à partir d'un instantané chiffré avec une clé CMEK

Pour créer un disque persistant autonome à l'aide d'un instantané chiffré, procédez comme suit :

Console

  1. Dans Google Cloud Console, accédez à la page Disques.

    Accéder à la page Disques

  2. Cliquez sur Créer un disque et saisissez les propriétés du nouveau disque.
  3. Sous Type de source, sélectionnez l'image ou l'instantané souhaités.
  4. Poursuivez le processus de création du disque persistant.

gcloud

gcloud compute \
disks create [...] \
    --source-snapshot example-snapshot \
    --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

Pour utiliser une image au lieu d'un instantané, remplacez --source-snapshot example-snapshot par --image example-image.

API

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot"
}

Associer un disque de démarrage chiffré avec une clé CMEK à une nouvelle VM

Console

  1. Accédez à la page Créer une instance dans Google Cloud Console.

    Accéder à la page Créer une instance

  2. Spécifiez les détails de la VM, puis, dans la section Disque de démarrage, cliquez sur Modifier. Ensuite, procédez comme suit :

    1. Cliquez sur Disques existants.
    2. Dans la liste Disque, sélectionnez un disque existant à associer à la VM.
    3. Cliquez sur Select (Sélectionner).
  3. Poursuivez le processus de création de la VM.

gcloud

gcloud compute instances \
create example-instance \
    --disk name=encrypted-disk,boot=yes

API

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/PROJECT_ID/zones/ZONE/disks/encrypted-disk"
  }
 }
]

Supprimer la clé de chiffrement Cloud KMS d'un disque persistant

Vous pouvez déchiffrer le contenu d'un disque chiffré et créer un disque qui utilise le chiffrement Compute Engine par défaut. Par défaut, Compute Engine chiffre toutes les données au repos.

  1. Créez un instantané du disque chiffré.
  2. Utilisez la nouvelle image pour créer un disque persistant.

Le nouveau disque persistant utilisera le chiffrement Compute Engine par défaut pour protéger son contenu. Tous les instantanés que vous créerez à partir de ce disque devront également utiliser le chiffrement par défaut.

Effectuer une rotation votre clé de chiffrement Cloud KMS pour un disque persistant

Alternez la clé utilisée pour chiffrer le disque en créant un nouveau disque qui utilise une nouvelle version de clé Cloud KMS. La rotation des clés est une bonne pratique à suivre pour respecter les pratiques de sécurité standardisées. Pour effectuer une rotation de vos clés, procédez comme suit :

  1. Effectuez une rotation de votre clé Cloud KMS.
  2. Créez un instantané du disque chiffré.
  3. Utilisez le nouvel instantané pour créer un disque persistant avec la clé ayant subi la rotation à l'étape précédente.

Lorsque vous créez le disque persistant, il utilise la nouvelle version de clé pour le chiffrement. Tous les instantanés que vous créerez à partir de ce disque utiliseront également la même version de clé.

Lors de la rotation d'une clé, les données chiffrées avec les versions de clé précédentes ne sont pas automatiquement rechiffrées. Pour en savoir plus, consultez la page Rechiffrer des données. La rotation d'une clé n'entraîne ni la désactivation, ni la destruction automatique d'une version de clé existante.

Impact de la désactivation ou de la suppression des clés CMEK

La désactivation ou la suppression d'une clé de chiffrement a les effets suivants sur les ressources qu'elle protège :

  • Les VM auxquelles sont associés des disques ne peuvent pas démarrer. Si vous avez activé l'option d'arrêt de VM sur révocation de clés, les VM auxquelles sont associés des disques protégés par la clé sont arrêtées.
  • Les disques ne peuvent pas être associés à des VM et ne permettent pas de créer des instantanés.
  • Les instantanés ne peuvent pas être utilisés pour créer un disque.
  • Les images ne peuvent pas être utilisées pour créer un disque.

Si vous désactivez la clé, vous pouvez inverser les effets ci-dessus en la réactivant. Si vous supprimez la clé, les effets ci-dessus seront irréversibles.

Configurer l'arrêt de la VM sur révocation de la clé Cloud KMS

Vous pouvez configurer votre VM pour qu'elle se ferme automatiquement lorsque vous révoquez la clé Cloud KMS qui protège un disque persistant associé à la VM. Vous pouvez révoquer une clé en la désactivant ou en la supprimant. Lorsque ce paramètre est activé, la VM s'arrête dans les trois heures suivant la révocation de la clé.

Si vous réactivez la clé, vous pouvez redémarrer la VM avec le disque associé que la clé protège. La VM ne redémarre pas automatiquement après l'activation de la clé.

Vous pouvez configurer une VM pour qu'elle se ferme sur révocation de la clé lorsque vous la créez à l'aide de l'outil de ligne de commande gcloud ou de l'API Compute Engine.

gcloud

Exécutez la commande gcloud beta compute instances create pour créer une VM et définissez le champ --post-key-revocation-action-type=shutdown.

gcloud beta compute instances create VM_NAME
    --image IMAGE
    --post-key-revocation-action-type=shutdown

API

Utilisez la méthode instances.insert pour créer une VM et définissez le champ "postKeyRevocationActionType": "SHUTDOWN". L'exemple suivant crée la VM à partir d'une image publique.

 POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances

{ "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "postKeyRevocationActionType": "SHUTDOWN" }

Vous pouvez également configurer un modèle d'instance pour créer des VM qui s'arrêtent sur révocation de clé à l'aide de l'outil gcloud ou de l'API Compute Engine.

gcloud

Créez un modèle d'instance à l'aide de la commande instance-templates create, puis définissez le champ --post-key-revocation-action-type=shutdown.

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --post-key-revocation-action-type=shutdown

API

Créez un modèle d'instance à l'aide de la méthode instanceTemplates().insert. Dans l'API des modèles d'instances, vous devez définir explicitement tous les champs de configuration requis. Si vous souhaitez que les VM créées à partir de ce modèle s'arrêtent lors de la révocation de la clé, spécifiez "postKeyRevocationActionType": "SHUTDOWN". Par exemple, un modèle d'instance qui ne comporte que les champs obligatoires requis et va créer des VM qui s'arrêtent lors de la révocation de la clé se présente comme suit :

  {
  "name": "example-template",
  "properties": {
    "machineType": "e2-standard-4",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs":
        [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks":
    [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
        }
      }
    ],
    "postKeyRevocationActionType": "SHUTDOWN"
    }
  }
  

Après avoir créé une VM configurée pour s'arrêter sur révocation de Cloud KMS, créez et associez un disque persistant chiffré avec une clé Cloud KMS.