Chiavi di crittografia gestite dal cliente (CMEK)

Quando utilizzi Managed Service for Apache Spark, i dati del cluster e del job vengono archiviati su dischi permanenti associati alle VM Compute Engine nel cluster e in un bucket di staging Cloud Storage. Per impostazione predefinita, i dati di questo disco permanente e del bucket vengono criptati utilizzando una chiave di crittografia dei dati (DEK) generata da Google e una chiave di crittografia della chiave (KEK).

Se vuoi controllare e gestire la chiave di crittografia della chiave (KEK), puoi utilizzare le chiavi di crittografia gestite dal cliente (CMEK) (Google continua a controllare la chiave di crittografia dei dati (DEK)). Per saperne di più sulle chiavi di crittografia dei dati di Google, consulta Crittografia at-rest.

Crittografia dei dati del cluster CMEK

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

  • Dati sui dischi permanenti collegati alle VM del cluster Managed Service per Apache Spark
  • 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 nel bucket di staging del cluster Managed Service for Apache Spark

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Installa Google Cloud CLI.

  6. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  7. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Installa Google Cloud CLI.

  12. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  13. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init

Crea chiavi

Per proteggere le risorse di Managed Service for Apache Spark con CMEK, puoi automatizzare la creazione delle chiavi o crearle manualmente.

Creazione automatica delle chiavi

Utilizza Autokey per automatizzare il provisioning e l'assegnazione di CMEK. Autokey genera chiavi e chiavi automatizzate on demand quando vengono create le risorse. Gli agenti di servizio utilizzano le chiavi nelle operazioni di crittografia e decrittografia. Se necessario, Autokey crea gli agenti e concede loro i ruoli IAM (Identity and Access Management) richiesti. Per saperne di più, consulta la panoramica di Autokey.

Creazione manuale della chiave

Per creare manualmente le chiavi per la crittografia CMEK dei dati del cluster:

  1. Crea una o più chiavi utilizzando Cloud KMS. 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
    
    La chiave (CMEK) deve trovarsi nella stessa posizione della risorsa criptata. Ad esempio, la chiave CMEK utilizzata per criptare una risorsa nella regione us-central1 deve trovarsi anche nella regione us-central1.

  2. Per assicurarti che ciascuno dei seguenti service account, service account agente di servizio Compute Engine, service account agente di servizio Cloud Storage e service account agente di servizio Managed Service for Apache Spark, disponga delle autorizzazioni necessarie per proteggere le risorse utilizzando le chiavi Cloud KMS, chiedi all'amministratore di concedere il ruolo IAM Autore crittografia/decrittografia CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a ciascuno dei seguenti service account: service account agente di servizio Compute Engine, service account agente di servizio Cloud Storage e service account agente di servizio Managed Service for Apache Spark nel tuo progetto.

    Esempio di assegnazione del ruolo Cloud KMS CryptoKey Encrypter/Decrypter al service account dell'agente di servizio Managed Service for Apache Spark utilizzando Google Cloud CLI:

    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 Google Cloud progetto che contiene la chiave Cloud KMS.

    PROJECT_NUMBER: il numero di progetto (non l'ID progetto) del tuo progetto Google Cloud che esegue le risorse di Managed Service per Apache Spark.

  3. Se il ruolo service agent Managed Service per Apache Spark non è collegato al service account service agent Managed Service per Apache Spark, aggiungi l'autorizzazione serviceusage.services.use a un ruolo personalizzato collegato account di servizioice agent Managed Service per Apache Spark.

Crea un cluster con CMEK

Trasferisci l'ID risorsa della chiave quando crei il cluster Managed Service per Apache Spark.

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 gli argomenti del job utilizzando la tua chiave, passa l'ID risorsa della chiave al flag --kms-key quando crei il cluster. Consulta [Cluster.EncryptionConfig.kmsKey](/dataproc/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) per un elenco di tipi di job e 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 chiave con il comando gcloud CLI dataproc clusters describe. L'ID risorsa chiave è impostato su gcePdKmsKeyName e kmsKey per utilizzare la chiave con la crittografia del disco permanente del cluster e dei dati degli argomenti 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
    ...
        
  • Per criptare i metadati del cluster, il driver dei job e altri dati di output scritti nel bucket gestione temporanea Managed Service for Apache Spark 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 della 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 dei disco permanente delle VM del cluster e gli argomenti dei 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 chiave con il comando gcloud CLI dataproc clusters describe. L'ID risorsa chiave è impostato su gcePdKmsKeyName e kmsKey per utilizzare la chiave con la crittografia del disco permanente del cluster e dei dati degli argomenti 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
    ...
        
  • Per criptare i metadati del cluster, il driver dei job e altri dati di output scritti nel bucket gestione temporanea Managed Service for Apache Spark 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
          

Utilizzare CMEK con i dati del modello di workflow

I dati degli argomenti del job del modello di flusso di lavoro di Managed Service for Apache Spark, 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 modello di flusso di lavoro Managed Service for Apache Spark. Consulta WorkflowTemplate.EncryptionConfig.kmsKey per un elenco di tipi di job e argomenti del modello di flusso di lavoro criptati utilizzando CMEK quando questa funzionalità è abilitata.

  1. Crea una chiave utilizzando Cloud KMS. Il nome della risorsa della chiave, che utilizzerai nei passaggi successivi, è strutturato come segue:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. Per consentire agli account di servizio Managed Service per Apache Spark di utilizzare la tua chiave:

    1. Assegna il ruolo Cloud KMS CryptoKey Encrypter/Decrypter al service account dell'agente di servizio Managed Service for Apache Spark. 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 di Managed Service per Apache Spark.

      PROJECT_NUMBER: il numero di progetto (non l'ID progetto) del tuo progetto Google Cloud che esegue le risorse di Managed Service per Apache Spark.

    2. Abilita l'API Cloud KMS nel progetto che esegue le risorse di Managed Service per Apache Spark.

    3. Se il ruolo service agent di Managed Service per Apache Spark non è collegato al service account service agent di Managed Service per Apache Spark, aggiungi l'autorizzazione serviceusage.services.use al ruolo personalizzato collegato al account di servizio agent di Managed Service per Apache Spark. Se il ruolo di service agent di Managed Service per Apache Spark è associato al account di servizio agent di Managed Service per Apache Spark, puoi ignorare questo passaggio.

  3. Puoi utilizzare gcloud 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 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) consente di proteggere i dati di Managed Service for Apache Spark utilizzando chiavi gestite da un partner di gestione delle chiavi esterne supportato. I passaggi da seguire per utilizzare Cloud EKM in Managed Service for Apache Spark sono gli stessi che utilizzi per configurare le chiavi CMEK, con la seguente differenza: la chiave rimanda 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 Cloud EKM e il sistema esterno. Se utilizzi l'API REST o la console Google Cloud , gli errori vengono registrati in Cloud Logging. Puoi esaminare gli errori del cluster non riuscito dalla scheda Visualizza log.