Activer les clés de chiffrement gérées par le client (CMEK) pour les ensembles de données de l'API Cloud Healthcare

Par défaut, Google Cloud chiffre automatiquement les données au repos à l'aide de clés de chiffrement gérées par Google. Si vous avez des exigences réglementaires ou de conformité spécifiques concernant les clés qui protègent vos données, vous pouvez utiliser des clés de chiffrement gérées par le client (CMEK) pour vos données de l'API Cloud Healthcare. Au lieu de laisser Google posséder et gérer les clés de chiffrement qui protègent vos données, vos ensembles de données de l'API Cloud Healthcare sont chiffrés à l'aide d'une clé que vous contrôlez et gérez dans Cloud Key Management Service (Cloud KMS).

Pour en savoir plus sur le chiffrement CMEK en général, y compris quand et pourquoi l'activer, consultez la page Clés de chiffrement gérées par le client (CMEK).

Avant de commencer

Déterminez si votre ensemble de données de l'API Cloud Healthcare et Cloud KMS se trouveront dans le même projet Google Cloud ou dans des projets différents. Pour en savoir plus, consultez la section Séparation des tâches.

À des fins de documentation, les conventions suivantes sont utilisées:

  • PROJECT_ID: ID de projet de l'API Cloud Healthcare
  • KMS_PROJECT_ID: ID du projet dans lequel Cloud KMS s'exécute, qui peut être identique à PROJECT_ID

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

Limites

  • Vous ne pouvez utiliser des clés Cloud KMS que lorsque vous créez un ensemble de données de l'API Cloud Healthcare. Vous ne pouvez pas activer, modifier ni désactiver des clés Cloud KMS sur un ensemble de données de l'API Cloud Healthcare existant.
  • Seuls les datastores FHIR, DICOM et HL7v2 sont compatibles avec les ensembles de données chiffrés CMEK. La protection CMEK s'applique aux magasins DICOM, FHIR et HL7v2 de l'ensemble de données et à leurs ressources.
  • Vous ne pouvez pas anonymiser les ressources chiffrées avec CMEK.

Opérations CMEK

Les clés Cloud KMS sont utilisées lorsqu'une ressource chiffrée CMEK est créée, lue, mise à jour ou supprimée, et pour les tâches opérationnelles telles que la facturation ou la vérification de la disponibilité de la clé.

Remarques importantes concernant les clés externes

Pour en savoir plus sur l'utilisation de clés que vous gérez dans un système partenaire de gestion des clés externes compatible afin de protéger les données dans Google Cloud, consultez Cloud External Key Manager.

Si vous perdez des clés que vous gérez en dehors de Google Cloud, Google ne pourra pas récupérer vos données.

Indisponibilité des clés et perte de données

Si un ensemble de données est chiffré par une clé et que cette clé devient indisponible et reste indisponible, l'API Cloud Healthcare désactive l'ensemble de données et finit par le supprimer. Parfois, une clé devient indisponible si elle est désactivée ou détruite, ou si elle est inaccessible en raison d'autorisations révoquées. Toutefois, ce comportement se produit si la clé est indisponible pour quelque raison que ce soit. Le niveau de protection de la clé ou le fait qu'elle soit une clé externe n'affecte pas ce comportement. Les clés externes peuvent également devenir indisponibles de manière imprévisible. Par exemple, des problèmes de connectivité peuvent survenir entre vos ressources Google Cloud et votre EKM.

