En esta página, se explica cómo configurar Kerberos para tu servicio de Dataproc Metastore que usa el protocolo de extremo 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, usarás un clúster de Dataproc para crear los siguientes recursos de Kerberos:
- Un archivo Keytab
- Un archivo
krb5.conf
- Es 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 bien aprende a usar el KDC local de un clúster de Dataproc.
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 los 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.Decide qué red de VPC peering deseas usar. Debes configurar tu clúster de Dataproc y el servicio de Dataproc Metastore con la misma red de intercambio de tráfico de VPC.
Funciones requeridas
Para obtener el permiso que necesitas para crear un almacén de metadatos de Dataproc 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:
-
Cómo otorgar control total de los recursos de Dataproc Metastore (
roles/metastore.editor
) -
Otorga acceso completo a todos los recursos de Dataproc Metastore, incluida la administración de políticas de IAM (
roles/metastore.admin
)
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 permiso metastore.services.create
, que se requiere para crear un almacén de metadatos de Dataproc con Kerberos.
También puedes obtener este permiso con roles personalizados o con 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á adjunto a un clúster de Dataproc.
Crea un clúster de Dataproc y habilita Kerberos
gcloud
Para configurar un clúster de Dataproc con Kerberos, ejecuta el siguiente comando de gcloud dataproc clusters create
:
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 Dataproc.
Configura el clúster de Dataproc para Kerberos
En las siguientes instrucciones, se muestra cómo usar SSH para conectarte a un clúster principal de Dataproc asociado con tu servicio de Dataproc Metastore.
Luego, modifica el archivo hive-site.xml
y configura Kerberos para tu servicio.
- En la Google Cloud consola, ve a la página Instancias de VM.
En la lista de instancias de máquina virtual, haz clic en SSH en la fila del nodo principal de Dataproc (
your-cluster-name-m
).Se abrirá una ventana del navegador en tu directorio principal del nodo.
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_PRINCPAL_KEYTAB</value> </property>
Reemplaza lo siguiente:
PRINCIPAL_NAME
: Es un nombre principal, con 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.
Cómo crear un archivo keytab
En la sesión SSH de Dataproc, crea el 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
Reemplaza lo siguiente:
SECRET_NAME
: Es el nombre de tu Secret.
Actualiza el archivo krb5.conf
A continuación, debes actualizar el archivo krb5.conf
para asociarlo con 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, si ejecutas este comando, se producirá 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, reemplaza los parámetros existentes
KDC
yadmin_server
por la dirección IP interna de tu clúster de Dataproc.Por ejemplo, si usas el valor de la dirección IP de los pasos anteriores, el resultado se verá 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
de tu VM principal de Dataproc 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 archivokrb5.conf
.
Cuando finalice la carga, copia la ruta de acceso de la carga. Deberás usarlo cuando crees tu servicio de Dataproc Metastore.
Otorga roles y permisos de IAM
Proporciona a la cuenta de servicio de Dataproc Metastore permiso para acceder al archivo keytab. Esta cuenta está administrada por Google y aparece en la página de la IU de permisos de IAM cuando 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 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 configurado con tus archivos de Kerberos.
Asegúrate de crear tu servicio en la misma red de VPC que 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
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
:El nombre de tu red de VPC Usa la misma red que está configurada en tu clúster de Dataproc.KERBEROS_PRINCIPAL
: Es el nombre de la entidad principal de Kerberos que creaste antes.KRB5_CONFIG
: Es la ubicación del archivokrb5.config
. Usa el URI del objeto de Cloud Storage que apunta a tu archivo.CLOUD_SECRET
: Es el nombre del recurso relativo de una versión del secreto de Secret Manager.
Después de crear el clúster, Dataproc Metastore intentará conectarse con tus credenciales de Kerberos usando el archivo principal, keytab y krb5.conf
proporcionados. Si la conexión falla, también fallará la creación de Dataproc Metastore.
Vincula el clúster de Dataproc a Dataproc Metastore
Después de crear el servicio de Dataproc Metastore, busca tu URI de extremo de Thrift y tu directorio de almacén.
Establece una conexión SSH a la instancia principal de tu clúster de Dataproc.
En la sesión de 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
Configura Dataproc antes de enviar trabajos
Para ejecutar tus trabajos de Dataproc, debes agregar el usuario hive
a la propiedad allowed.system.users
en el archivo container-executor.cfg
de Hadoop. Esto permite a los usuarios ejecutar consultas para acceder a datos, como select * from
.
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 Dataproc.
allowed.system.users=hive
Obtén 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
Reemplaza lo siguiente:
PRINCIPAL_NAME
: Es el nombre de tu principal.