Risolvi i problemi relativi a CMEK e alle impostazioni delle risorse predefinite per Cloud Logging

Questo documento descrive come trovare e mitigare gli errori di configurazione CMEK più comuni. Descrive anche come identificare gli errori che si verificano durante la configurazione delle impostazioni delle risorse predefinite per Cloud Logging. Queste impostazioni possono essere configurate per organizzazioni e cartelle.

Risolvere i problemi relativi all'impostazione della località per i nuovi bucket di log creati dal sistema

Per un'organizzazione o una cartella, tenti di aggiornare le impostazioni delle risorse predefinite per Cloud Logging. L'aggiornamento consiste nell'impostare o modificare l'impostazione della località. Tuttavia, il comando non riesce e restituisce un errore simile al seguente:

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" }'

Per risolvere questo errore, imposta la località nelle impostazioni delle risorse predefinite in modo che corrisponda alla località della chiave Cloud Key Management Service.

Risolvere i problemi relativi ai Controlli di servizio VPC e alla condivisione limitata per i domini

Hai configurato le impostazioni delle risorse predefinite per Cloud Logging in modo che includano un'impostazione CMEK oppure hai creato un bucket di log con CMEK abilitata. Poi configuri i Controlli di servizio VPC. Dopo aver configurato i Controlli di servizio VPC, limiti l'accesso a Cloud Key Management Service nei Controlli di servizio VPC o abiliti la condivisione limitata per i domini.

