Chiffrer les disques de démarrage et du plan de contrôle etcd

Ce document explique comment chiffrer les données stockées dans votre plan de contrôle Google Kubernetes Engine (GKE) à l'aide de clés que vous gérez dans Cloud Key Management Service (Cloud KMS). Vous devez déjà connaître des concepts tels qu' etcd, l' architecture de cluster GKE, et Cloud KMS.

Cette page décrit une partie d'un ensemble de fonctionnalités facultatives du plan de contrôle dans GKE qui vous permettent d'effectuer des tâches telles que la vérification de votre niveau de sécurité du plan de contrôle ou la configuration du chiffrement et de la signature des identifiants dans le plan de contrôle à l'aide de clés que vous gérez. Pour en savoir plus, consultez À propos de GKE control plane authority.

Par défaut, Google Cloud applique diverses mesures de sécurité au plan de contrôle géré. Cette page décrit les fonctionnalités facultatives qui vous offrent plus de visibilité ou de contrôle sur le plan de contrôle GKE.

À propos du disque de démarrage du plan de contrôle et du chiffrement etcd

Par défaut, GKE chiffre le disque de démarrage d'un nœud de plan de contrôle, le disque qui stocke les données dans etcd, et la Google Cloud sauvegarde opérationnelle interne d'etcd à l'aide de clés de chiffrement qu'il Google Cloud gère. Pour en savoir plus sur ce chiffrement par défaut, consultez Chiffrement au repos par défaut. Vous pouvez facultativement utiliser vos propres clés de chiffrement que vous gérez à l'aide de Cloud KMS pour chiffrer ces ressources. Pour en savoir plus, consultez Disque de démarrage du plan de contrôle et chiffrement etcd.

Vous créez des clés dans Cloud KMS que GKE utilise pour chiffrer les ressources de votre plan de contrôle. Tenez compte des points suivants lorsque vous créez ces ressources :

  • Vous pouvez utiliser un seul trousseau de clés pour toutes les clés d'un cluster, quel que soit l'objectif de chaque clé. Si vous disposez d'un trousseau de clés existant que vous avez utilisé à d'autres fins, par exemple pour configurer vos propres autorités de certification, vous pouvez l'utiliser pour ce guide.
  • Vous devez créer les clés au même Google Cloud emplacement que votre cluster pour une meilleure latence.
  • Dans la plupart des cas d'utilisation, vous pouvez utiliser le niveau de protection des clés Cloud KMS logiciel. Vous pouvez également utiliser des clés matérielles avec Cloud HSM.
  • Vous devez spécifier l'option --purpose avec la valeur encryption, car ces clés sont utilisées pour le chiffrement symétrique.
  • Vous ne devez pas modifier la durée par défaut de la destruction des clés.

Utilisation avec d'autres fonctionnalités de GKE control plane authority

GKE control plane authority fournit les fonctionnalités suivantes liées aux clés autogérées que vous devez activer en même temps lorsque vous créez un cluster :

Vous ne pouvez activer ces fonctionnalités que lorsque vous créez un cluster GKE. Vous ne pouvez pas mettre à jour les clusters existants pour utiliser ces fonctionnalités. Pour utiliser ces deux fonctionnalités dans le même cluster, effectuez toutes les procédures de configuration des clés et des autorités de certification dans les deux guides, puis exécutez la commande de création de cluster qui active les deux ensembles de fonctionnalités, comme décrit dans la section Créer un cluster.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Si vous souhaitez utiliser la Google Cloud CLI pour cette tâche, installez et initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
  • Assurez-vous que votre projet de clé dispose d'un trousseau de clés Cloud KMS pour votre cluster. Vous pouvez utiliser n'importe quel trousseau de clés existant dans l'emplacement de votre cluster. Pour créer un trousseau de clés, consultez Créer un trousseau de clés.
  • Activez l'API Cloud Key Management Service.

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    Activer l'API

Identifier des projets

Nous vous recommandons d'utiliser des Google Cloud projets distincts comme suit :

  • Projet de clé : contient toutes les clés.
  • Projet de cluster : contient vos clusters GKE.

Vous pouvez éventuellement utiliser le même projet pour vos clés et vos clusters GKE, mais nous vous recommandons d'utiliser des projets distincts afin que les équipes qui gèrent vos clés et vos opérations cryptographiques soient distinctes de celles qui gèrent vos clusters.

Rôles et autorisations requis

Pour obtenir les autorisations nécessaires pour exécuter vos propres clés de chiffrement, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Conditions requises

