Chiavi di crittografia gestite dal cliente (CMEK)

Quando utilizzi Dataproc, i dati del cluster e dei job vengono archiviati su dischi permanenti associati alle VM di Compute Engine nel cluster e in un bucket di staging Cloud Storage. Questi dati del disco permanente e del bucket vengono criptati utilizzando una chiave di crittografia dei dati (DEK) e una chiave di crittografia della chiave (KEK) generate da Google.

La funzionalità CMEK consente di creare, utilizzare e revocare la chiave di crittografia della chiave (KEK). Google controlla ancora la chiave di crittografia dei dati (DEK). Per ulteriori informazioni sulle chiavi di crittografia dei dati di Google, consulta Crittografia at-rest.

Utilizzare CMEK con i dati del cluster

Puoi utilizzare le chiavi di crittografia gestite dal cliente (CMEK) per criptare i seguenti dati del cluster:

  • Dati sui dischi permanenti collegati alle VM nel cluster Dataproc
  • Dati degli argomenti del job inviati al cluster, ad esempio una stringa di query inviata con un job Spark SQL
  • Metadati del cluster, output del driver del job e altri dati scritti in un bucket di staging Dataproc che crei

Per utilizzare CMEK con la crittografia dei dati del cluster:

  1. Crea una o più chiavi utilizzando Cloud Key Management Service. Il nome della risorsa, chiamato anche ID risorsa di una chiave, che utilizzerai nei passaggi successivi, è strutturato nel seguente modo:
    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
  2. Assegna i seguenti ruoli ai seguenti service account:

    1. Segui il punto 5 in Compute Engine→Protezione delle risorse con le chiavi Cloud KMS→Prima di iniziare per assegnare il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS all'account di servizio agente di servizio Compute Engine.
    2. Assegna il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS all'account di servizio agente di servizio Cloud Storage.

    3. Assegna il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS all'account di servizio agente di servizio Dataproc. Puoi utilizzare Google Cloud CLI per assegnare il ruolo:

        gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
        --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
      

      Sostituisci quanto segue:

      KMS_PROJECT_ID: l'ID del tuo progetto Google Cloud che esegue Cloud KMS. Questo progetto può anche essere quello che esegue le risorse Dataproc.

      PROJECT_NUMBER: il numero di progetto (non l'ID progetto) del tuo progetto Google Cloud che esegue le risorse Dataproc.

    4. Abilita l'API Cloud KMS sul progetto che esegue le risorse Dataproc.

    5. Se il ruolo Agente di servizio Dataproc non è collegato all'account di servizio Agente di servizio Dataproc, aggiungi l'autorizzazione serviceusage.services.use al ruolo personalizzato collegato all'account di servizio Agente di servizio Dataproc. Se il ruolo Agente di servizio Dataproc è associato all'account di servizio Agente di servizio Dataproc, puoi ignorare questo passaggio.

  3. Trasferisci l'ID risorsa della chiave a Google Cloud CLI o all'API Dataproc da utilizzare con la crittografia dei dati del cluster.

    Interfaccia a riga di comando gcloud

    • Per criptare i dati del disco permanente del cluster utilizzando la tua chiave, passa l'ID risorsa della chiave al flag --gce-pd-kms-key quando crei il cluster.
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --gce-pd-kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \
          other arguments ...
      

      Puoi verificare l'impostazione della chiave dallo strumento a riga di comando gcloud.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Snippet dell'output del comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
      ...
      
    • Per criptare i dati del disco permanente del cluster e i dati degli argomenti del job utilizzando la tua chiave, trasmetti l'ID risorsa della chiave al flag --kms-key quando crei il cluster. Consulta Cluster.EncryptionConfig.kmsKey per un elenco dei tipi di job e degli argomenti criptati con il flag --kms-key.
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \
          other arguments ...
        

      Puoi verificare le impostazioni delle chiavi con gcloud CLI dataproc clusters describe. L'ID risorsa chiave è impostato su gcePdKmsKeyName e kmsKey per utilizzare la chiave con la crittografia dei dati degli argomenti del disco permanente del cluster e del job.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
        

      Snippet dell'output del comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/key-KEY_RING_NAME-name/cryptoKeys/KEY_NAME
      ...
      

    • Per criptare i metadati del cluster, il driver dei job e altri dati di output scritti nel bucket gestione temporanea Dataproc in Cloud Storage:
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --bucket=CMEK_BUCKET_NAME \
          other arguments ...
          

      Puoi anche passare bucket abilitati per CMEK al comando `gcloud dataproc jobs submit` se il job accetta argomenti bucket, come mostrato nel seguente esempio `cmek-bucket`:

      gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \
          --region=region \
          --cluster=cluster-name \
          -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
        

    API REST

    • Per criptare i dati del disco permanente delle VM del cluster utilizzando la tua chiave, includi il campo ClusterConfig.EncryptionConfig.gcePdKmsKeyName come parte di una richiesta cluster.create.

      Puoi verificare l'impostazione della chiave con il comando gcloud CLI dataproc clusters describe.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Snippet dell'output del comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      ...
      
    • Per criptare i dati del disco permanente delle VM del cluster e gli argomenti del job utilizzando la tua chiave, includi il campo Cluster.EncryptionConfig.kmsKey come parte di una richiesta cluster.create. Consulta Cluster.EncryptionConfig.kmsKey per un elenco di tipi di job e argomenti criptati con il campo --kms-key.

      Puoi verificare le impostazioni delle chiavi con gcloud CLI dataproc clusters describe. L'ID risorsa chiave è impostato su gcePdKmsKeyName e kmsKey per utilizzare la chiave con la crittografia dei dati degli argomenti del disco permanente del cluster e del job.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Snippet dell'output del comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      
    • To encrypt cluster metadata, job driver, and other output data written to your Dataproc staging bucket in Cloud Storage:
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --bucket=CMEK_BUCKET_NAMEt \
          other arguments ...
      

      Puoi anche passare bucket abilitati per CMEK al comando `gcloud dataproc jobs submit` se il job accetta argomenti bucket, come mostrato nel seguente esempio `cmek-bucket`:

      gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \
          --region=region \
          --cluster=cluster-name \
          -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
        

Utilizzare CMEK con i dati del modello di workflow

I dati degli argomenti del job del modello di workflow Dataproc, come la stringa di query di un job Spark SQL, possono essere criptati utilizzando CMEK. Segui i passaggi 1, 2 e 3 di questa sezione per utilizzare CMEK con il tuo modello di workflow Dataproc. Consulta WorkflowTemplate.EncryptionConfig.kmsKey per un elenco di tipi di job e argomenti del modello di workflow criptati utilizzando CMEK quando questa funzionalità è abilitata.

  1. Crea una chiave utilizzando Cloud Key Management Service (Cloud KMS). Il nome risorsa della chiave, che utilizzerai nei passaggi successivi, viene creato nel seguente modo:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. Per consentire agli account di servizio Dataproc di utilizzare la chiave:

    1. Assegna il ruolo Cloud KMS CryptoKey Encrypter/Decrypter all'account di servizio dell'agente di servizio Dataproc. Puoi utilizzare gcloud CLI per assegnare il ruolo:

       gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
       --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter
      

      Sostituisci quanto segue:

      KMS_PROJECT_ID: l'ID del tuo progetto Google Cloud che esegue Cloud KMS. Questo progetto può anche essere quello che esegue le risorse Dataproc.

      PROJECT_NUMBER: il numero di progetto (non l'ID progetto) del tuo progetto Google Cloud che esegue le risorse Dataproc.

    2. Abilita l'API Cloud KMS sul progetto che esegue le risorse Dataproc.

    3. Se il ruolo Agente di servizio Dataproc non è collegato all'account di servizio Agente di servizio Dataproc, aggiungi l'autorizzazione serviceusage.services.use al ruolo personalizzato collegato all'account di servizio Agente di servizio Dataproc. Se il ruolo Agente di servizio Dataproc è collegato all'account di servizio Agente di servizio Dataproc, puoi ignorare questo passaggio.

  3. Puoi utilizzare Google Cloud CLI o l'API Dataproc per impostare la chiave creata nel passaggio 1 in un flusso di lavoro. Una volta impostata la chiave in un workflow, tutti gli argomenti e le query del job del workflow vengono criptati utilizzando la chiave per qualsiasi tipo di job e gli argomenti elencati in WorkflowTemplate.EncryptionConfig.kmsKey.

    Interfaccia a riga di comando gcloud

    Passa l'ID risorsa della chiave al flag --kms-key quando crei il modello di workflow con il comando gcloud dataproc workflow-templates create.

    Esempio:

    gcloud dataproc workflow-templates create my-template-name \
        --region=region \
        --kms-key='projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name' \
        other arguments ...
    
    Puoi verificare l'impostazione della chiave dallo strumento a riga di comando gcloud.
    gcloud dataproc workflow-templates describe TEMPLATE_NAME \
        --region=REGION
    
    ...
    id: my-template-name
    encryptionConfig:
    kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
    

    API REST

    Utilizza WorkflowTemplate.EncryptionConfig.kmsKey nell'ambito di una richiesta workflowTemplates.create.

    Puoi verificare l'impostazione della chiave inviando una richiesta workflowTemplates.get. Il file JSON restituito contiene gli elenchi di kmsKey:

    ...
    "id": "my-template-name",
    "encryptionConfig": {
      "kmsKey": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name"
    },
    

Cloud External Key Manager

Cloud External Key Manager (Cloud EKM) (EKM) consente di proteggere i dati di Dataproc utilizzando chiavi gestite da un partner di gestione delle chiavi esterne supportato. I passaggi da seguire per utilizzare EKM in Dataproc sono gli stessi di quelli utilizzati per configurare le chiavi CMEK, con la seguente differenza: la chiave punta a un URI per la chiave gestita esternamente (vedi Panoramica di Cloud EKM).

Errori Cloud EKM

Quando utilizzi Cloud EKM, un tentativo di creare un cluster può non riuscire a causa di errori associati agli input, a Cloud EKM, al sistema del partner di gestione delle chiavi esterne o alle comunicazioni tra EKM e il sistema esterno. Se utilizzi l'API REST o la console Google Cloud , gli errori vengono registrati in Logging. Puoi esaminare gli errori del cluster non riuscito dalla scheda Visualizza log.