Résoudre les problèmes liés aux CMEK et aux paramètres par défaut

Ce document explique comment identifier et limiter les configurations CMEK courantes les erreurs, et il décrit comment identifier les erreurs qui se produisent lors de la configuration l'emplacement par défaut des ressources.

Résoudre les problèmes liés à la définition de l'emplacement par défaut des ressources

Vous tentez de mettre à jour l'emplacement de stockage par défaut d'une d'une organisation ou d'un dossier, échoue et génère une erreur semblable à celle-ci:

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 ce problème, définissez l'emplacement de stockage par défaut du l'organisation ou le dossier correspondant à l'emplacement Clé Cloud Key Management Service de l'organisation ou du dossier.

Résoudre les problèmes liés à VPC Service Controls et au partage restreint au domaine

Vous avez configuré CMEK comme paramètre de ressource par défaut pour votre organisation un dossier, ou vous avez créé un bucket de journaux avec l'option CMEK activée. Vous configurez 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 activer le partage restreint au domaine.

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 clés CMEK.

  • Vous remarquez que le chiffrement CMEK n'est pas activé 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 depuis des buckets de journaux avec CMEK activé. 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`
    
  • Vous recevez des messages d'erreur lorsque vous créez ou mettez à jour des buckets de journaux avec l'option CMEK activée. Les erreurs qui s'affichent sont semblables à celles-ci:

    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, effectuer les opérations suivantes:

  1. Identifiez les paramètres Cloud Logging de la ressource contenant la configuration CMEK. Une ressource peut être un projet, un dossier ou une organisation. Si vous avez créé des buckets de journaux avec CMEK activée, puis sélectionnez la ressource PROJECT.

    PROJECT

    gcloud logging settings describe --project=PROJECT_ID
    

    Avant d'exécuter la commande, remplacez PROJECT_ID par l'ID du projet que vous qui contient 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 à celles-ci:

    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é.

  2. Déterminez si vous devez migrer des comptes de service:

    • Si la valeur du champ kmsServiceAccountId comporte le préfixe service-, vous n'avez pas besoin de migrer votre compte de service. Pour en savoir plus sur les erreurs de configuration CMEK, consultez la Section Résoudre les problèmes liés aux CMEK de ce document.

    • Si la valeur de kmsServiceAccountId comporte le préfixe cmek-, alors passez à l'étape suivante.

  3. Vérifiez que vous devez migrer des comptes de service en désactivant le partage restreint de domaine ou en supprimant Cloud Key Management Service de la liste des services restreints par VPC Service Controls.

    Si les erreurs sont résolues, vous devez les résoudre migrer les ressources concernées vers un nouveau compte de service. Pour en savoir plus sur ces étapes, consultez la section suivante.

Migrer les comptes de service CMEK

Le processus suivant explique comment modifier le compte de service Cloud Logging permet d'accéder aux clés Cloud Key Management Service configurées. La modification du compte de service résout une qui pose problème avec VPC Service Controls et le partage restreint au domaine.

  1. Identifiez le loggingServiceAccountId pour votre ressource. Une ressource peut être un projet, un dossier ou une organisation. Si vous avez créé des buckets de journaux avec CMEK activée, puis sélectionnez la ressource PROJECT.

    PROJECT

    gcloud logging settings describe --project=PROJECT_ID
    

    Avant d'exécuter la commande, remplacez PROJECT_ID par l'ID du projet que vous qui contient 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 à celles-ci:

    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é.

  2. Si vous avez configuré un paramètre de ressource par défaut pour votre organisation ou pour dossiers, puis procédez comme suit:

    1. Dans KMS_PROJECT_ID, accordez le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud Key Management Service au compte de service identifié par le rôle loggingServiceAccountId .

    2. Exécutez la commande curl suivante, qui modifie le Compte de service Cloud Key Management Service utilisé par la ressource.

      PROJECT

      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 loggingServiceAccountId. identifiés 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 loggingServiceAccountId. identifiés précédemment.

      Le résultat de la commande précédente est semblable à celui-ci :

      {
        "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"
      }
      
  3. Pour chaque projet ou dossier Google Cloud contenant des buckets de journaux existants avec CMEK, procédez comme suit:

    1. Dans le projet ou le dossier, pour chaque bucket de journaux activé avec CMEK, procédez comme suit :

      1. Identifiez le projet Google Cloud qui stocke la clé Cloud Key Management Service:

        PROJECT

        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 dans 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 à celui-ci:

        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'
        
      2. Accédez au projet Google Cloud qui possède la clé Cloud Key Management Service. KMS_PROJECT_ID, puis accordez le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud Key Management Service au compte de service identifié par le rôle loggingServiceAccountId .

    2. Pour le projet, exécutez la commande curl suivante, qui modifie le compte de service Cloud Key Management Service :

      PROJECT

      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 dans le bucket de journaux.
      • Remplacez SERVICE_ACCT_NAME par loggingServiceAccountId. identifiés 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 à l'étape précédente.

      Le résultat de la commande précédente est semblable à celui-ci :

      {
        "name": ".../settings",
        "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com",
        "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"
      }
      
  4. Pour chaque bucket de journaux sur lequel l'option CMEK est activée, procédez comme suit:

    1. Effectuez une rotation de la clé Cloud KMS.

    2. Confirmez la migration. La ressource parente du bucket de journaux détermine la commande Google Cloud CLI à exécuter. Il peut s'agir d'un projet, d'un dossier ou d'une organisation.

      PROJECT

      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 dans 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 à celui suivantes:

      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 à loggingServiceAccountId identifié précédemment.

  5. Attendez au moins 30 minutes avant de révoquer les autorisations sur le compte de service précédent. Si vous rencontrez des problèmes après la révocation des autorisations l'ancien compte de service, puis restaurez les autorisations Google Cloud.

Résoudre les problèmes liés aux CMEK

Lorsque vous configurez une clé CMEK, le projet Google Cloud contenant le La clé Cloud KMS est informée des problèmes associés. Par exemple, les mises à jour échouent lorsque KMS_KEY_NAME n'est pas valide, si le compte de service associé ne dispose pas rôle Chiffreur/Déchiffreur de CryptoKeys Cloud Key Management Service, ou lorsque l'accès à la clé est désactivé.

Une fois que vous avez configuré CMEK, 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 clés CMEK.

  • Vous remarquez que CMEK n'est pas activé pour _Default et _Required des buckets de journaux 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 depuis des buckets de journaux avec CMEK activée, ou si vous essayez de créer ou de mettre à jour des buckets de journaux.

La notification fournit des informations sur l'échec et contient pour atténuer le problème:

Erreur Recommandation
Autorisation d'utiliser la clé cryptographique refusée

Le compte de service Logging associé à votre Le projet Google Cloud ne dispose pas de suffisamment d'IAM les autorisations nécessaires pour effectuer des opérations sur la clé Cloud KMS spécifiée. Suivez le instructions fournies 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 le instructions ou consultez les documents suivants:

Identifier le projet contenant la clé Cloud KMS

Identifier l'ID du projet Google Cloud contenant la clé de chiffrement utilisés par un bucket de journaux, un dossier ou une organisation de journaux, procédez comme suit:

PROJECT

gcloud logging settings describe --project=PROJECT_ID

Avant d'exécuter la commande, remplacez PROJECT_ID par l'ID du projet que vous qui contient 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 à celles-ci:

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é.