Le chiffrement du disque du plan de contrôle avec vos propres clés présente les exigences suivantes :

  • Votre cluster doit exécuter GKE version 1.31.1-gke.1846000 ou ultérieure.
  • Vous devez créer votre cluster dans l'une des régions suivantes :

    • asia-east1
    • asia-northeast1
    • asia-southeast1
    • europe-west1
    • europe-west4
    • us-central1
    • us-central2
    • us-east1
    • us-east4
    • us-east5
    • us-south1
    • us-west1
    • us-west3
    • us-west4

Limites

  • Vous ne pouvez configurer les clés de chiffrement du disque de démarrage et d'etcd que lors de la création du cluster.
  • Pour les clusters régionaux en mode Standard et pour les clusters Autopilot, la région dans laquelle vous créez un cluster doit disposer d'une capacité pour le mode confidentiel pour Hyperdisk Balanced dans au moins trois zones de cette région.

    Pour les clusters zonaux en mode Standard, la zone du cluster doit disposer d'une capacité Hyperdisk Balanced. Pour obtenir de l'aide concernant la capacité, contactez l'assistance Cloud Customer Care.

  • GKE n'accepte que les clés de Cloud KMS. Vous ne pouvez pas utiliser d'autre fournisseur KMS Kubernetes ni d'autre fournisseur de chiffrement.

  • Les clés Cloud External Key Manager (Cloud EKM) ne sont pas compatibles.

  • Vous ne pouvez pas accéder aux sauvegardes opérationnelles internes d'etcd ni interagir avec elles, car elles ne sont destinées qu'à la reprise après sinistre. Google Cloud

  • Les trousseaux de clés multirégionaux ne sont pas compatibles. Vous devez utiliser un trousseau de clés régional.

Créer des clés

Dans cette section, vous allez créer une clé de chiffrement pour les disques de démarrage et les disques etcd de votre plan de contrôle, ainsi qu'une clé de chiffrement distincte pour la Google Cloud sauvegarde opérationnelle interne d'etcd. Vous pouvez utiliser un seul trousseau de clés pour contenir toutes ces clés et toutes les autres clés du cluster.

  1. Créez la clé de chiffrement pour les disques de démarrage et les disques etcd de votre plan de contrôle :

    gcloud kms keys create KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --purpose="encryption" \
        --protection-level=PROTECTION_LEVEL \
        --project=KEY_PROJECT_ID
    

    Remplacez les éléments suivants :

    • KCP_DISK_KEY_NAME: nom de la clé de chiffrement pour les disques de démarrage et les disques etcd de votre plan de contrôle.
    • KEYRING_NAME: nom du trousseau de clés contenant vos clés de chiffrement pour le cluster.
    • LOCATION :emplacement du trousseau de clés. Google Cloud Il doit être identique à l'emplacement de votre cluster. Pour obtenir la liste des régions, filtrez sur "Région" dans le tableau des emplacements Cloud KMS.
    • PROTECTION_LEVEL: niveau de protection de la clé, tel que software ou hsm.
    • KEY_PROJECT_ID: ID du projet de votre projet de clé.
  2. Créez la clé de chiffrement de sauvegarde interne etcd :

    gcloud kms keys create ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --purpose="encryption" \
        --protection-level=PROTECTION_LEVEL \
        --project=KEY_PROJECT_ID
    

    Remplacez ETCD_BACKUP_KEY_NAME par un nom pour la clé de chiffrement de sauvegarde interne etcd.

Attribuer des rôles IAM à l'agent de service GKE

