Configurazione della crittografia con chiavi di crittografia gestite dal cliente

Cloud Composer 1 | Cloud Composer 2

Questa pagina descrive come utilizzare le chiavi di crittografia gestite dal cliente (CMEK) per proteggere gli ambienti Cloud Composer. Le chiavi di crittografia gestite dal cliente vengono utilizzate per criptare/decriptare i dati utente nell'ambiente.

Prima di iniziare

  • Puoi configurare CMEK solo quando crei un ambiente. Non è possibile abilitare CMEK per un ambiente esistente.

  • Cloud Composer supporta la crittografia CMEK utilizzando chiavi archiviate in gestori di chiavi esterni.

  • Devi creare una chiave CMEK nella stessa regione in cui si trovano i tuoi ambienti. Non puoi utilizzare chiavi multiregionali o globali.

  • Se vuoi che il tuo ambiente venga eseguito all'interno di un perimetro Controlli di servizio VPC, devi aggiungere l'API Cloud Key Management Service e l'API Artifact Registry al perimetro.

  • Abilita l'API Artifact Registry.

    Console

    Attiva l'API Artifact Registry.

    Abilita l'API

    gcloud

    Attiva l'API Artifact Registry.

    gcloud services enable artifactregistry.googleapis.com

Informazioni utente non protette con la crittografia CMEK

Cloud Monitoring non supporta la crittografia CMEK. Il nome del tuo ambiente e i nomi dei DAG sono archiviati nel database di Monitoring in forma criptata utilizzando le chiavi di crittografia gestite da Google.

Cloud Composer archivia le seguenti informazioni protette con chiavi gestite da Google, non gestite dal cliente:

  • Nome ambiente
  • Override della configurazione Airflow
  • Variabili di ambiente
  • Descrizioni degli intervalli IP consentiti
  • Intervalli IP
  • Etichette
  • I nomi di alcuni parametri archiviati da Cloud Composer possono includere una sottostringa del nome dell'ambiente.

Utilizza una chiave di crittografia gestita dal cliente per il tuo ambiente

Passaggio 1: Crea una chiave di crittografia gestita dal cliente

Segui i passaggi descritti in Creazione di chiavi di crittografia simmetriche per creare una chiave nell'area geografica in cui si trova l'ambiente.

Passaggio 2: Concedi ruoli agli agenti di servizio

Console

Ignora questo passaggio. concedi le autorizzazioni agli agenti di servizio quando specifichi una chiave per il tuo ambiente.

gcloud

I seguenti agenti di servizio devono avere il ruolo Autore crittografia/decriptazione CryptoKey Cloud KMS sulla chiave che utilizzi per il tuo ambiente.

Sostituisci PROJECT_NUMBER con il numero del tuo progetto.

Nome dell'agente di servizio Email dell'account di servizio Nome servizio API
Agente di servizio Cloud Composer service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com composer.googleapis.com
Agente di servizio Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com artifactregistry.googleapis.com
Agente di servizio Kubernetes Engine service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com container.googleapis.com
Agente di servizio Pub/Sub service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com pubsub.googleapis.com
Agente di servizio Compute Engine service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com compute.googleapis.com
Agente di servizio Cloud Storage service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com Concedi le autorizzazioni di crittografia/decrittografia con gsutil kms authorize
  1. (Se necessario) Se alcuni di questi account di servizio non sono presenti nel progetto, significa che non è stata ancora creata un'identità per questo servizio. Questo può accadere, ad esempio, se non hai ancora creato ambienti Cloud Composer nel tuo progetto.

    Per aggiungere questi account di servizio, crea identità per i servizi elencati con il seguente comando:

    gcloud beta services identity create \
      --service=API_SERVICE_NAME
    

    Sostituisci API_SERVICE_NAME con il nome del servizio API di un servizio che non ha un account di servizio nel tuo progetto.

    Esempio:

    gcloud beta services identity create \
      --service=composer.googleapis.com
    
  2. Concedi le autorizzazioni agli agenti di servizio:

    1. Concedi il ruolo all'agente di servizio Cloud Composer:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    2. Concedi il ruolo all'agente di servizio Artifact Registry:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    3. Concedi il ruolo all'agente di servizio GKE:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    4. Concedi il ruolo all'agente di servizio Pub/Sub:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    5. Concedi il ruolo all'agente di servizio Compute Engine:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    6. Concedi le autorizzazioni di crittografia/decrittografia all'agente di servizio Cloud Storage.

      gsutil kms authorize -k \
        projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      

    Sostituisci:

    • PROJECT_ID con l'ID progetto.
    • KEY_PROJECT_ID con l'ID del progetto in cui è archiviata la chiave gestita dal cliente. Se utilizzi una chiave di un altro progetto, questo valore è diverso dall'ID del progetto. Se utilizzi una chiave dello stesso progetto, questo valore è l'ID del progetto.
    • PROJECT_NUMBER con il numero del progetto.
    • KEY_LOCATION con la località della chiave gestita dal cliente. Questa località deve corrispondere a quella del tuo ambiente.
    • KEY_NAME con il nome della chiave gestita dal cliente.
    • KEY_RING_NAME con il keyring in cui è archiviata la chiave gestita dal cliente.

    Per ottenere questi valori, puoi eseguire i comandi gcloud projects describe, gcloud kms keyrings list e gcloud kms keys describe.

