Utilizzare il fornitore di credenziali Secret Manager

Secret Manager può proteggere i tuoi dati sensibili, come chiavi API, password e certificati. Puoi utilizzarlo per gestire, accedere e controllare i tuoi secret in Google Cloud.

Puoi configurare un cluster o un job Dataproc per utilizzare un secret di Secret Manager utilizzando il provider di credenziali Secret Manager.

Disponibilità

Questa funzionalità è disponibile per l'utilizzo con i cluster Dataproc creati con le versioni immagine 2.0.97+, 2.1.41+, 2.2.6+ o versioni principali successive delle versioni immagine di Dataproc.

Terminologia

La tabella seguente descrive i termini utilizzati in questo documento.

Termine Descrizione
Secret Un secret di Secret Manager è un oggetto di progetto globale che contiene una raccolta di metadati e versioni del secret. Puoi archiviare, gestire e accedere ai secret come blob binari o stringhe di testo.
Credential In Hadoop e in altre applicazioni ospitate da Dataproc, una credenziale è costituita da un nome (ID) e da un valore (password). Un ID credenziale e un valore corrispondono a un ID secret e a un valore secret (versione del secret) di Secret Manager.

Utilizzo

Puoi configurare Hadoop e altri componenti OSS per funzionare con Secret Manager impostando le seguenti proprietà quando crei un cluster Dataproc o invii un job.

  • Provider path : la proprietà del percorso del provider, hadoop.security.credential.provider.path, è un elenco separato da virgole di uno o più URI del provider di credenziali attraversati per risolvere una credenziale.

    --properties=hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    
    • scheme nel percorso del fornitore indica il tipo di fornitore di credenziali. Gli schemi Hadoop includono jceks://, user://,localjceks://. Utilizza lo schema gsm:// per cercare le credenziali in Secret Manager.
  • Operatore punto sostitutivo : il servizio Secret Manager non consente i punti (.) nei nomi dei secret. Tuttavia, alcuni componenti software open source (OSS) utilizzano i punti nelle chiavi delle credenziali. Per risolvere questa limitazione, attiva questa proprietà per sostituire i punti (.) con i trattini (-) nei nomi delle credenziali. In questo modo, le credenziali OSS con punti nei nomi possono essere archiviate e recuperate correttamente da Secret Manager.

    Ad esempio, se una chiave delle credenziali OSS è a.b.c, devi modificarla in a-b-c quando la memorizzi in Secret Manager.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

    Questa è una proprietà facoltativa. Per impostazione predefinita, il valore è false. Per le chiavi delle credenziali che non contengono l'operatore punto (.) nel nome della credenziale, questa proprietà può essere ignorata in sicurezza.

  • Versione secret : i secret in Secret Manager possono avere più versioni (valori). Utilizza questa proprietà per accedere a una versione specifica del secret per un accesso stabile negli ambienti di produzione.

    --properties=hadoop.security.credstore.google-secret-manager.secret-version=1
    

    Questa è una proprietà facoltativa. Per impostazione predefinita, Secret Manager accede alla versione LATEST, che viene risolta nel valore più recente del secret in fase di runtime. Se il tuo caso d'uso prevede di accedere sempre alla versione LATEST di un secret, questa proprietà può essere ignorata in sicurezza.

Crea un cluster Dataproc con il fornitore di credenziali Secret Manager

  1. Esegui questo comando localmente o in Cloud Shell per creare un cluster Dataproc con le proprietà richieste.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

Note:

  • CLUSTER_NAME: il nome del nuovo cluster.
  • REGION: una regione di Compute Engine in cui verrà eseguito il carico di lavoro.
  • PROJECT_ID: il tuo ID progetto è elencato nella sezione Informazioni progetto della dashboard della consoleGoogle Cloud .

Invia un job Dataproc con il provider di credenziali Secret Manager

  1. Esegui questo comando in locale o in Cloud Shell per inviare un job Dataproc con le proprietà richieste.

    gcloud dataproc jobs submit CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed... \
        -- job-args
    

Note:

Utilizzare Secret Manager con Hive Metastore

