Configura Kerberos para los extremos de Thrift de Dataproc Metastore

En esta página, se explica cómo configurar Kerberos para tu servicio de Dataproc Metastore que usa el protocolo de extremo de Thrift. Si tu servicio de Dataproc Metastore usa el protocolo de extremo de gRPC, consulta Configura Kerberos para extremos de gRPC.

Antes de comenzar

  • Comprende los conceptos básicos de Kerberos.

    En estas instrucciones, usas un clúster de Managed Service para Apache Spark para crear los siguientes recursos de Kerberos:

    • Un archivo keytab
    • Un archivo krb5.conf
    • Un principal de Kerberos

    Para obtener más información sobre cómo funcionan estos recursos de Kerberos con un servicio de Dataproc Metastore, consulta Acerca de Kerberos.

  • Crea y aloja tu propio KDC de Kerberos o aprende a usar el KDC local de un clúster de Managed Service para Apache Spark.

  • Crea un bucket de Cloud Storage o accede a uno existente. Debes almacenar tu archivo krb5.conf en este bucket.

Consideraciones de red

Antes de configurar Kerberos, ten en cuenta los siguientes parámetros de configuración de red:

  • Configura una conexión IP entre tu red de VPC y el KDC. Debes hacerlo para autenticar tu archivo KDC con el servicio de Dataproc Metastore.

  • Configura las reglas de Firewall necesarias en tu KDC. Estas reglas son necesarias para permitir el tráfico desde Dataproc Metastore. Para obtener más información, consulta Reglas de firewall para tus servicios.

  • Si usas Controles del servicio de VPC, entonces el secreto de Secret Manager y el objeto de Cloud Storage deben pertenecer a un proyecto que resida en el mismo perímetro de servicio que el servicio de Dataproc Metastore.krb5.conf

  • Decide qué red de intercambio de tráfico entre VPCs deseas usar. Debes configurar tu clúster de Managed Service para Apache Spark y el servicio de Dataproc Metastore con la misma red de intercambio de tráfico entre VPCs.

Funciones requeridas

Para obtener el permiso que necesitas para crear un Dataproc Metastore con Kerberos, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto, según el principio de privilegio mínimo:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene el metastore.services.create permiso, que se requiere para crear un Dataproc Metastore con Kerberos.

También puedes obtener este permiso con roles personalizados o otros roles predefinidos.

Para obtener más información sobre los roles y permisos específicos de Dataproc Metastore, consulta Administra el acceso con IAM.

Para obtener más información, consulta la IAM y el control de acceso de Dataproc Metastore.

Habilita Kerberos para Dataproc Metastore

En las siguientes instrucciones, se muestra cómo configurar Kerberos para un servicio de Dataproc Metastore que está conectado a un clúster de Managed Service para Apache Spark.

Crea un clúster de Managed Service para Apache Spark y habilita Kerberos

gcloud

Para configurar un clúster de Managed Service para Apache Spark con Kerberos, ejecuta el siguiente gcloud dataproc clusters create comando:

gcloud dataproc clusters create CLUSTER_NAME \
    --image-version=2.0 \
    --enable-kerberos \
    --scopes 'https://www.googleapis.com/auth/cloud-platform'

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es el nombre de tu clúster de Managed Service para Apache Spark.

Configura el clúster de Managed Service para Apache Spark para Kerberos

En las siguientes instrucciones, se muestra cómo usar SSH para conectarte a un clúster principal de Managed Service para Apache Spark que está asociado con tu servicio de Dataproc Metastore.

Luego, modifica el archivo hive-site.xml y configura Kerberos para tu servicio.

  1. En la Google Cloud consola de, ve a la página Instancias de VM.
  2. En la lista de instancias de máquina virtual, haz clic en SSH en la fila del nodo principal de Managed Service para Apache Spark (your-cluster-name-m).

    Se abrirá una ventana del navegador en tu directorio principal del nodo.

  3. Abre el archivo /etc/hive/conf/hive-site.xml.

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

    Verás un resultado similar al siguiente:

    <property>
    <name>hive.metastore.kerberos.principal</name>
    <value>PRINCIPAL_NAME</value>
    </property>
    <property>
    <name>hive.metastore.kerberos.keytab.file</name>
    <value>METASTORE_PRINCIPAL_KEYTAB</value>
    </property>
    

    Reemplaza lo siguiente:

    • PRINCIPAL_NAME: Es un nombre principal, en el siguiente formato primary/instance@REALM. Por ejemplo, hive/test@C.MY-PROJECT.INTERNAL.
    • METASTORE_PRINCIPAL_KEYTAB: Es la ubicación de tu archivo keytab de Hive Metastore. Usa el siguiente valor /etc/security/keytab/metastore.service.keytab.

Crea un archivo keytab

En las siguientes instrucciones, se muestra cómo crear un archivo keytab.

Un archivo keytab contiene un par de principales de Kerberos y un par de claves encriptadas. Se usa para autenticar un principal de servicio con un KDC de Kerberos.

Para crear un archivo keytab, haz lo siguiente:

  1. En la sesión de SSH de Managed Service para Apache Spark, crea el archivo keytab y el principal.

    sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
    sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
    
  2. En la sesión de SSH de Managed Service para Apache Spark, crea y sube el archivo keytab a Secret Manager.

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

    Reemplaza lo siguiente:

    • SECRET_NAME: Es el nombre de tu secreto.

