Configurar Kerberos para un servicio

Kerberos es un protocolo de autenticación de red diseñado para proporcionar autenticación sólida para aplicaciones cliente/servidor mediante criptografía de clave secreta. Por lo general, se usa entre la pila de Hadoop para la autenticación en todo el ecosistema de software.

Dataproc Metastore admite Kerberos a través de un centro de distribución de claves (KDC) alojado por el cliente. Los requisitos de API para admitir Kerberos son un archivo keytab, un principal y un archivo krb5.conf.

En esta página, se explica cómo habilitar y configurar Kerberos para el servicio de almacén de metadatos de Hive de Dataproc Metastore.

Antes de comenzar

  • Si deseas habilitar Kerberos en tu instancia de almacén de metadatos de Hive, debes configurar lo siguiente:

    • Tu propio KDC de Kerberos alojado.

      KDC es una aplicación que emite tickets de Kerberos. Es responsable de autenticar a los usuarios cuando se utiliza Kerberos. En esta página, se explica cómo usar un KDC en clúster proporcionado por Dataproc.

    • Conectividad IP entre la red de VPC y tu KDC para realizar la autenticación inicial.

    • Reglas de firewall en tu KDC para permitir el tráfico desde Dataproc Metastore. Consulta también las reglas de firewall para tus servicios.

    • Un secreto de Secret Manager que posea el contenido de un archivo keytab.

      Un archivo keytab contiene pares de principales de Kerberos y claves encriptadas, que se pueden usar para autenticar un principal de servicio con un KDC de Kerberos. En esta página, se explica cómo generar un archivo keytab con el KDC en clúster de Dataproc y usarlo para configurar tu servicio de Dataproc Metastore.

      Este archivo de keytab debe contener la entrada del principal de servicio creado para un almacén de metadatos de Hive. El secreto del administrador de secretos proporcionado debe fijarse a una versión secreta específica. La versión más reciente no es compatible.

    • Un principal que esté en el KDC y en el archivo keytab.

      Se requieren un archivo keytab y un principal de Kerberos para iniciar el almacén de metadatos de Hive. El principal existe en el KDC y en el archivo keytab. El principal debe contener tres partes: primary/instance@REALM. La instancia _HOST no es compatible.

    • Un archivo krb5.conf en un bucket de Cloud Storage

      Un archivo krb5.conf válido contiene información de configuración de Kerberos (por ejemplo, la entrada del usuario), como la IP de KDC, el puerto y el nombre del dominio. Debes especificar la IP del KDC y no el FQDN del KDC.

      Dataproc Metastore toma todo krb5.conf como un objeto de Cloud Storage. Debes proporcionar el URI de Cloud Storage que especifique la ruta al archivo krb5.conf durante la creación del servicio. Un URI típico tiene el formato gs://{bucket_name}/path/to/krb5.conf.

    • Para obtener los mejores resultados, usa buckets de Cloud Storage que se encuentren en la misma región que tu servicio de Dataproc Metastore. Aunque Dataproc Metastore no aplica restricciones de región, los recursos ubicados en el mismo lugar y los recursos globales tienen un mejor rendimiento. Por ejemplo, un bucket global es adecuado para cualquier región de servicio, pero un bucket multirregional de la UE no funciona bien con un servicio us-central1. El acceso entre regiones da como resultado una latencia más alta, falta de aislamiento de fallas regionales y cargos por ancho de banda de red entre regiones.

Control de acceso

  • Para crear un servicio, debes tener una función de IAM que contenga el permiso de IAM metastore.services.create. Las funciones específicas de Dataproc Metastore roles/metastore.admin y roles/metastore.editor se pueden usar para otorgar permisos de creación.

  • También puedes otorgar permiso de creación a usuarios o grupos mediante las funciones heredadas roles/owner y roles/editor.

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

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

Habilita Kerberos para un servicio