Passaggio 3: Crea un ambiente con CMEK

Dopo aver creato una chiave di crittografia gestita dal cliente, puoi utilizzarla per creare ambienti Cloud Composer.

Console

Quando crei un ambiente:

  1. Espandi la sezione Networking, override delle configurazioni di Airflow e funzionalità aggiuntive. Nella sezione Crittografia dei dati, seleziona Chiave di crittografia gestita dal cliente (CMEK).

  2. Nell'elenco a discesa Seleziona una chiave gestita dal cliente, seleziona la tua chiave.

  3. Se è necessaria una configurazione aggiuntiva, viene visualizzato un messaggio per informarti. In questo caso:

    1. Fai clic su Apri procedura guidata.

    2. Nella finestra di dialogo Prepara la chiave CMEK per l'utilizzo in Cloud Composer, visualizza l'elenco degli agenti di servizio che devono avere il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS sulla chiave.

    3. Per concedere le autorizzazioni e i ruoli richiesti, fai clic su Concedi.

gcloud

L'argomento --kms-key specifica una chiave di crittografia gestita dal cliente per il tuo ambiente.

Per saperne di più sulla creazione di ambienti, consulta Creare ambienti. Ad esempio, potresti voler specificare altri parametri per il tuo ambiente.

gcloud composer environments create ENVIRONMENT_NAME \
  --location LOCATION \
  --image-version IMAGE_VERSION \
  --kms-key projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Sostituisci:

  • ENVIRONMENT_NAME con il nome dell'ambiente.
  • IMAGE_VERSION con il nome dell'immagine Cloud Composer.
  • KEY_PROJECT_ID con l'ID del progetto in cui si trova la chiave. Se utilizzi una chiave di un altro progetto, questo valore è diverso dall'ID del progetto. Se utilizzi una chiave dello stesso progetto, questo valore è l'ID del progetto.
  • LOCATION con la regione in cui si trova l'ambiente.
  • KEY_LOCATION con la località della chiave gestita dal cliente. Questa località deve essere uguale a quella dell'ambiente.
  • KEY_NAME con il nome della chiave gestita dal cliente.
  • KEY_RING_NAME con il keyring in cui è archiviata la chiave gestita dal cliente.

Esempio:

gcloud composer environments create example-environment \
  --location us-central1 \
  --image-version composer-2.5.2-airflow-2.6.3 \
  --kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key

Visualizza la configurazione di crittografia dell'ambiente

Puoi visualizzare la configurazione della crittografia per un ambiente esistente:

Console

  1. Nella console Google Cloud, vai alla pagina Ambienti.

    Vai ad Ambienti

  2. Nell'elenco degli ambienti, fai clic sul nome del tuo ambiente. Viene visualizzata la pagina Dettagli ambiente.

  3. Vai alla scheda Configurazione dell'ambiente.

  4. I dettagli sulla crittografia sono elencati nella voce Chiave di crittografia dei dati.

gcloud

Esegui questo comando gcloud per visualizzare la configurazione della crittografia

gcloud composer environments describe \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --format="value(config.encryptionConfig)"

Sostituisci:

  • ENVIRONMENT_NAME con il nome dell'ambiente.
  • LOCATION con la regione in cui si trova l'ambiente.

Esempio:

gcloud composer environments describe \
  example-environment \
  --location us-central1 \
  --format="value(config.encryptionConfig)"

Utilizza CMEK per i log di Cloud Composer

Cloud Logging supporta la crittografia dell'archiviazione dei log con chiavi CMEK. Ti consigliamo di utilizzare la procedura CMEK standard per criptare i log con le chiavi CMEK.

Per criptare i log con le chiavi CMEK, segui le istruzioni descritte in Gestire le chiavi che proteggono i dati di archiviazione di Logging.

Reindirizza i log di Cloud Composer a un bucket Cloud Storage criptato con CMEK

Se prevedi che i log contengano dati sensibili, puoi reindirizzare i log di Cloud Composer a un bucket Cloud Storage criptato con CMEK utilizzando il router dei log. In questo modo i log non verranno inviati a Monitoring.

Se hai bisogno dell'assistenza dell'assistenza clienti Google Cloud, potresti dover concedere agli ingegneri dell'assistenza Google l'accesso ai log di Cloud Composer archiviati in Cloud Storage.