Actualiza el archivo krb5.conf

A continuación, debes actualizar el archivo krb5.conf para asociarlo con tu clúster de Managed Service para Apache Spark.

  1. Determina la dirección IP interna principal de la instancia principal del clúster de Managed Service para Apache Spark.

    gcloud compute instances list
    

    Por ejemplo, ejecutar este comando produce un resultado similar al siguiente:

    ~$ gcloud compute instances list --project kerberos-project
    NAME                                                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP    EXTERNAL_IP     STATUS
    cluster-236-m                                        us-central1-c  n2-standard-4               192.0.2.2      *.*.*.*         RUNNING
    ...
    

    En este caso, la dirección IP interna del clúster es 192.0.2.2.

  2. Abre el archivo krb5.conf.

    sudo vim /etc/krb5.conf
    
  3. En el archivo, reemplaza el parámetro KDC existente y el parámetro admin_server por la dirección IP interna de tu clúster de Managed Service para Apache Spark.

    Por ejemplo, usar el valor de la dirección IP de los pasos anteriores se ve similar a este resultado.

    [realms]
    US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
       kdc = 192.0.2.2
       admin_server = 192.0.2.2
    }
    
  4. Sube el archivo /etc/krb5.conf desde tu VM principal de Managed Service para Apache Spark a tu bucket de Cloud Storage.

    gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5
    

    Reemplaza lo siguiente:

    • PATH_TO_KRB5: Es el URI de Cloud Storage que contiene tu archivo krb5.conf.

    Una vez que finalice la carga, copia la ruta de acceso de la carga. Deberás usarla cuando crees tu servicio de Dataproc Metastore.

Otorga roles y permisos de IAM

  1. Proporciona la cuenta de servicio de Dataproc Metastore con permiso para acceder al archivo keytab. Esta cuenta es administrada por Google y aparece en la página de la IU de permisos de IAM cuando seleccionas Incluir asignaciones de roles proporcionadas por Google.

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

  2. Proporciona la cuenta de servicio de Dataproc Metastore con permiso para acceder al archivo 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

Crea un servicio de Dataproc Metastore con Kerberos

Crea un servicio de Dataproc Metastore nuevo que esté configurado con tus archivos de Kerberos.

Asegúrate de crear tu servicio en la red de VPC como tu clúster de Managed Service para Apache Spark.

gcloud metastore services create SERVICE \
   --location=LOCATION \
   --instance-size=medium \
   --network=VPC_NETWORK \
   --kerberos-principal=KERBEROS_PRINCIPAL \
   --krb5-config=KRB5_CONFIG \
   --keytab=CLOUD_SECRET

Reemplaza lo siguiente:

  • SERVICE: Es el nombre de tu servicio de Dataproc Metastore.
  • LOCATION: Es la ubicación de tu servicio de Dataproc Metastore.
  • VPC_NETWORK: Es el nombre de tu red de VPC. Usa la misma red que está configurada en tu clúster de Managed Service para Apache Spark.
  • KERBEROS_PRINCIPAL: Es el nombre del principal de Kerberos que creaste antes.
  • KRB5_CONFIG: Es la ubicación del archivo krb5.conf. Usa el URI del objeto de Cloud Storage que apunta a tu archivo.
  • CLOUD_SECRET: Es el nombre de recurso relativo de una versión del secreto de Secret Manager.

Después de crear el clúster, Dataproc Metastore intenta conectarse con tus credenciales de Kerberos usando el archivo principal, keytab y krb5.conf proporcionados. Si falla la conexión, también falla la creación de Dataproc Metastore.

Una vez que se haya creado el servicio de Dataproc Metastore, busca el URI de extremo de Thrift y el directorio de almacenamiento.

  1. Conéctate por SSH a la instancia principal de tu clúster de Managed Service para Apache Spark.

  2. En la sesión de SSH, abre el archivo /etc/hive/conf/hive-site.xml.

    sudo vim /etc/hive/conf/hive-site.xml
    
  3. Modifica /etc/hive/conf/hive-site.xml en el clúster de Managed Service para Apache Spark.

    <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>
    
  4. Reinicia HiveServer2:

    sudo systemctl restart hive-server2.service
    

Configura Managed Service para Apache Spark antes de enviar trabajos

Para ejecutar tus trabajos de Managed Service para Apache Spark, debes agregar el usuario hive a la propiedad allowed.system.users en el archivo container-executor.cfg de Hadoop. Esto permite que los usuarios ejecuten consultas para acceder a los datos, como select * from.

  1. En la sesión de SSH, abre el archivo container-executor.cfg de Hadoop.

    sudo vim /etc/hadoop/conf/container-executor.cfg
    

    Agrega la siguiente línea en cada nodo de Managed Service para Apache Spark.

    allowed.system.users=hive
    

Obtén un ticket de Kerberos

  1. Obtén el ticket de Kerberos antes de conectarte a la instancia de 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.
    sudo hive
    

    Reemplaza lo siguiente:

    • PRINCIPAL_NAME: Es el nombre de tu principal.

¿Qué sigue?