Cette page décrit le fonctionnement de la gestion des clés de chiffrement gérées par le client (CMEK) dans le cadre de la Sauvegarde pour GKE.
Présentation
Deux types d'artefacts de données utilisateur sont produits et stockés via la Sauvegarde pour GKE :
- Sauvegarde de configurations : ensemble de descriptions de ressources Kubernetes extraites du serveur d'API du cluster en cours de sauvegarde, capturant l'état du cluster.
- Sauvegardes de volumes : ensemble de sauvegardes de volume correspondant aux ressources
PersistentVolumeClaim
trouvées dans la sauvegarde de configuration.
Par défaut, tous les artefacts de sauvegarde générés via la Sauvegarde pour GKE sont chiffrés au repos à l'aide d'une clé fournie par Google.
Toutefois, vous pouvez choisir de chiffrer ces artefacts à l'aide d'une clé de chiffrement gérée par le client (CMEK) via Cloud Key Management Service.
Activer le chiffrement CMEK
L'activation du chiffrement CMEK implique deux étapes :
Désignez une clé pour chiffrer les sauvegardes générées pour un
BackupPlan
.Accordez aux comptes de service appropriés l'accès aux clés appropriées.
Pour tout scénario de sauvegarde particulier, il existe potentiellement trois clés CMEK impliquées :
bplan_key
: il s'agit de la clé que vous référencez lors de la création ou de la mise à jour duBackupPlan
. Dans la mesure du possible, cette clé sera utilisée lors du chiffrement de tous les artefacts de sauvegarde. Cette clé doit se trouver dans la même région que leBackupPlan
lui-même (consultez la section À propos des emplacements de ressources).orig_disk_key
: si vous avez chiffré vos volumes de disques persistants à l'aide d'une clé CMEK, les sauvegardes de volume générées par la Sauvegarde pour GKE pour ces volumes sont chiffrées avec cette clé, même si une clé différente est enregistrée auprès duBackupPlan
.new_disk_key
: il s'agit de la clé CMEK que vous souhaitez utiliser pour chiffrer les volumes que vous avez restaurés à partir d'une sauvegarde. Il est référencé par la valeurStorageClass
dans le cluster cible restauré.
Cinq comptes de service différents peuvent nécessiter l'accès aux clés CMEK :
agent_wi
: Si vous exécutez la version preview de l'agent (clusters GKE exécutant la version 1.23 ou antérieure), ce compte de service doit être autorisé à accéder à la clébplan_key
. Ce compte de service se présente sous la forme suivante :PROJECT_ID.svc.id.goog[gkebackup/agent]
, oùPROJECT_ID
est l'ID de votre projet Google Cloud.agent_robot
: si vos clusters GKE exécutent la version 1.24 ou une version ultérieure, ce compte de service doit être autorisé à accéder à la clébplan_key
. Ce compte de service se présente sous la forme suivante :service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
, oùPROJECT_NUMBER
est le numéro de votre projet Google Cloud.non_cmek_service_agent
: lors de la sauvegarde de volumes non chiffrés par CMEK, ce compte de service doit disposer d'un accès à la clébplan_key
. Ce compte de service se présente sous la forme suivante :service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com
, oùPROJECT_NUMBER
est le numéro de votre projet Google Cloud.cmek_service_agent
: lors de la sauvegarde de volumes chiffrés par CMEK, ce compte de service doit disposer d'un accès à la cléorig_disk_key
. Ce compte de service se présente sous la forme suivante :service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
, oùTENANT_PROJECT_NUMBER
est le numéro du projet locataire attribué à votreBackupPlan
.compute_service_agent
: ce compte de service est utilisé lors de la création de nouveaux volumes chiffrés pour un cluster et doit être autorisé à accéder à la clénew_disk_key
. Ce compte de service se présente sous la forme suivante :service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
, oùPROJECT_NUMBER
est le numéro de votre projet Google Cloud.
Si diskEncryptionKey.kmsKeyServiceAccount est défini pour les disques, vous devez suivre la procédure suivante avant de créer une sauvegarde :
Désactivez la règle d'administration
iam.disableCrossProjectServiceAccountUsage
pour activer l'emprunt d'identité des comptes de service entre projets :gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage --project=PROJECT_ID
Attribuez à
cmek_service_agent
le rôleroles/iam.serviceAccountTokenCreator
pour créer des identifiants éphémères :gcloud iam service-accounts add-iam-policy-binding \ # Replace the email with the value from # `diskEncryptionKey.kmsKeyServiceAccount` your-kms-key-service-acount@PROJECT_ID.iam.gserviceaccount.com \ --member=service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Le tableau suivant récapitule les comptes de service autorisés à accéder aux clés dans différents scénarios :
Artefact | Compte de service | Clé |
---|---|---|
Sauvegarde de configuration, cluster 1.23- | agent_wi | bplan_key |
Sauvegarde de configuration, cluster 1.24+ | agent_robot | bplan_key |
Sauvegarde d'un volume chiffré par CMEK | cmek_service_agent | orig_disk_key |
Sauvegarde d'un volume chiffré par Google | non_cmek_service_agent | bplan_key |
Nouveau volume chiffré par CMEK créé lors de la restauration | compute_service_agent | new_disk_key |
Vous pouvez choisir d'accorder l'accès aux clés au niveau du projet (accorde l'accès à toutes les clés situées sous ce projet) ou à la clé individuelle.
Accorder un accès au niveau du projet
Vous pouvez accorder l'accès aux clés au niveau du projet, ce qui permet d'accéder à toutes les clés de ce projet.
Suivez les instructions ci-dessous pour accorder l'accès au niveau du projet.
Console
Dans la console Google Cloud, accédez à la page IAM.
Cliquez sur Accorder l'accès.
Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'agent de service.
Dans la liste Sélectionner un rôle, sélectionnez le rôle Chiffreur/Déchiffreur de clé de chiffrement Cloud KMS.
Cliquez sur Enregistrer.
gcloud
Accordez l'accès au niveau du projet.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet auquel vous souhaitez accorder l'accès.PROJECT_NUMBER
: numéro du projet auquel vous souhaitez accorder l'accès.
Terraform
Accordez l'accès au niveau du projet.
resource "google_project_iam_member" "example_iam_member" { project = "PROJECT_ID" role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" member = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" }
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet auquel vous souhaitez accorder l'accès.PROJECT_NUMBER
: numéro du projet auquel vous souhaitez accorder l'accès.
Accorder l'accès au niveau de la clé
Suivez les instructions ci-dessous pour accorder l'accès au niveau de chaque clé.
Console
Dans la console Google Cloud, accédez à la page Gestion des clés.
Cliquez sur le nom du trousseau de clés.
Cliquez sur le nom de la clé.
Cliquez sur l'onglet Autorisations.
Cliquez sur Accorder l'accès.
Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'agent de service.
Dans la liste Sélectionner un rôle, sélectionnez le rôle Chiffreur/Déchiffreur de clé de chiffrement Cloud KMS.
Cliquez sur Enregistrer.
gcloud
Accordez l'accès au niveau de chaque clé.
gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Remplacez les éléments suivants :
KEY_NAME
: nom de la clé.KEY_RING
: nom du trousseau de clés qui inclut la cléLOCATION
: emplacement Cloud KMS du trousseau de clés.PROJECT_NUMBER
: numéro du projet auquel vous souhaitez accorder l'accès.
Terraform
Accordez l'accès au niveau de chaque clé.
resource "google_kms_crypto_key_iam_member" "crypto_key_iam_member" { crypto_key_id = "projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME" role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" member = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" }
Remplacez les éléments suivants :
PROJECT_ID
: ID du projet auquel vous souhaitez accorder l'accès.LOCATION
: emplacement Cloud KMS du trousseau de clés.KEY_RING
: nom du trousseau de clés qui inclut la cléKEY_NAME
: nom de la clé.PROJECT_NUMBER
: numéro du projet auquel vous souhaitez accorder l'accès.
Remarques et limites concernant l'utilisation
Si vous souhaitez sauvegarder un volume chiffré par CMEK, vous devez accorder l'accès à la clé de ce disque, même si vous n'activez pas le chiffrement CMEK dans votre fichier
BackupPlan
.Les clés CMEK doivent se trouver dans la même région que le
BackupPlan
pour garantir qu'une panne régionale ne supprimera pas l'accès à la clé tant que les sauvegardes sont toujours accessibles. Toutefois, cette contrainte ne peut pas être appliquée aux clés partagées avec des volumes chiffrés. En cas de volumes chiffrés, une restauration peut échouer même lorsqu'une sauvegarde est disponible, car la clé de chiffrement du disque peut ne pas être stockée dans la même région que la sauvegarde.