Si verifica almeno una delle seguenti condizioni:

  • Hai ricevuto una notifica da Cloud Logging relativa a problemi di accesso CMEK.

  • Noti che CMEK non è abilitata per i _Default e _Required bucket di log quando crei nuovi Google Cloud progetti nella tua organizzazione o in una cartella.

  • Ricevi errori quando leggi dai bucket di log con CMEK abilitata. Gli errori visualizzati sono simili al seguente:

    ERROR: (gcloud.logging.read) FAILED_PRECONDITION: 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`
    
  • Ricevi errori quando crei o aggiorni i bucket di log con CMEK abilitata. Gli errori visualizzati sono simili al seguente:

    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>;'
    

Per determinare se questi problemi sono dovuti alla configurazione dei Controlli di servizio VPC, procedi nel seguente modo:

  1. Identifica le impostazioni di Cloud Logging per la risorsa che contiene la configurazione CMEK. Una risorsa può essere un progetto, una cartella o un'organizzazione. Se hai creato bucket di log con CMEK abilitata, seleziona la risorsa PROJECT.

    PROGETTO

    gcloud logging settings describe --project=PROJECT_ID
    

    Prima di eseguire il comando, sostituisci PROJECT_ID con l'ID progetto che contiene il bucket di log.

    FOLDER

    gcloud logging settings describe --folder=FOLDER_ID
    

    Prima di eseguire il comando, sostituisci FOLDER_ID con l'ID di the cartella.

    ORGANIZZAZIONE

    gcloud logging settings describe --organization=ORGANIZATION_ID
    

    Prima di eseguire il comando, sostituisci ORGANIZATION_ID con l'ID dell' organizzazione.

    Il comando precedente restituisce informazioni simili alle seguenti:

    kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    

    Per le organizzazioni e le cartelle, viene restituito anche il seguente campo:

    kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
    

    Il valore del campo kmsKeyName include il Google Cloud progetto che archivia la chiave.

  2. Determina se devi eseguire la migrazione dei service account:

    • Se il valore del campo kmsServiceAccountId ha il prefisso service-, non devi eseguire la migrazione del account di servizio. Per informazioni sugli errori di configurazione CMEK, consulta la sezione Risolvere i problemi relativi a CMEK di questo documento.

    • Se il valore di kmsServiceAccountId ha il prefisso cmek-, vai al passaggio successivo.

  3. Conferma che devi eseguire la migrazione dei service account disabilitando la condivisione limitata per i domini o rimuovendo Cloud Key Management Service dall'elenco dei servizi con limitazioni dei Controlli di servizio VPC.

    Se gli errori vengono risolti, per risolvere i problemi devi eseguire la migrazione delle risorse interessate a un nuovo account di servizio. Per informazioni su questi passaggi, consulta la sezione successiva.

Eseguire la migrazione dei service account CMEK

La seguente procedura descrive come modificare il account di servizio utilizzato da Cloud Logging per accedere alle chiavi Cloud Key Management Service configurate. La modifica del account di servizio risolve un problema noto relativo ai Controlli di servizio VPC e alla condivisione limitata per i domini.

  1. Identifica il loggingServiceAccountId per la tua risorsa. Una risorsa può essere un progetto, una cartella o un'organizzazione. Se hai creato bucket di log con CMEK abilitata, seleziona la risorsa PROJECT.

    PROGETTO

    gcloud logging settings describe --project=PROJECT_ID
    

    Prima di eseguire il comando, sostituisci PROJECT_ID con l'ID progetto che contiene il bucket di log.

    FOLDER

    gcloud logging settings describe --folder=FOLDER_ID
    

    Prima di eseguire il comando, sostituisci FOLDER_ID con l'ID di the cartella.

    ORGANIZZAZIONE

    gcloud logging settings describe --organization=ORGANIZATION_ID
    

    Prima di eseguire il comando, sostituisci ORGANIZATION_ID con l'ID dell' organizzazione.

    Il comando precedente restituisce informazioni simili alle seguenti:

    kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    

    Per le organizzazioni e le cartelle, viene restituito anche il seguente campo:

    kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
    

    Il valore del campo kmsKeyName include il Google Cloud progetto che archivia la chiave.

  2. Se, per la tua organizzazione o per le cartelle, hai configurato le impostazioni delle risorse predefinite per Cloud Logging con le impostazioni CMEK, procedi nel seguente modo:

    1. In the KMS_PROJECT_ID, concedi il ruolo Cloud Key Management Service CryptoKey Encrypter/Decrypter al account di servizio identificato dal campo loggingServiceAccountId.

    2. Esegui il seguente comando curl, che modifica il account di servizio Cloud Key Management Service utilizzato dalla risorsa.

      PROGETTO

      Non applicabile.

      FOLDER

      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
      

      Prima di eseguire il comando:

      • Sostituisci FOLDER_ID con l'ID della cartella.
      • Sostituisci SERVICE_ACCT_NAME con il loggingServiceAccountId identificato in precedenza.

      ORGANIZZAZIONE

      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
      

      Prima di eseguire il comando:

      • Sostituisci ORGANIZATION_ID con l'ID dell'organizzazione.
      • Sostituisci SERVICE_ACCT_NAME con il loggingServiceAccountId identificato in precedenza.

      Il risultato del comando precedente è simile al seguente:

      {
        "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. Per ogni Google Cloud progetto o cartella che contiene bucket di log esistenti abilitati con CMEK:

    1. Nel progetto o nella cartella, per ogni bucket di log abilitato con CMEK:

      1. Identifica il Google Cloud progetto che archivia la chiave Cloud Key Management Service:

        PROGETTO

        gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
        

        Prima di eseguire il comando:

        • Sostituisci PROJECT_ID con l'ID progetto che contiene il bucket di log.
        • Sostituisci LOCATION con la località del bucket di log.

        FOLDER

        gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
        

        Prima di eseguire il comando:

        • Sostituisci FOLDER_ID con l'ID della cartella.
        • Sostituisci LOCATION con la località del bucket di log.

        Il risultato del comando precedente è simile al seguente:

        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. Vai al Google Cloud progetto proprietario della chiave Cloud Key Management Service,KMS_PROJECT_ID, e concedi ilruolo Cloud Key Management Service CryptoKey Encrypter/Decrypteral account di servizio identificato dal campo loggingServiceAccountId.

    2. Per il progetto, esegui il seguente comando curl, che modifica il account di servizio Cloud Key Management Service:

      PROGETTO

      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
      

      Prima di eseguire il comando:

      • Sostituisci PROJECT_ID con l'ID progetto che contiene il bucket di log.
      • Sostituisci SERVICE_ACCT_NAME con il loggingServiceAccountId identificato in precedenza.

      FOLDER

      Non è necessaria alcuna azione, in quanto hai modificato il account di servizio Cloud Key Management Service utilizzato dalla cartella in un passaggio precedente.

      Il risultato del comando precedente è simile al seguente:

      {
        "name": ".../settings",
        "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com",
        "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"
      }
      
  4. Per ogni bucket di log con CMEK abilitata:

    1. Ruota la chiave Cloud KMS.

    2. Verifica la migrazione. La risorsa padre per il bucket di log determina il comando Google Cloud CLI da eseguire. Il padre può essere un progetto, una cartella o un'organizzazione.

      PROGETTO

      gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
      

      Prima di eseguire il comando:

      • Sostituisci PROJECT_ID con l'ID progetto che contiene il bucket di log.
      • Sostituisci LOCATION con la località del bucket di log.

      FOLDER

      gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
      

      Prima di eseguire il comando:

      • Sostituisci FOLDER_ID con l'ID della cartella.
      • Sostituisci LOCATION con la località del bucket di log.

      Per un progetto, il risultato del comando precedente è simile al seguente:

      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'
      

      Assicurati che serviceAccountId corrisponda a loggingServiceAccountId identificato in precedenza.

  5. Attendi almeno 30 minuti prima di revocare le autorizzazioni per il service account precedente. Se riscontri problemi dopo aver revocato le autorizzazioni per il account di servizio precedente, ripristina le autorizzazioni e contatta l'assistenza Google Cloud.

Risolvere i problemi relativi a CMEK

Quando configuri CMEK, il Google Cloud progetto contenente la chiave Cloud KMS viene informato dei problemi correlati. Ad esempio, gli aggiornamenti non riescono quando KMS_KEY_NAME non è valido, quando il account di servizio associato non ha il ruolo Cloud Key Management Service CryptoKey Encrypter/Decrypter richiesto, o quando l'accesso alla chiave è disabilitato.

Dopo aver configurato CMEK, si verifica almeno una delle seguenti condizioni:

  • Hai ricevuto una notifica da Cloud Logging relativa a problemi di accesso CMEK.

  • Noti che CMEK non è abilitata per i _Default e _Required bucket di log quando crei nuovi Google Cloud progetti nella tua organizzazione o in una cartella.

  • Ricevi errori quando leggi dai bucket di log con CMEK abilitata o se tenti di creare o aggiornare i bucket di log.

La notifica fornisce informazioni sull'errore e contiene le azioni che puoi intraprendere per mitigare il problema:

Errore Suggerimento
Autorizzazione alla chiave di crittografia negata

Il account di servizio Logging associato al tuo Google Cloud progetto non dispone delle autorizzazioni IAM sufficienti per operare sulla chiave Cloud KMS specificata. Segui le istruzioni riportate nell'errore o consulta i seguenti documenti:

Chiave di crittografia disabilitata La chiave Cloud KMS specificata è stata disabilitata. Segui le istruzioni riportate nell'errore per riabilitare la chiave.
Chiave di crittografia eliminata

La chiave Cloud KMS specificata è stata eliminata. Segui le istruzioni o consulta i seguenti documenti:

Identificare il progetto che contiene la chiave Cloud KMS

Per identificare l'ID del Google Cloud progetto che contiene la chiave di crittografia utilizzata da un bucket di log, una cartella o un'organizzazione:

PROGETTO

gcloud logging settings describe --project=PROJECT_ID

Prima di eseguire il comando, sostituisci PROJECT_ID con l'ID progetto che contiene il bucket di log.

FOLDER

gcloud logging settings describe --folder=FOLDER_ID

Prima di eseguire il comando, sostituisci FOLDER_ID con l'ID di the cartella.

ORGANIZZAZIONE

gcloud logging settings describe --organization=ORGANIZATION_ID

Prima di eseguire il comando, sostituisci ORGANIZATION_ID con l'ID dell' organizzazione.

Il comando precedente restituisce informazioni simili alle seguenti:

kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com

Per le organizzazioni e le cartelle, viene restituito anche il seguente campo:

kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY

Il valore del campo kmsKeyName include il Google Cloud progetto che archivia la chiave.

Verificare l'usabilità della chiave

Per verificare l'usabilità della chiave, esegui il seguente comando per elencare tutte le chiavi:

gcloud kms keys list \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING

Questo comando restituisce informazioni su ogni chiave in formato tabulare. La prima riga dell'output è un elenco di nomi di colonne:

NAME PURPOSE ...

Verifica che la chiave Cloud KMS sia elencata nell'output del comando come ENABLED e che lo scopo della chiave sia la crittografia simmetrica: la colonna PURPOSE deve contenere ENCRYPT_DECRYPT e la colonna PRIMARY_STATE deve contenere ENABLED.

Se necessario, crea una nuova chiave.

Verificare la configurazione delle autorizzazioni

I service account associati alle impostazioni CMEK dell'organizzazione devono avere il ruolo Cloud KMS CryptoKey Encrypter/Decrypter per la chiave configurata.

Per elencare la policy IAM della chiave, esegui il seguente comando:

gcloud kms keys get-iam-policy KMS_KEY_NAME

Se necessario, aggiungi alla chiave il account di servizio che contiene il ruolo Cloud KMS CryptoKey Encrypter/Decrypter.