Configurare Kerberos per un servizio

Kerberos è un protocollo di autenticazione di rete progettato per fornire un'autenticazione avanzata per le applicazioni client/server utilizzando la crittografia di chiave segreta. È comunemente usato tra gli stack di Hadoop per l'autenticazione nell'intero ecosistema software.

Dataproc Metastore supporta Kerberos tramite un Key Distribution Center (KDC) ospitato dal cliente. I requisiti API per supportare Kerberos sono un file keytab, un'entità e un file krb5.conf.

Questa pagina spiega come abilitare e configurare Kerberos per il servizio metastore Dataproc Metastore.

Prima di iniziare

  • Se vuoi abilitare Kerberos per la tua istanza di metastore Hive, devi avere configurato quanto segue:

    • Il tuo KDC Kerberos ospitato.

      Il KDC è un'applicazione che emette ticket Kerberos. È responsabile dell'autenticazione degli utenti quando viene utilizzato Kerberos.

    • Connettività IP tra la rete VPC e il tuo KDC per eseguire l'autenticazione iniziale.

    • Regole firewall sul KDC per consentire il traffico da Dataproc Metastore. Vedi anche Regole firewall per i servizi.

    • Un secret Google Cloud Secret Manager con i contenuti di un file keytab. Per saperne di più su come creare un secret di Secret Manager, vedi Abilitare le chiavi di crittografia gestite dal cliente (CMEK) per Secret Manager.

      Un file keytab contiene coppie di entità Kerberos e chiavi criptate, che possono essere usate per autenticare un'entità di servizio con un KDC Kerberos. Devi generare un file tabulare con il KDC su cluster di Dataproc e utilizzarlo per configurare il servizio Dataproc Metastore.

      Questo file keytab deve contenere la voce relativa all'entità del servizio creata per un metastore Hive. Il secret di Secret Manager fornito deve essere bloccato in una versione specifica del secret. La versione più recente non è supportata.

    • Un'entità che si trova sia nel KDC che nel file keytab.

      Per avviare il metastore Hive sono necessari un file e una scheda chiave Kerberos validi. L'entità è presente sia nel KDC sia nella tabulazione. Il princip deve contenere tre parti: primary/instance@REALM. L'istanza \_HOST non è supportata.

    • Un file krb5.conf in un bucket Cloud Storage.

      Un file krb5.conf valido contiene informazioni di configurazione Kerberos, come l'input utente come l'IP KDC, la porta e il nome realm. Devi specificare l'IP KDC e non il FQDN KDC.

      Dataproc Metastore prende l'intero krb5.conf come oggetto Cloud Storage. Devi fornire l'URI Cloud Storage che specifica il percorso del file krb5.conf durante la creazione del servizio. Un URI tipico è nel formato gs://{bucket_name}/path/to/krb5.conf.

    • Per ottenere risultati ottimali, utilizza i bucket Cloud Storage che si trovano nella stessa area geografica del servizio Dataproc Metastore. Sebbene Dataproc Metastore non applichi restrizioni per l'area geografica, le risorse co-localizzate hanno un rendimento migliore. Ad esempio, un bucket a più aree geografiche dell'UE non funziona bene con un servizio us-central1. L'accesso tra aree geografiche determina una maggiore latenza, l'assenza di isolamento degli errori a livello di area geografica e gli addebiti relativi alla larghezza di banda di rete tra le aree geografiche.

Controllo dell'accesso

  • Per creare un servizio, devi richiedere un ruolo IAM contenente l'autorizzazione IAM metastore.services.create. I ruoli specifici di Dataproc Metastore roles/metastore.admin e roles/metastore.editor includono l'autorizzazione di creazione.

  • Per autorizzare la creazione di utenti o gruppi, puoi utilizzare i ruoli precedenti di roles/owner e roles/editor.

  • Se utilizzi i controlli di servizio VPC, il secret di Secret Manager e l'oggetto Cloud Storage di krb5.conf devono appartenere a un progetto che si trova nello stesso perimetro di servizio del servizio Metastore Dataproc.

Per saperne di più, vedi Dataproc Metastore IAM e il controllo dell'accesso.

Kerberos per un servizio