Dans cette section, vous allez attribuer des rôles IAM sur les clés que vous avez créées à l' agent de service GKE dans le projet de cluster. L'agent de service GKE a besoin de ces rôles pour utiliser ces clés afin de chiffrer les ressources de plan de contrôle correspondantes.

  1. Recherchez le numéro de votre projet de cluster :

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    

    Remplacez CLUSTER_PROJECT_ID par l'ID du projet de votre projet de cluster GKE.

    Le résultat ressemble à ce qui suit :

    1234567890
    
  2. Attribuez le rôle Chiffreur/Déchiffreur de CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) sur la clé de chiffrement pour les disques de démarrage et les disques etcd à l'agent de service GKE dans le projet de cluster :

    gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
        --location=LOCATION \
        --keyring=KEYRING_NAME \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project=KEY_PROJECT_ID
    

    Remplacez les éléments suivants :

    • KCP_DISK_KEY_NAME: nom de la clé de chiffrement du disque.
    • LOCATION :emplacement de la Google Cloud location pour la clé.
    • KEYRING_NAME: nom du trousseau de clés contenant la clé de chiffrement.
    • CLUSTER_PROJECT_NUMBER: numéro de projet numérique du projet de cluster, que vous avez trouvé à l'étape précédente.
    • KEY_PROJECT_ID: ID du projet de votre projet de clé.
  3. Attribuez le rôle Chiffreur/Déchiffreur de CryptoKey Cloud KMS via délégation (roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation) sur la clé de chiffrement pour les disques de démarrage et les disques etcd à l'agent de service GKE dans le projet de cluster :

    gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
        --location=LOCATION \
        --keyring=KEYRING_NAME \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation \
        --project=KEY_PROJECT_ID
    
  4. Attribuez le rôle Utilisateur de clé Cloud KMS sur les clés de chiffrement pour les disques de démarrage et les disques etcd à l'agent de service GKE dans le projet de cluster pour la rotation des clés :

    gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
        --location=LOCATION \
        --keyring=KEYRING_NAME \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/container.cloudKmsKeyUser \
        --project=KEY_PROJECT_ID
    
  5. Attribuez le rôle Chiffreur de CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyEncrypter) sur la clé de chiffrement de sauvegarde interne etcd à l'agent de service GKE dans le projet de cluster :

    gcloud kms keys add-iam-policy-binding ETCD_BACKUP_KEY_NAME \
        --location=LOCATION \
        --keyring=KEYRING_NAME \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/cloudkms.cryptoKeyEncrypter \
        --project=KEY_PROJECT_ID
    

    Remplacez ETCD_BACKUP_KEY_NAME par le nom de la clé de chiffrement de sauvegarde opérationnelle etcd.

    L'attribution du rôle roles/cloudkms.cryptoKeyEncrypter empêche GKE d'effectuer des restaurations de base de données en votre nom et augmente considérablement le temps nécessaire pour restaurer les fonctionnalités en cas de problème de base de données. Pour autoriser GKE à effectuer des restaurations pour vous, attribuez plutôt le rôle roles/cloudkms.cryptoKeyEncrypterDecrypter.

Utiliser des clés de chiffrement dans un cluster

Cette section explique comment identifier les chemins d'accès à vos clés de chiffrement.

  1. Identifiez le chemin d'accès à votre clé de chiffrement de disque :

    gcloud kms keys describe KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --format="value(name)"
    

    Remplacez les éléments suivants :

    • KCP_DISK_KEY_NAME: nom de la clé de chiffrement pour les disques de démarrage et les disques etcd du plan de contrôle.
    • KEYRING_NAME: nom du trousseau de clés contenant la clé.
    • LOCATION :emplacement de la Google Cloud clé.
    • KEY_PROJECT_ID: ID du projet de votre projet de clé.

    Le résultat ressemble à ce qui suit :

    projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-key
    
  2. Identifiez le chemin d'accès à votre clé de chiffrement de sauvegarde interne etcd :

    gcloud kms keys describe ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --format="value(name)"
    

    Remplacez ETCD_BACKUP_KEY_NAME par le nom de la clé de chiffrement de sauvegarde opérationnelle etcd.

    Le résultat ressemble à ce qui suit :

    projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/etcd-backup-encryption-key
    

Créer un cluster

