Provider di credenziali Secret Manager

Panoramica

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

L'API GoogleHadoopSecretManagerCredentialProvider, che si integra con Secret Manager, è un'implementazione dell'API Hadoop CredentialProvider, una soluzione per proteggere le credenziali sensibili dall'accesso pubblico.

Puoi utilizzare l'API del provider di credenziali Hadoop nei seguenti modi:

Terminologia

Nella tabella seguente vengono descritti i termini utilizzati in questo documento.

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

Comandi delle credenziali Hadoop

Puoi utilizzare il comando hadoop credential per creare, elencare e gestire i secret. I comandi hadoop credential utilizzano questo formato generale: hadoop credential SUBCOMMAND OPTIONS.

Nei seguenti esempi, viene aggiunto il flag -provider per specificare il tipo e la località del provider (l'archivio del provider). Lo schema gsm:// specifica Secret Manager.

  • Crea un secret con l'ID secret specificato. Il comando non crea il secret se esiste l'ID secret specificato. 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
    

  • Verifica la presenza di 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.

  • Eliminare 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 di Hadoop.

Configura i componenti OSS

Puoi configurare Hadoop e altri componenti OSS supportati per funzionare con Secret Manager impostando le seguenti proprietà del componente:

  • Percorso provider (obbligatorio): 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 che vengono attraversati per risolvere una credenziale.

    --properties=hadoop.security.credential.provider.path=gsm://projects/project-id
    
    • Un scheme viene utilizzato per indicare il tipo di provider di credenziali. Gli schemi Hadoop includono jceks://, user://,localjceks://. Utilizza lo schema gsm:// come mostrato nell'esempio precedente per cercare la credenziale in Secret Manager.
  • Operatore di punto sostitutivo (facoltativo): Secret Manager non supporta l'operatore punto(.) nei nomi dei secret, ma le chiavi di credenziali dei componenti OSS possono contenere questo operatore. Quando questa proprietà è impostata su true. puoi sostituire i punti(.) con i trattini(-) nei nomi delle credenziali. Ad esempio, quando questa proprietà è impostata su true, puoi specificare il nome della credenziale a.b.c come a-b-c quando lo passi a Secret Manager. Questa proprietà è necessaria solo per specificare una credenziale utilizzando i comandi per le credenziali Hadoop o quando un componente OSS tenta di risolvere le credenziali. Non ha alcun effetto sulla creazione, l'elenco o l'eliminazione dei comandi delle credenziali Hadoop.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    
  • Versione del secret (facoltativo): i secret in Secret Manager possono avere più versioni (valori). Utilizza questa proprietà per accedere a una versione del secret. Per impostazione predefinita, Secret Manager accede alla versione LATEST, che si risolve al valore più recente del secret al momento del runtime. Una best practice è definire questa proprietà per un accesso stabile negli ambienti di produzione.

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

Esempi di Hive Metastore

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

Le seguenti sezioni forniscono istruzioni su come utilizzare Secret Manager in diversi scenari di Hive Metastore.

Cluster Hive con metastore locale

  1. Esegui il comando seguente in locale o in Cloud Shell per creare un cluster Dataproc con le proprietà cluster richieste.

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

  2. Creare un secret. Puoi creare 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 del 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 eventuali punti(.) con trattini(-) nella password.
  3. Verifica che il secret esista.

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

  4. Rimuovi javax.jdo.option.ConnectionPassword dal file hive-site.xml. Il seguente comando apre il file da modificare in vim.

    sudo vim /etc/hive/conf/hive-site.xml
    

  5. Riavvia Hive Metastore.

    sudo systemctl restart hive-metastore
    

Cluster Hive con metastore esterno

  1. Esegui il comando seguente in locale o in Cloud Shell per creare un cluster Dataproc con le seguenti proprietà cluster.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
        --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore"
    

  2. Creare un secret. Puoi creare 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 del 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(.) con i trattini(-) nella password.
  3. Verifica che il secret esista.

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

  4. Esegui il comando seguente in locale o in Cloud Shell per creare un cluster Dataproc con le seguenti proprietà cluster. Utilizza questo cluster per eseguire i job Hive e si connette al metastore esterno.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed...
        --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"
    

Per maggiori informazioni