Le processus suivant décrit comment la disponibilité des clés est vérifiée, et comment un ensemble de données peut être désactivé et supprimé:

  1. Une fois un ensemble de données de l'API Cloud Healthcare chiffré CMEK créé, l'API Cloud Healthcare vérifie l'état de la clé toutes les cinq minutes pour s'assurer qu'elle est disponible. Si la clé n'est pas disponible, l'API Cloud Healthcare continue de prendre en charge les requêtes envoyées à l'ensemble de données pendant une heure au maximum.

  2. Au bout d'une heure, si l'API Cloud Healthcare ne parvient toujours pas à se connecter à Cloud KMS, l'ensemble de données de l'API Cloud Healthcare est désactivé par mesure de protection. Pour réactiver l'ensemble de données de l'API Cloud Healthcare, contactez votre représentant de l'assistance.

    Lorsqu'il est désactivé, vous ne pouvez envoyer que des requêtes datasets.get et datasets.delete à l'ensemble de données de l'API Cloud Healthcare. Les autres requêtes échouent avec une erreur 400 FAILED_PRECONDITION.

  3. Si l'ensemble de données de l'API Cloud Healthcare reste indisponible pendant plus de 30 jours, il est définitivement supprimé. Tous les magasins DICOM, FHIR et HL7v2 de l'ensemble de données et les données associées sont également supprimés. Une fois supprimées, ces données ne peuvent pas être récupérées.

Création de clés

Les sections suivantes expliquent comment créer un trousseau de clés et une clé Cloud KMS. Seules les clés de chiffrement symétriques Cloud KMS sont acceptées.

Pays acceptés

Les clés Cloud KMS sont disponibles dans les emplacements de l'API Cloud Healthcare. Créez le trousseau de clés dans le même emplacement que l'ensemble de données de l'API Cloud Healthcare.

  • Tout ensemble de données multirégional de l'API Cloud Healthcare doit utiliser un trousseau de clés multirégional issu du même emplacement. Par exemple, un ensemble de données de l'API Cloud Healthcare dans la région us doit être protégé par un trousseau de clés de la région us, et un ensemble de données de l'API Cloud Healthcare dans la région eu doit être protégé par un trousseau de clés de la région europe.

  • Les ensembles de données régionaux de l'API Cloud Healthcare doivent utiliser des clés régionales correspondantes. Par exemple, un ensemble de données de l'API Cloud Healthcare dans la région asia-northeast1 doit être protégé par un trousseau de clés de la région asia-northeast1.

  • Vous ne pouvez pas utiliser la région global lors de la configuration du chiffrement CMEK pour un ensemble de données de l'API Cloud Healthcare.

Pour en savoir plus, consultez les pages Emplacements de l'API Cloud Healthcare et Emplacements de Cloud KMS.

Créer un trousseau de clés et une clé

Effectuez les étapes suivantes dans le projet Google Cloud qui exécute Cloud KMS:

  1. Créez un trousseau de clés.
  2. Créez une clé.

Accorder des autorisations de chiffrement et de déchiffrement

Pour protéger vos données de l'API Cloud Healthcare avec une clé Cloud KMS, attribuez le rôle Chiffreur/Déchiffreur de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) à ce compte. Pour obtenir des instructions, consultez la section Autorisations CMEK pour les ensembles de données.

Une fois le rôle attribué au compte de service, l'API Cloud Healthcare peut chiffrer et déchiffrer les ressources chiffrées CMEK. Vos applications n'ont pas besoin de spécifier de clés lors de la lecture ou de l'écriture de données. L'API Cloud Healthcare gère le chiffrement.

Lorsqu'un demandeur lit ou écrit un objet chiffré avec une clé Cloud KMS, il accède à l'objet normalement. Lors de la requête, l'agent de service chiffre ou déchiffre automatiquement l'objet demandé, à condition que les deux conditions suivantes soient remplies:

  • L'agent de service dispose toujours des autorisations requises.
  • La clé est disponible et activée.

Créer un ensemble de données de l'API Cloud Healthcare chiffré CMEK

Les exemples suivants montrent comment créer un ensemble de données chiffré CMEK.

Vous devez spécifier un ID de ressource de clé Cloud KMS lorsque vous créez l'ensemble de données. Cette clé est sensible à la casse et se présente au format suivant:

projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

Pour afficher les ID de ressource de vos clés Cloud KMS, consultez la section Obtenir un ID de ressource Cloud KMS.

