En esta página se explica cómo configurar Kerberos para su servicio Dataproc Metastore que usa el protocolo de endpoint Thrift. Si tu servicio Dataproc Metastore usa el protocolo de endpoint gRPC, consulta Configurar Kerberos para endpoints gRPC.
Antes de empezar
Familiarízate con los conceptos básicos de Kerberos.
En estas instrucciones, se usa un clúster de Dataproc 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 consulta cómo usar el KDC local de un clúster de Dataproc.
Crea un segmento de Cloud Storage o consigue acceso a uno que ya tengas. Debes almacenar tu archivo
krb5.conf
en este contenedor.
Consideraciones sobre la red
Antes de configurar Kerberos, ten en cuenta los siguientes ajustes 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 Dataproc Metastore.
Configura las reglas de cortafuegos necesarias en tu KDC. Estas reglas son necesarias para permitir el tráfico de Dataproc Metastore. Para obtener más información, consulta Reglas de cortafuegos para tus servicios.
Si usas Controles de Servicio de VPC, el secreto de Secret Manager y el objeto de
krb5.conf
Cloud Storage deben pertenecer a un proyecto que se encuentre en el mismo perímetro de servicio que el servicio Dataproc Metastore.Decide qué red de interconexión de VPC quieres usar. Debes configurar tu clúster de Dataproc y tu servicio Dataproc Metastore con la misma red de emparejamiento de VPCs.
Roles obligatorios
Para obtener el permiso que necesitas para crear un metastore de Dataproc con Kerberos, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto, según el principio de privilegio mínimo:
-
Conceder control total sobre los recursos de Dataproc Metastore (
roles/metastore.editor
) -
Concede acceso completo a todos los recursos de Dataproc Metastore, incluida la administración de políticas de gestión de identidades y accesos (
roles/metastore.admin
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene el permiso metastore.services.create
, que es necesario para crear un metastore de Dataproc con Kerberos.
También puedes obtener este permiso con roles personalizados u otros roles predefinidos.
Para obtener más información sobre roles y permisos específicos de Dataproc Metastore, consulta Gestionar el acceso con IAM.Para obtener más información, consulta Gestión de identidades y accesos y control de acceso de Dataproc Metastore.
Habilitar Kerberos en Dataproc Metastore
En las siguientes instrucciones se explica cómo configurar Kerberos para un servicio de Dataproc Metastore que está asociado a un clúster de Dataproc.
Crear un clúster de Dataproc y habilitar Kerberos
gcloud
Para configurar un clúster de Dataproc con Kerberos, ejecuta el siguiente comando gcloud dataproc clusters create
:
gcloud dataproc clusters create CLUSTER_NAME \ --image-version=2.0 \ --enable-kerberos \ --scopes 'https://www.googleapis.com/auth/cloud-platform'
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre de tu clúster de Dataproc.
Configurar el clúster de Dataproc para Kerberos
En las siguientes instrucciones se explica cómo usar SSH para conectarse a un clúster de Dataproc principal asociado a su servicio Dataproc Metastore.
Después, modifica el archivo hive-site.xml
y configura Kerberos para tu servicio.
- En la consola de Google Cloud , ve a la página Instancias de VM.
En la lista de instancias de máquinas virtuales, haz clic en SSH en la fila del nodo principal de Dataproc (
your-cluster-name-m
).Se abrirá una ventana del navegador en el directorio principal del nodo.
Abre el archivo
/etc/hive/conf/hive-site.xml
.sudo vim /etc/hive/conf/hive-site.xml
Verá 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_PRINCPAL_KEYTAB</value> </property>
Sustituye:
PRINCIPAL_NAME
: un nombre de principal con el siguiente formato:primary/instance@REALM
. Por ejemplo,hive/test@C.MY-PROJECT.INTERNAL
.METASTORE_PRINCIPAL_KEYTAB
: la ubicación de tu archivo keytab de Hive Metastore. Usa el siguiente valor:/etc/security/keytab/metastore.service.keytab
.
Crear un archivo keytab
En las siguientes instrucciones se explica cómo crear un archivo keytab.
Un archivo keytab contiene un par de principales de Kerberos y un par de claves cifradas. Se usa para autenticar un nombre principal de servicio con un KDC de Kerberos.
Para crear un archivo keytab
En la sesión SSH de Dataproc, 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"
En la sesión SSH de Dataproc, 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
Haz los cambios siguientes:
SECRET_NAME
: el nombre de tu secreto.
Actualiza el archivo krb5.conf
A continuación, debes actualizar el archivo krb5.conf
para asociarlo a tu clúster de Dataproc.
Determina la dirección IP interna principal de la instancia principal del clúster de Dataproc.
gcloud compute instances list
Por ejemplo, al ejecutar este comando se obtiene un resultado similar:
~$ 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
.Abre el archivo
krb5.conf
.sudo vim /etc/krb5.conf
En el archivo, sustituya los parámetros
KDC
yadmin_server
por la dirección IP interna de su clúster de Dataproc.Por ejemplo, si usas el valor de la dirección IP de los pasos anteriores, el resultado será similar a este.
[realms] US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = { kdc = 192.0.2.2 admin_server = 192.0.2.2 }
Sube el archivo
/etc/krb5.conf
desde tu VM principal de Dataproc a tu depósito de Cloud Storage.gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5
Sustituye:
PATH_TO_KRB5
: el URI de Cloud Storage que contiene el archivokrb5.conf
.
Cuando finalice la subida, copia la ruta de la subida. Debes usarlo al crear tu servicio de Dataproc Metastore.
Conceder roles y permisos de gestión de identidades y accesos
Concede permiso a la cuenta de servicio de Dataproc Metastore para acceder al archivo keytab. Esta cuenta está gestionada por Google y se muestra en la página de la interfaz de usuario de permisos de gestión de identidades y accesos si se selecciona 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
Proporciona a la cuenta de servicio de Dataproc Metastore 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
Crear un servicio de Dataproc Metastore con Kerberos
Crea un servicio de Dataproc Metastore configurado con tus archivos Kerberos.
Asegúrate de crear el servicio en la red VPC como tu clúster de Dataproc.
gcloud metastore services create SERVICE \ --location=LOCATION \ --instance-size=medium \ --network=VPC_NETWORK \ --kerberos-principal=KERBEROS_PRINCIPAL \ --krb5-config=KRB5_CONFIG \ --keytab=CLOUD_SECRET
Haz los cambios siguientes:
SERVICE
: el nombre de tu servicio de Dataproc Metastore.LOCATION
: la ubicación de tu servicio Dataproc Metastore.VPC_NETWORK
:el nombre de tu red de VPC. Usa la misma red que está configurada en tu clúster de Dataproc.KERBEROS_PRINCIPAL
: el nombre del principal de Kerberos que has creado anteriormente.KRB5_CONFIG
: la ubicación del archivokrb5.config
. Usa el URI del objeto de Cloud Storage que apunta a tu archivo.CLOUD_SECRET
: nombre de recurso relativo de una versión de secreto de Secret Manager.
Después de crear el clúster, Dataproc Metastore intenta conectarse con tus credenciales de Kerberos mediante el principal, el archivo keytab y el archivo krb5.conf
que hayas proporcionado. Si la conexión falla, tampoco se podrá crear Dataproc Metastore.
Vincular el clúster de Dataproc a Dataproc Metastore
Una vez creado el servicio Dataproc Metastore, busca el URI del endpoint de Thrift y el directorio del almacén.
Conéctate por SSH a la instancia principal de tu clúster de Dataproc.
En la sesión SSH, abre el archivo
/etc/hive/conf/hive-site.xml
.sudo vim /etc/hive/conf/hive-site.xml
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>
Reinicia HiveServer2:
sudo systemctl restart hive-server2.service
Configurar Dataproc antes de enviar tareas
Para ejecutar tus trabajos de Dataproc,
debes añadir el usuario hive
a la propiedad allowed.system.users
en el
archivo container-executor.cfg
de Hadoop. De esta forma, los usuarios pueden ejecutar consultas para acceder a datos, como select * from
.
En la sesión SSH, abre el archivo
container-executor.cfg
de Hadoop.sudo vim /etc/hadoop/conf/container-executor.cfg
Añade la siguiente línea en cada nodo de Dataproc.
allowed.system.users=hive
Obtener un ticket de Kerberos
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
Haz los cambios siguientes:
PRINCIPAL_NAME
: el nombre de tu centro.