gcloud

  1. Crea un nuovo bucket Cloud Storage per archiviare i log.

    gsutil mb -l LOCATION gs://BUCKET_NAME
    

    Sostituisci:

    • LOCATION con la regione in cui si trova l'ambiente.
    • BUCKET_NAME con il nome del bucket.

    Esempio:

    gsutil mb -l us-central1 gs://composer-logs-us-central1-example-environment
    
  2. Cripta il bucket con la tua chiave CMEK.

    gsutil kms encryption \
      -k projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME \
      gs://BUCKET_NAME
    

    Sostituisci:

    • KEY_PROJECT_ID con l'ID del progetto in cui si trova la chiave. Se utilizzi una chiave di un altro progetto, questo valore è diverso dall'ID del progetto. Se utilizzi una chiave dello stesso progetto, questo valore è l'ID del progetto.
    • KEY_LOCATION con la località della chiave gestita dal cliente. Questa località deve essere uguale a quella dell'ambiente.
    • KEY_RING_NAME con il keyring in cui è archiviata la chiave gestita dal cliente.
    • KEY_NAME con il nome della chiave gestita dal cliente.
    • BUCKET_NAME con il nome del bucket.

    Esempio:

    gsutil kms encryption \
      -k projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key \
      gs://composer-logs-us-central1-example-environment
    
  3. Crea un nuovo sink di log.

    gcloud logging sinks create \
    composer-log-sink-ENVIRONMENT_NAME \
    storage.googleapis.com/BUCKET_NAME \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    Sostituisci:

    • ENVIRONMENT_NAME con il nome dell'ambiente.
    • LOCATION con la regione in cui si trova l'ambiente.
    • BUCKET_NAME con il nome del bucket.

    Esempio:

    gcloud logging sinks create \
    composer-log-sink-example-environment \
    storage.googleapis.com/composer-logs-us-central1-example-environment \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=example-environment AND resource.labels.location=us-central1"
    
  4. Concedi il ruolo Creatore oggetti Storage all'account di servizio per questo bucket. L'account di servizio viene mostrato nel risultato del comando precedente.

    gcloud projects add-iam-policy-binding \
      PROJECT_ID \
      --member="serviceAccount:LOGGING_SERVICE_AGENT" \
      --role="roles/storage.objectCreator" \
      --condition=None
    

    Sostituisci:

    • PROJECT_ID con l'ID progetto.
    • LOGGING_SERVICE_AGENT con l'account dell'agente di servizio Logging per questo bucket. Il nome di questo account è ottenuto nel passaggio precedente.

    Esempio:

    gcloud projects add-iam-policy-binding \
      example-project \
      --member="serviceAccount:example-sa@gcp-sa-logging.iam.gserviceaccount.com" \
      --role="roles/storage.objectCreator" \
      --condition=None
    
  5. Escludi i log per il nuovo ambiente da Monitoring.

    gcloud beta logging sinks update _Default \
      --add-exclusion name=ENVIRONMENT_NAME-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    Sostituisci:

    • ENVIRONMENT_NAME con il nome dell'ambiente.
    • LOCATION con la regione in cui si trova l'ambiente.

    Esempio:

    gcloud beta logging sinks update _Default \
      --add-exclusion name=example-environment-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=example-environment AND resource.labels.location=us-central1"
    
  6. Aggiungi la crittografia CMEK a livello di organizzazione al router dei log.

    gcloud logging cmek-settings describe \
      --organization=ORGANIZATION_ID
    
    gcloud kms keys add-iam-policy-binding \
          --project=KEY_PROJECT_ID \
          --member LOGGING_SERVICE_AGENT \
          --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
          --location=KEY_LOCATION \
          --keyring=KEY_RING_NAME \
          KEY_NAME
    
    gcloud logging cmek-settings update \
      --organization=ORGANIZATION_ID \
      --kms-project=KEY_PROJECT_ID \
      --kms-keyring=KEY_RING_NAME \
      --kms-location=KEY_LOCATION \
      --kms-key-name=KEY_NAME
    

    Sostituisci:

    • ORGANIZATION_ID con il tuo ID organizzazione.
    • KEY_PROJECT_ID con l'ID del progetto in cui si trova la chiave. Se utilizzi una chiave di un altro progetto, questo valore è diverso dall'ID del progetto. Se utilizzi una chiave dello stesso progetto, questo valore è l'ID del progetto.
    • KEY_RING_NAME con il keyring in cui è archiviata la chiave gestita dal cliente.
    • KEY_LOCATION con la località della chiave gestita dal cliente. Questa località deve essere uguale a quella dell'ambiente.
    • KEY_NAME con il nome della chiave gestita dal cliente.

Rotazione della chiave CMEK per Cloud Composer

Dopo aver configurato la crittografia nel tuo ambiente utilizzando le chiavi CMEK, ti consigliamo anche di ruotare queste chiavi regolarmente, come descritto nella documentazione di KMS.

Quando ruoti una chiave CMEK, i dati criptati con le versioni precedenti della chiave non vengono criptati automaticamente con la nuova versione della chiave. Qui puoi scoprire di più sulla ricrittografia dei dati. Nello specifico, ciò vale per:

  • oggetti archiviati nel bucket dell'ambiente

  • dati archiviati nel database di metadati Airflow

  • immagini container archiviate nei repository Artifact Registry

e tutti gli altri oggetti dati criptati con CMEK all'interno dell'ambiente Cloud Composer.

Passaggi successivi