Console

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

    Accéder à la page du navigateur

  2. Cliquez sur  Créer un ensemble de données. La page Créer un ensemble de données s'affiche.

  3. Dans le champ Nom, saisissez un identifiant pour l'ensemble de données soumis aux caractères et taille autorisés pour les ensembles de données.

  4. Sélectionnez l'un des types d'emplacements suivants:

    • Région : L'ensemble de données réside de façon permanente dans une région Google Cloud. Après avoir sélectionné cette option, saisissez ou sélectionnez un emplacement dans le champ Région.

    • Multirégional L'ensemble de données réside de façon permanente dans un emplacement qui couvre plusieurs régions Google Cloud. Après avoir sélectionné cette option, saisissez ou sélectionnez un emplacement multirégional dans le champ Multirégional.

  5. Dans la section Chiffrement, sélectionnez l'un des types de chiffrement suivants:

    • Clé de chiffrement gérée par Google: méthode de chiffrement par défaut. Utilisez cette méthode si vous souhaitez que Google gère les clés de chiffrement qui protègent vos données dans cet ensemble de données de l'API Cloud Healthcare.

    • Clé Cloud KMS: utilisez une clé de chiffrement gérée par le client (CMEK).

  6. Cliquez sur Créer. La page Navigateur s'affiche. Le nouvel ensemble de données s'affiche dans la liste des ensembles de données.

gcloud

Créez l'ensemble de données à l'aide de la commande gcloud healthcare datasets create.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud healthcare datasets create DATASET_ID \
  --location=LOCATION \
  --encryption-key=KEY_RESOURCE_ID

Windows (PowerShell)

gcloud healthcare datasets create DATASET_ID `
  --location=LOCATION `
  --encryption-key=KEY_RESOURCE_ID

Windows (cmd.exe)

gcloud healthcare datasets create DATASET_ID ^
  --location=LOCATION ^
  --encryption-key=KEY_RESOURCE_ID

Vous devriez obtenir un résultat semblable à celui-ci :

Create request issued for: [DATASET_ID]
Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...
Created dataset [DATASET_ID].