Dans cette section, vous allez créer un cluster avec différentes options spécifiées en fonction des fonctionnalités de GKE control plane authority que vous souhaitez configurer. Vous ne pouvez configurer ces fonctionnalités sur un cluster que lors de sa création. Les commandes suivantes créent des clusters en mode Standard. Pour créer des clusters en mode Autopilot, utilisez les mêmes options avec la gcloud container clusters create-auto commande.

  • Pour créer un cluster qui configure le chiffrement de disque et exécute vos propres autorités de certification et clés de signature de compte de service, procédez comme suit :

    1. Effectuez toutes les étapes de configuration des clés et des autorités de certification dans Exécuter vos propres autorités de certification et clés.
    2. Recherchez les chemins d'accès à chacune des clés de compte de service et des autorités de certification en suivant les instructions de Configurer des autorités de certification et des clés sur un nouveau cluster.
    3. Créez un cluster :

      gcloud container clusters create CLUSTER_NAME \
          --location=LOCATION \
          --project=CLUSTER_PROJECT_ID \
          --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \
          --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY \
          --service-account-signing-keys=PATH_TO_SIGNING_KEY_VERSION \
          --service-account-verification-keys=PATH_TO_VERIFICATION_KEY_VERSION \
          --cluster-ca=PATH_TO_CLUSTER_CA \
          --etcd-peer-ca=PATH_TO_ETCD_PEER_CA \
          --etcd-api-ca=PATH_TO_ETCD_API_CA \
          --aggregation-ca=PATH_TO_AGGREGATION_CA
      

      Remplacez les éléments suivants :

      • CLUSTER_NAME : nom de votre nouveau cluster.
      • LOCATION : emplacement de votre nouveau cluster.
      • CLUSTER_PROJECT_ID : ID du projet de votre projet de cluster.
      • PATH_TO_DISK_KEY: chemin d'accès à votre clé de chiffrement de disque à partir des étapes précédentes de ce document.
      • PATH_TO_ETCD_BACKUP_KEY: chemin d'accès à votre clé de chiffrement de sauvegarde interne etcd à partir des étapes précédentes de ce document.
      • PATH_TO_SIGNING_KEY_VERSION: chemin d'accès à la version de la clé de signature Kubernetes ServiceAccount dans Cloud KMS.
      • PATH_TO_VERIFICATION_KEY_VERSION: chemin d'accès à la version de la clé de validation Kubernetes ServiceAccount dans Cloud KMS.
      • PATH_TO_CLUSTER_CA: chemin d'accès au pool d'autorités de certification de cluster.
      • PATH_TO_ETCD_PEER_CA: chemin d'accès au pool d'autorités de certification homologues etcd.
      • PATH_TO_ETCD_API_CA: chemin d'accès au pool d'autorités de certification de l'API etcd.
      • PATH_TO_AGGREGATION_CA: chemin d'accès au pool d'autorités de certification d'agrégation.
  • Pour créer un cluster qui configure uniquement le chiffrement de disque à l'aide des clés que vous avez créées dans ce guide, exécutez la commande suivante :

    gcloud container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --project=CLUSTER_PROJECT_ID \
        --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \
        --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY
    

    Remplacez les éléments suivants :

    • CLUSTER_NAME : nom de votre nouveau cluster.
    • LOCATION : emplacement de votre nouveau cluster.
    • CLUSTER_PROJECT_ID : ID du projet de votre projet de cluster.
    • PATH_TO_DISK_KEY: chemin d'accès à votre clé de chiffrement de disque à partir des étapes précédentes.
    • PATH_TO_ETCD_BACKUP_KEY: chemin d'accès à votre clé de chiffrement de sauvegarde interne etcd à partir des étapes précédentes.

Vous pouvez également spécifier toutes ces options lorsque vous créez un cluster en mode Standard.

Vérifier l'état de la clé de chiffrement

Cette section explique comment vérifier la clé de chiffrement qui a été utilisée lors de la création du cluster. Vous pouvez effectuer cette vérification à l'aide de Cloud Logging ou de Google Cloud CLI.

Utiliser Logging pour vérifier les clés

Pour vérifier les clés à l'aide de Logging, procédez comme suit :

  1. Dans la Google Cloud console, accédez à la page Explorateur de journaux.

    Accéder à l'explorateur de journaux

  2. Obtenez le journal de création du cluster en spécifiant la requête suivante :

    resource.type="gke_cluster"
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.location="CLUSTER_LOCATION"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster"
    protoPayload.request.cluster.userManagedKeysConfig:*
    
  3. Cliquez sur Exécuter la requête.

Dans le résultat, vérifiez que les paramètres de création du cluster incluent un chemin d'accès à la clé qui correspond à la clé que vous avez configurée dans Cloud KMS, comme dans l'exemple suivant :

# lines omitted for clarity
userManagedKeysConfig: {
  controlPlaneDiskEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KCP_DISK_KEY_NAME"
  gkeopsEtcdBackupEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/ETCD_BACKUP_KEY_NAME"
}

Utiliser gcloud CLI pour vérifier les clés

Pour utiliser gcloud CLI afin de vérifier la clé de chiffrement, procédez comme suit :

  1. Pour la clé de chiffrement du disque, exécutez la commande suivante :

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(userManagedKeysConfig.controlPlaneDiskEncryptionKey)"
    
  2. Pour la clé de chiffrement de sauvegarde interne etcd, exécutez la commande suivante :

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(userManagedKeysConfig.gkeopsEtcdBackupEncryptionKey)"
    

Effectuer une rotation des clés de chiffrement etcd et du disque du plan de contrôle

Les clés de chiffrement que vous créez n'expirent pas. Pour améliorer votre niveau de sécurité, effectuez régulièrement une rotation de ces clés et rechiffrez vos ressources avec de nouvelles versions de clés. Pour en savoir plus, consultez Effectuer une rotation des clés de chiffrement etcd et du disque de démarrage du plan de contrôle.

Étape suivante