En las siguientes instrucciones, se demuestra cómo habilitar Kerberos para un servicio de Dataproc Metastore que está integrado en Dataproc.

  1. Configura un clúster de Dataproc con Kerberos habilitado en la misma red de VPC que se intercambiará con el servicio de Dataproc Metastore.

    1. Habilita el acceso al proyecto cuando crees el clúster de Dataproc para permitir el acceso a la API a todos los servicios de Google Cloud en el mismo proyecto. Para ello, pasa --scopes 'https://www.googleapis.com/auth/cloud-platform' en el comando de gcloud de la creación de clústeres de Dataproc.
  2. Establece una conexión SSH a la instancia principal del clúster de Dataproc. Puedes hacerlo desde un navegador o desde la línea de comandos. Ejecuta los siguientes comandos en la instancia principal:

    1. Modifica /etc/hive/conf/hive-site.xml en el clúster de Dataproc. Selecciona el nombre del principal (debe tener el formato primary/instance@REALM). Busca el hive.metastore.keberos.principal preexistente en /etc/hive/conf/hive-site.xml para encontrar REALM y reemplazar los segmentos principal y de instancia. Un nombre principal de ejemplo es hive/test@C.MY-PROJECT.INTERNAL.

      Toma nota del nombre principal para usar durante la creación del servicio de 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 combinación de keytab/principal en la VM principal del clúster de Dataproc:

      sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
      sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
      
    3. Sube la pestaña key al administrador de secretos desde la VM principal del clúster de Dataproc. Esto requiere que la identidad que ejecuta la VM de Dataproc tenga la función de administrador de Secret Manager para crear secretos. Toma nota de la versión del secreto creada para usar durante la creación del servicio de 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 la dirección IP interna principal de la instancia principal del clúster de Dataproc (desde la IU de Compute Engine o mediantegcloud compute instances list ) y propagará el dominio del clústerkdc yadmin_server pulg./etc/krb5.conf las rutas "a GCP".

      Por ejemplo, como la dirección IP interna de la instancia principal es 192.0.2.2:

      [realms]
        US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
          kdc = 192.0.2.2
          admin_server = 192.0.2.2
        }
      
    5. Sube el archivo /etc/krb5.conf de la VM principal de Dataproc a Cloud Storage. Toma nota de la ruta de acceso de Cloud Storage que se usará durante la creación del servicio Dataproc Metastore.

      gsutil cp /etc/krb5.conf gs://bucket-name/path/to/krb5.conf
      
  3. Proporciona la cuenta de servicio de Dataproc Metastore (esta cuenta es administrada por Google y aparece en la página de IU de permisos de IAM. Para ello, selecciona Incluir otorgamientos de funciones proporcionados por Google) con permiso para acceder a la pestaña de la clave:

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

  4. 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
       

  5. Asegúrate de haber configurado las reglas de firewall de entrada para el KDC. Estas reglas de firewall deben configurarse en la red de VPC que se usa para crear el clúster de Dataproc y permitir la entrada del tráfico de TCP/UDP.

  6. Crea un nuevo servicio de Metastore de Dataproc o actualiza uno existente con el nombre de la instancia principal anterior, la versión del secreto del administrador de secretos y la clave krb5.conf de Cloud URI del objeto de almacenamiento. Asegúrate de especificar la misma red de VPC que usaste durante la creación del clúster de Dataproc.

    La operación de creación o actualización del servicio de Dataproc Metastore probará que se acceda correctamente mediante el archivo principal, keytab y krb5.conf proporcionado. Si falla la prueba, la operación fallará.

  7. Una vez que el servicio de Dataproc Metastore termine de crear, toma nota del URI de extremo de Thrift y del directorio de almacenamiento. El URI del extremo de Thrift se parece a thrift://10.1.2.3:9083 y el directorio de almacén de datos se parece a gs://gcs-bucket-service-name-deadbeef/hive-warehouse. Vuelve a establecer una conexión SSH a la instancia principal del clúster de Dataproc y realiza lo siguiente:

    1. Modifica /etc/hive/conf/hive-site.xml en el clúster de 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. Reinicia HiveServer2:

      sudo systemctl restart hive-server2.service
      
    3. Modifica /etc/hadoop/conf/container-executor.cfg para agregar la siguiente línea en cada nodo de Dataproc:

       allowed.system.users=hive
      
    4. Obtenga el ticket de Kerberos antes de conectarse 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.
      

Próximos pasos