REST

  1. Créez l'ensemble de données à l'aide de la méthode datasets.create.

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    Corps JSON de la requête :

    {
      "encryptionSpec": {
        "kmsKeyName": "KEY_RESOURCE_ID"
      }
    }
    

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

    cat > request.json << 'EOF'
    {
      "encryptionSpec": {
        "kmsKeyName": "KEY_RESOURCE_ID"
      }
    }
    EOF

    Exécutez ensuite la commande suivante pour envoyer votre requête REST :

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID"

    PowerShell

    Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

    @'
    {
      "encryptionSpec": {
        "kmsKeyName": "KEY_RESOURCE_ID"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Exécutez ensuite la commande suivante pour envoyer votre requête REST :

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID" | Select-Object -Expand Content

    API Explorer

    Copiez le corps de la requête et ouvrez la page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Collez le corps de la requête dans cet outil, renseignez tous les champs obligatoires, puis cliquez sur Execute (Exécuter).

    Le résultat est le suivant. La réponse contient un identifiant pour une opération de longue durée (LRO). Les opérations de longue durée sont renvoyées lorsque les appels de méthode peuvent prendre davantage de temps. Notez la valeur de OPERATION_ID. Vous en aurez besoin à l'étape suivante.

  2. Obtenez l'état de l'opération de longue durée à l'aide de la méthode projects.locations.datasets.operations.get.

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud
    • LOCATION : emplacement de l'ensemble de données
    • DATASET_ID : ID de l'ensemble de données
    • OPERATION_ID : ID renvoyé par l'opération de longue durée

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Exécutez la commande suivante :

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Exécutez la commande suivante :

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API Explorer

    Ouvrez la page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Renseignez tous les champs obligatoires, puis cliquez sur Execute (Exécuter).

    Le résultat est le suivant. Lorsque la réponse contient "done": true, l'opération de longue durée est terminée.

Déterminer si un ensemble de données est protégé par Cloud KMS

Pour chacune des clés que vous avez créées ou qui protègent vos ensembles de données de l'API Cloud Healthcare, vous pouvez voir quelles ressources cette clé protège avec le suivi de l'utilisation des clés. Pour en savoir plus, consultez la section Afficher l'utilisation des clés.

Rotation des clés

Cloud KMS est compatible avec la rotation des clés automatique et manuelle vers une nouvelle version.

La rotation d'une clé entraîne les conséquences suivantes:

  • Les ensembles de données de l'API Cloud Healthcare créés après la rotation utilisent la nouvelle version de clé pour le chiffrement et toutes les opérations.
  • Les ressources d'un ensemble de données existant chiffrées avec la clé ne sont pas automatiquement rechiffrées avec la nouvelle version de clé primaire.

Pour que le chiffrement fonctionne, toutes les versions de clé doivent être disponibles. Sinon, l'ensemble de données de l'API Cloud Healthcare est désactivé et toutes les requêtes envoyées à l'ensemble de données échouent. Pour en savoir plus, consultez les pages Éléments à prendre en compte concernant les clés externes et Ensembles de données désactivés et suppression définitive des ensembles de données.

Supprimer l'accès de l'API Cloud Healthcare à la clé Cloud KMS

Vous contrôlez vos clés et pouvez les désactiver, les détruire ou révoquer les autorisations associées afin que l'API Cloud Healthcare ne puisse pas accéder aux données chiffrées CMEK. Une fois que vous avez détruit une clé ou une version de clé associée à un ensemble de données de l'API Cloud Healthcare, toutes les données chiffrées avec cette clé ou cette version de clé sont définitivement perdues.

Il existe un délai entre le moment où vous désactivez une clé ou une version de clé et celui où elle ne peut plus être utilisée. Il existe également un délai entre le moment où vous révoquez les autorisations du compte de service Agent de service Cloud Healthcare sur la clé et le moment où elle n'est plus accessible. Pour en savoir plus, consultez la page Cohérence des ressources Cloud KMS.

Exporter et importer des données vers une instance compatible avec les CMEK

Pour que vos données restent chiffrées avec une clé gérée par le client lors d'une opération d'exportation, vous devez définir une clé CMEK sur la destination de stockage avant de commencer l'exportation. Il n'existe pas d'exigences ni de restrictions particulières concernant l'importation de données vers un ensemble de données chiffré par CMEK lors de l'importation à partir d'un stockage non CMEK ou chiffré par CMEK.

Restrictions

Tarifs

Les ensembles de données sont facturés de la même manière, qu'ils soient chiffrés avec CMEK ou non. Pour en savoir plus, consultez la page Tarifs de l'API Cloud Healthcare.

Cloud KMS vous facture le coût de la clé ainsi que toutes les opérations cryptographiques effectuées avec cette clé. Ces opérations se produisent lorsque l'API Cloud Healthcare utilise la clé pour le chiffrement ou le déchiffrement. Vous pouvez vous attendre à ce que ces coûts soient minimes, en fonction du nombre d'opérations cryptographiques générées par l'API Cloud Healthcare. Pour en savoir plus, consultez la page Tarifs de Cloud KMS.

Quotas Cloud KMS et API Cloud Healthcare

Lorsque vous utilisez des clés de chiffrement gérées par le client (CMEK) dans l'API Cloud Healthcare, vos projets peuvent consommer des quotas de requêtes de chiffrement Cloud KMS. Les ensembles de données de l'API Cloud Healthcare chiffrés CMEK et leurs datastores DICOM, FHIR et HL7v2 consomment ces quotas pour toutes les opérations, à l'exception de datasets.get. Les opérations de chiffrement et de déchiffrement à l'aide de clés CMEK n'affectent les quotas Cloud KMS que si vous utilisez des clés matérielles (Cloud HSM) ou externes (Cloud EKM). Pour en savoir plus, consultez la page Quotas Cloud KMS.

Étape suivante