Ce document explique comment identifier et limiter les erreurs courantes de configuration des clés CMEK, et comment identifier les erreurs qui se produisent lors de la définition de l'emplacement des ressources par défaut.
Résoudre les problèmes liés à la définition de l'emplacement par défaut des ressources
Vous essayez de mettre à jour l'emplacement de stockage par défaut pour une organisation ou un dossier, mais la commande échoue et affiche une erreur semblable à la suivante:
ERROR: (gcloud.logging.settings.update) INVALID_ARGUMENT: The KMS key location must match the storage location. Received KMS key location: us-central1, storage location: us-west1
- '@type': type.googleapis.com/google.rpc.DebugInfo
detail: '[ORIGINAL ERROR] generic::invalid_argument: The KMS key location must match
the storage location. Received KMS key location: us-central1, storage location:
us-west1 [google.rpc.error_details_ext] { message: "The KMS key location must
match the storage location. Received KMS key location: us-central1, storage location:
us-west1" }'
Pour résoudre cette erreur, définissez l'emplacement de stockage par défaut de l'organisation ou du dossier afin qu'il corresponde à l'emplacement de la clé Cloud Key Management Service pour l'organisation ou le dossier.
Résoudre les problèmes liés à VPC Service Controls et au partage restreint de domaine
Vous avez configuré CMEK comme paramètre de ressource par défaut pour votre organisation ou pour un dossier, ou vous avez créé un bucket de journaux avec CMEK activé. Vous configurerez ensuite VPC Service Controls. Après avoir configuré VPC Service Controls, vous limitez l'accès à Cloud Key Management Service dans VPC Service Controls ou vous activez le partage restreint au domaine.
Au moins l'un des événements suivants se produit:
Vous avez reçu une notification de Cloud Logging concernant des problèmes d'accès aux CMEK.
Vous remarquez que la fonctionnalité CMEK n'est pas activée pour les buckets de journaux
_Default
et_Required
lorsque vous créez des projets Google Cloud dans votre organisation ou dans un dossier.Vous recevez des erreurs lorsque vous lisez des données dans des buckets de journaux pour lesquels l'option CMEK est activée. Les erreurs que vous voyez sont semblables à l'erreur suivante:
ERROR: (gcloud.logging.read) FAILED_PRECONDITION: service account `cmek-PROJECT_IDgcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY`
Des erreurs s'affichent lorsque vous créez ou mettez à jour des buckets de journaux avec l'option CMEK activée. Les erreurs que vous voyez sont semblables à l'erreur suivante:
ERROR: (gcloud.logging.buckets.create) service account `cmek-PROJECT_ID@gcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY` - '@type': type.googleapis.com/google.rpc.DebugInfo detail: '[ORIGINAL ERROR] generic::permission_denied: Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: <var>ERRORID</var>;'
Pour déterminer si ces problèmes sont dus à la configuration de VPC Service Controls, procédez comme suit:
Identifiez les paramètres Cloud Logging de la ressource qui contient la configuration CMEK. Une ressource peut être un projet, un dossier ou une organisation. Si vous avez créé des buckets de journaux avec l'option CMEK activée, sélectionnez la ressource PROJECT.
PROJET
gcloud logging settings describe --project=PROJECT_ID
Avant d'exécuter la commande, remplacez PROJECT_ID par l'ID du projet contenant le bucket de journaux.
DOSSIER
gcloud logging settings describe --folder=FOLDER_ID
Avant d'exécuter la commande, remplacez FOLDER_ID par l'ID du dossier.
ORGANIZATION
gcloud logging settings describe --organization=ORGANIZATION_ID
Avant d'exécuter la commande, remplacez ORGANIZATION_ID par l'ID de l'organisation.
La commande précédente renvoie des informations semblables à ce qui suit:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Pour les organisations et les dossiers, le champ suivant est également renvoyé:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
La valeur du champ
kmsKeyName
inclut le projet Google Cloud qui stocke la clé.Déterminez si vous devez migrer des comptes de service:
Si la valeur du champ
kmsServiceAccountId
comporte le préfixeservice-
, vous n'avez pas besoin de migrer votre compte de service. Pour en savoir plus sur les erreurs de configuration des CMEK, consultez la section Résoudre les problèmes liés aux CMEK de ce document.Si la valeur de
kmsServiceAccountId
comporte le préfixecmek-
, passez à l'étape suivante.
Confirmez que vous devez migrer les comptes de service en désactivant le partage restreint de domaine ou en supprimant Cloud Key Management Service de la liste des services restreints de VPC Service Controls.
Si les erreurs sont résolues, vous devez migrer les ressources concernées vers un nouveau compte de service pour résoudre les échecs. Pour en savoir plus sur ces étapes, consultez la section suivante.
Migrer des comptes de service CMEK
Le processus suivant explique comment modifier le compte de service utilisé par Cloud Logging pour accéder aux clés configurées dans Cloud Key Management Service. La modification du compte de service résout un problème connu lié à VPC Service Controls et au partage restreint au domaine.
Identifiez le
loggingServiceAccountId
de votre ressource. Une ressource peut être un projet, un dossier ou une organisation. Si vous avez créé des buckets de journaux avec l'option CMEK activée, sélectionnez la ressource PROJECT.PROJET
gcloud logging settings describe --project=PROJECT_ID
Avant d'exécuter la commande, remplacez PROJECT_ID par l'ID du projet contenant le bucket de journaux.
DOSSIER
gcloud logging settings describe --folder=FOLDER_ID
Avant d'exécuter la commande, remplacez FOLDER_ID par l'ID du dossier.
ORGANIZATION
gcloud logging settings describe --organization=ORGANIZATION_ID
Avant d'exécuter la commande, remplacez ORGANIZATION_ID par l'ID de l'organisation.
La commande précédente renvoie des informations semblables à ce qui suit:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Pour les organisations et les dossiers, le champ suivant est également renvoyé:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
La valeur du champ
kmsKeyName
inclut le projet Google Cloud qui stocke la clé.Si vous avez configuré un paramètre de ressource par défaut pour votre organisation ou pour des dossiers, procédez comme suit:
Dans le champ KMS_PROJECT_ID, attribuez le rôle Chiffreur/Déchiffreur de clés cryptographiques Cloud Key Management Service au compte de service identifié par le champ
loggingServiceAccountId
.Exécutez la commande curl suivante, qui modifie le compte de service Cloud Key Management Service utilisé par la ressource.
PROJET
Non applicable.
DOSSIER
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/folders/FOLDER_ID/settings?updateMask=kmsServiceAccountId
Avant d'exécuter la commande, procédez comme suit:
- Remplacez FOLDER_ID par l'ID du dossier.
- Remplacez SERVICE_ACCT_NAME par l'
loggingServiceAccountId
identifié précédemment.
ORGANIZATION
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/settings?updateMask=kmsServiceAccountId
Avant d'exécuter la commande, procédez comme suit:
- Remplacez ORGANIZATION_ID par l'ID de l'organisation.
- Remplacez SERVICE_ACCT_NAME par l'
loggingServiceAccountId
identifié précédemment.
Le résultat de la commande précédente est semblable à ce qui suit :
{ "name": ".../settings", "kmsKeyName": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY", "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com", "storageLocation": "...", "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com" }
Pour chaque projet ou dossier Google Cloud contenant des buckets de journaux existants activés avec CMEK, procédez comme suit:
Dans le projet ou le dossier, pour chaque bucket de journaux activé avec CMEK, procédez comme suit:
Identifiez le projet Google Cloud qui stocke la clé Cloud Key Management Service:
PROJET
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
Avant d'exécuter la commande, procédez comme suit:
- Remplacez PROJECT_ID par l'ID du projet contenant le bucket de journaux.
- Remplacez LOCATION par l'emplacement du bucket de journaux.
DOSSIER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
Avant d'exécuter la commande, procédez comme suit:
- Remplacez FOLDER_ID par l'ID du dossier.
- Remplacez LOCATION par l'emplacement du bucket de journaux.
Le résultat de la commande précédente est semblable à ce qui suit:
cmekSettings: kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1 serviceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com createTime: '2022-10-31T12:00:00.0000000Z' lifecycleState: ACTIVE name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID retentionDays: 30 createTime: '2022-10-31T13:00:00.0000000Z'
Accédez au projet Google Cloud propriétaire de la clé Cloud Key Management Service, KMS_PROJECT_ID, et attribuez le rôle Chiffreur/Déchiffreur de CryptoKeys de Cloud Key Management Service au compte de service identifié par le champ
loggingServiceAccountId
.
Pour le projet, exécutez la commande curl suivante, qui modifie le compte de service Cloud Key Management Service:
PROJET
curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/projects/PROJECT_ID/settings?updateMask=kmsServiceAccountId
Avant d'exécuter la commande, procédez comme suit:
- Remplacez PROJECT_ID par l'ID du projet contenant le bucket de journaux.
- Remplacez SERVICE_ACCT_NAME par l'
loggingServiceAccountId
identifié précédemment.
DOSSIER
Aucune action n'est requise, car vous avez modifié le compte de service Cloud Key Management Service utilisé par le dossier lors d'une étape précédente.
Le résultat de la commande précédente est semblable à ce qui suit :
{ "name": ".../settings", "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com", "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com" }
Pour chaque bucket de journaux pour lequel CMEK est activé, procédez comme suit:
Confirmez la migration. La ressource parente du bucket de journaux détermine la commande Google Cloud CLI à exécuter. Le parent peut être un projet, un dossier ou une organisation.
PROJET
gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
Avant d'exécuter la commande, procédez comme suit:
- Remplacez PROJECT_ID par l'ID du projet contenant le bucket de journaux.
- Remplacez LOCATION par l'emplacement du bucket de journaux.
DOSSIER
gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
Avant d'exécuter la commande, procédez comme suit:
- Remplacez FOLDER_ID par l'ID du dossier.
- Remplacez LOCATION par l'emplacement du bucket de journaux.
Pour un projet, le résultat de la commande précédente est semblable à ce qui suit:
cmekSettings: kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1 serviceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com createTime: '2022-10-31T12:00:00.0000000Z' lifecycleState: ACTIVE name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID retentionDays: 30 createTime: '2022-10-31T13:00:00.0000000Z'
Assurez-vous que
serviceAccountId
correspond à l'loggingServiceAccountId
identifié précédemment.
Attendez au moins 30 minutes avant de révoquer les autorisations du compte de service précédent. Si vous rencontrez des problèmes après avoir révoqué des autorisations sur le compte de service précédent, restaurez-les et contactez l'assistance Cloud.
Résoudre les problèmes liés aux clés CMEK
Lorsque vous configurez une clé CMEK, le projet Google Cloud contenant la clé Cloud KMS est informé des problèmes associés. Par exemple, les mises à jour échouent lorsque KMS_KEY_NAME n'est pas valide, lorsque le compte de service associé ne dispose pas du rôle Chiffreur/Déchiffreur de CryptoKeys Cloud Key Management Service requis ou que l'accès à la clé est désactivé.
Une fois la clé CMEK configurée, au moins l'une des situations suivantes se produit:
Vous avez reçu une notification de Cloud Logging concernant des problèmes d'accès aux CMEK.
Vous remarquez que la fonctionnalité CMEK n'est pas activée pour les buckets de journaux
_Default
et_Required
lorsque vous créez des projets Google Cloud dans votre organisation ou dans un dossier.Vous recevez des erreurs lorsque vous lisez des données dans des buckets de journaux pour lesquels l'option CMEK est activée, ou lorsque vous essayez de créer ou de mettre à jour des buckets de journaux.
La notification fournit des informations sur l'échec. Elle contient des informations que vous pouvez prendre pour atténuer le problème:
Erreur | Recommandation |
---|---|
Autorisation d'utiliser la clé cryptographique refusée | Le compte de service Logging associé à votre projet Google Cloud ne dispose pas des autorisations IAM suffisantes pour utiliser la clé Cloud KMS spécifiée. Suivez les instructions fournies par l'erreur ou consultez les documents suivants:
|
Clé cryptographique désactivée | La clé Cloud KMS spécifiée a été désactivée. Suivez les instructions du message d'erreur pour réactiver la clé. |
La clé cryptographique a été détruite | La clé Cloud KMS spécifiée a été détruite. Suivez les instructions ou consultez les documents suivants: |
Identifier le projet contenant la clé Cloud KMS
Pour identifier l'ID du projet Google Cloud contenant la clé de chiffrement utilisée par un bucket de journaux, un dossier ou une organisation, procédez comme suit:
PROJET
gcloud logging settings describe --project=PROJECT_ID
Avant d'exécuter la commande, remplacez PROJECT_ID par l'ID du projet contenant le bucket de journaux.
DOSSIER
gcloud logging settings describe --folder=FOLDER_ID
Avant d'exécuter la commande, remplacez FOLDER_ID par l'ID du dossier.
ORGANIZATION
gcloud logging settings describe --organization=ORGANIZATION_ID
Avant d'exécuter la commande, remplacez ORGANIZATION_ID par l'ID de l'organisation.
La commande précédente renvoie des informations semblables à ce qui suit:
kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
Pour les organisations et les dossiers, le champ suivant est également renvoyé:
kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
La valeur du champ kmsKeyName
inclut le projet Google Cloud qui stocke la clé.
Vérifier que les clés sont exploitables
Pour vérifier la facilité d'utilisation de la clé, exécutez la commande suivante pour répertorier toutes les clés :
gcloud kms keys list \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING
Cette commande renvoie des informations sur chaque clé sous forme de tableau. La première ligne du résultat est une liste de noms de colonnes :
NAME PURPOSE ...
Dans la réponse qui s'affiche, assurez-vous que la clé Cloud KMS est répertoriée dans le résultat de la commande en tant que ENABLED
et qu'elle remplit une fonction de chiffrement symétrique. Pour cela, la colonne PURPOSE
doit contenir ENCRYPT_DECRYPT
et la colonne PRIMARY_STATE
doit contenir ENABLED
.
Si nécessaire, créez une clé.
Vérifier la configuration des autorisations
Les comptes de services associés aux paramètres CMEK de l'organisation doivent détenir le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS pour la clé configurée.
Pour afficher la règle Cloud IAM de la clé, exécutez la commande suivante :
gcloud kms keys get-iam-policy KMS_KEY_NAME
Si nécessaire, ajoutez le compte de service qui contient le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS à la clé.