La proprietà Hive Metastore, javax.jdo.option.ConnectionPassword, contiene la password utilizzata per autenticare l'accesso al database metastore. La password viene salvata in formato di testo in hive-site.xml, il che rappresenta un rischio per la sicurezza. Una best practice di produzione consiste nell'archiviare la password in Secret Manager, quindi aggiornare il file di configurazione hive-site.xml per consentire al servizio metastore Hive di leggere la password da Secret Manager.

Gli esempi seguenti mostrano come utilizzare Secret Manager in diversi scenari di Hive Metastore.

Crea un cluster con un metastore locale

  1. Esegui il comando seguente in locale o in Cloud Shell per creare un cluster Dataproc.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
    

Note:

  1. Crea un secret utilizzando Secret Manager o il comando hadoop credential.

    • Alternativa 1: utilizza Secret Manager per creare un secret.

      • Nome secret: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valore secret: METASTORE_PASSWORD.
    • Alternativa 2: utilizza il comando hadoop credential per creare un secret.

      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      

      • METASTORE_PASSWORD: poiché Secret Manager non supporta l'operatore punto(.), sostituisci tutti i punti(.) nella password con trattini(-).
  2. Verifica che il secret esista.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
    

  3. Utilizza un editor di testo per rimuovere la proprietà javax.jdo.option.ConnectionPassword dal file hive-site.xml, quindi aggiungi le proprietà hadoop.security.credential.provider.path e hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator al file.

    Proprietà di esempio:

    hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

  4. Riavvia Hive Metastore.

    sudo systemctl restart hive-metastore
    

Crea un cluster con un metastore Hive esterno

  1. Esegui questo comando localmente o in Cloud Shell per creare un cluster Dataproc con le seguenti proprietà del cluster. Utilizza questo cluster come metastore Hive esterno per i job Hive eseguiti da altri cluster Dataproc per i carichi di lavoro Spark Hive.

    gcloud dataproc clusters create METASTORE_CLUSTER_NAME \
        --region=REGION \
        --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore" \
        ...other flags as needed...
    
  2. Crea un secret utilizzando Secret Manager o il comando hadoop credential.

    • Alternativa 1: utilizza Secret Manager per creare un secret.
      • Nome secret: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • Valore secret: METASTORE_PASSWORD.
    • Alternativa 2: utilizza il comando hadoop credential per creare un secret.
      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      
      • METASTORE_PASSWORD: poiché Secret Manager non supporta l'operatore punto(.), sostituisci i punti(.) nella password con i trattini(-).
  3. Verifica che il secret esista.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
      

Crea un cluster per eseguire job Hive che si connettono a un metastore esterno

  1. Esegui questo comando localmente o in Cloud Shell per creare un cluster Dataproc con le seguenti proprietà del cluster. Utilizza questo cluster per eseguire job Hive che si connettono al metastore esterno su un altro cluster Dataproc.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hive:javax.jdo.option.ConnectionURL=jdbc:mysql://METASTORE_CLUSTER_NAME-m/metastore,hive:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hive:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

Comandi per le credenziali Hadoop

Puoi utilizzare SSH per connetterti al nodo master Dataproc per utilizzare il comando hadoop credential per creare, elencare e gestire i secret.

I comandi hadoop credential utilizzano il seguente formato: hadoop credential SUBCOMMAND OPTIONS. Negli esempi seguenti, viene aggiunto il flag -provider per specificare il tipo e la posizione del fornitore (lo store del fornitore). Lo schema gsm:// specifica Secret Manager.

  • Crea un secret con l'ID secret specificato. Il comando non crea il secret se l'ID secret specificato esiste. Questo comportamento è coerente con l'API Hadoop CredentialProvider.

    hadoop credential create SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • Elenca i secret archiviati in un progetto.

    hadoop credential list -provider gsm://projects/PROJECT_ID
    

  • Controlla se esiste un secret in un progetto con un valore specificato.

    hadoop credential check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • Controlla una versione specifica del secret in un file di configurazione.

    hadoop credential conf CONFIG_FILE check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    
  • CONFIG_FILE: il file XML che imposta hadoop.security.credstore.google-secret-manager.secret-version.

  • Elimina tutte le versioni di un secret in un progetto.

    hadoop credential delete SECRET_ID -provider gsm://projects/ PROJECT_ID
    

Per ulteriori informazioni, consulta la Guida ai comandi Hadoop.

Passaggi successivi