Le istruzioni seguenti illustrano come abilitare Kerberos per un servizio Dataproc Metastore integrato con Dataproc.

  1. Configura un cluster Dataproc con Kerberos abilitato nella stessa rete VPC che verrà sottoposta a peering con il servizio Metastore Dataproc.

    1. Abilita l'accesso al progetto durante la creazione del cluster Dataproc in modo da consentire l'accesso API a tutti i servizi Google Cloud nello stesso progetto. Questa operazione può essere eseguita passando --scopes 'https://www.googleapis.com/auth/cloud-platform' nel comando di creazione del cluster Dataproc gcloud.
  2. Accedi tramite SSH all'istanza master del cluster Dataproc. Puoi farlo da un browser o dalla riga di comando. Esegui i seguenti comandi sull'istanza principale:

    1. Modifica /etc/hive/conf/hive-site.xml nel cluster Dataproc. Seleziona un nome entità (deve avere il formato primary/instance@REALM). Cerca il valore hive.metastore.keberos.principal esistente in /etc/hive/conf/hive-site.xml per trovare REALM e sostituire i segmenti principali e di istanza. Un esempio di nome entità è hive/test@C.MY-PROJECT.INTERNAL.

      Prendi nota del nome dell'entità da utilizzare durante la creazione del servizio Dataproc Metastore:

      <property>
        <name>hive.metastore.kerberos.principal</name>
        <!-- Update this value. -->
        <value>PRINCIPAL_NAME</value>
      </property>
      <property>
        <name>hive.metastore.kerberos.keytab.file</name>
        <!-- Update to this value. -->
        <value>/etc/security/keytab/metastore.service.keytab</value>
      </property>
      
    2. Crea la combinazione chiave/tabulazione nella VM principale di cluster di Dataproc:

      sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
      sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
      
    3. Carica la scheda chiave in Secret Manager dalla VM principale del cluster Dataproc. Per creare i secret, è richiesta l'identità che esegue la VM CloudProc per avere il ruolo di amministratore di secret. Prendi nota della versione del secret creata da utilizzare durante la creazione del servizio Dataproc Metastore.

        gcloud secrets create SECRET_NAME --replication-policy automatic
        sudo gcloud secrets versions add SECRET_NAME --data-file /etc/security/keytab/metastore.service.keytab
        

    4. Determina l'indirizzo IP interno primario dell'istanza principale di Dataproc nel cluster (dall'interfaccia utente di Compute Engine o da gcloud compute instances list) e compilalo come kdc e admin_server del realm del cluster in /etc/krb5.conf.

      Ad esempio (ad esempio, l'indirizzo IP interno del primario è 192.0.2.2):

      [realms]
        US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
          kdc = 192.0.2.2
          admin_server = 192.0.2.2
        }
      
    5. Carica il file /etc/krb5.conf dalla VM principale di Dataproc in Cloud Storage. Prendi nota del percorso Cloud Storage da utilizzare durante la creazione del servizio Dataproc Metastore.

      gsutil cp /etc/krb5.conf gs://bucket-name/path/to/krb5.conf
      
  3. Fornisci l'account di servizio Dataproc Metastore (questo account è gestito da Google ed elencato nella pagina della UI delle autorizzazioni IAM selezionando Includi concessioni di ruoli fornite da Google) con l'autorizzazione ad accedere alla scheda chiave:

       gcloud projects add-iam-policy-binding PROJECT_ID \
           --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
           --role roles/secretmanager.secretAccessor
       

  4. Concedi all'account di servizio Dataproc Metastore l'autorizzazione per accedere al file krb5.conf.

       gcloud projects add-iam-policy-binding PROJECT_ID \
           --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
           --role roles/storage.objectViewer
       

  5. Assicurati di aver configurato le regole del firewall in entrata per il KDC. Queste regole firewall devono essere configurate sulla rete VPC utilizzata per creare il cluster Dataproc per consentire il traffico in entrata da TCP/UDP.

  6. Crea un nuovo servizio Dataproc Metastore o aggiornane uno esistente con il nome entità riportato sopra, la versione del secret di Secret Manager e l'URI dell'oggetto Cloud Storage di krb5.conf. Assicurati di specificare la stessa rete VPC che hai utilizzato durante la creazione del cluster Dataproc.

    L'operazione di creazione o aggiornamento del servizio Dataproc Metastore verificherà che si verifichi un accesso riuscito utilizzando l'entità, la tabulazione e il file krb5.conf forniti. Se il test non va a buon fine, l'operazione non andrà a buon fine.

  7. Una volta creato il servizio Dataproc Metastore, prendi nota dell'URI dell'endpoint di Thrift e della directory del warehouse. L'URI dell'endpoint di Thrift ha un aspetto simile a thrift://10.1.2.3:9083 e la directory del warehouse è simile a gs://gcs-bucket-service-name-deadbeef/hive-warehouse. Accedi tramite SSH all'istanza master del cluster Dataproc e ripeti le operazioni seguenti:

    1. Modifica /etc/hive/conf/hive-site.xml nel cluster Dataproc:

      <property>
        <name>hive.metastore.uris</name>
        <!-- Update this value. -->
        <value>ENDPOINT_URI</value>
      </property>
      <!-- Add this property entry. -->
      <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>WAREHOUSE_DIR</value>
      </property>
      
    2. Riavvia HiveServer2:

      sudo systemctl restart hive-server2.service
      
    3. Modifica /etc/hadoop/conf/container-executor.cfg per aggiungere la seguente riga in ogni nodo Dataproc:

       allowed.system.users=hive
      
    4. Acquista il ticket kerberos prima di connetterti all'istanza Dataproc Metastore.

      sudo klist -kte /etc/security/keytab/metastore.service.keytab
      sudo kinit -kt /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME
      sudo klist # gets the ticket information.
      

Passaggi successivi