Uso de puntos finales de tokens de delegación

Los puntos finales de tokens de delegación se utilizan para obtener un token de delegación para los servicios de Metastore (HMS) de HDFS, Hive y Hive. Los tokens de delegación se pueden utilizar para la autenticación al acceder a servicios específicos de Hadoop, como HDFS, Hive y HMS.

Además del token de delegación, el punto final también devuelve cierta configuración de los servicios que el cliente puede utilizar como desee.

Importante: Para que los terminales funcionen, sus sistemas de « Hadoop » deben tener habilitada la función « Kerberos ». Si tu clúster no tiene habilitada la función « Kerberos », aparecerá un mensaje de error: «La solicitud ha fallado debido a un tipo de autenticación no compatible en el clúster»

Si se expone un servicio de tipo « Hive » en un clúster de « Hadoop », la configuración « Hive » hive.server2.enable.doAs debe estar habilitada o establecida en «true» para dicho servicio. Si la configuración no está habilitada, esta suplantación de identidad de Hive se desactiva y las operaciones de Hive se ejecutarán como el usuario «hive» en lugar de como el usuario que envía la consulta.

Ejemplos de puntos finales

Los siguientes ejemplos corresponden al servicio HDFS. Si quieres ver ejemplos de « Hive » o «HMS», sustituye « HDFS » por « Hive » o «HMS» en los siguientes ejemplos.

Punto final para obtener los tokens de delegación de Hive, HDFS y HMS, todos a la vez

Nota: También puedes recuperar el token de delegación de un solo servicio a la vez indicando únicamente el nombre de ese servicio en el parámetro de consulta «services» en la siguiente URL: URL.

Por ejemplo:

curl -k -H "authorization: Bearer $TOKEN" -X POST "https://shadedgepn1.fyre.ibm.com:8443/gateway/wslpatch12-master-1/dsxhi/v1/delegationToken?doAs=user1&services=hdfs,hms,hive"
{"tokens":
["delegationToken":"NAAFdXNlcjEFZHN4aGkSZHN4aGlARllSRS5JQk0uQ09NigFz_1WBFIoBdCNiBRSOIcKOA2YUIL4Lk3BvwhlTZOMNP4G5TrTgmLMVSERGU19ERUxFR0FUSU9OX1RPS0VOD2hhLWhkZnM6bWFnaWNucw","service":"hdfs","config":{"fs.defaultFS":"hdfs://magicns"}},
{"delegationToken":"MgAFdXNlcjEFZHN4aGkSZHN4aGlARllSRS5JQk0uQ09NigFz_1WCVYoBdCNiBlUCjgMxFAWWfq5O58FNl7t2PMu0Z4HoFk8WFUhJVkVfREVMRUdBVElPTl9UT0tFTgA","service":"hms","config":

{"hive.metastore.sasl.enabled":"true","hive.metastore.uris":"thrift://shad2.fyre.ibm.com:9083","hive.metastore.kerberos.principal":"hive/_HOST@FYRE.IBM.COM"}},
{"delegationToken":"JQAFdXNlcjEFZHN4aGkFZHN4aGmKAXP_VYUYigF0I2IJGAGOA28UDB3AP8JJBYb_5BYe6vlulx14IRcVSElWRV9ERUxFR0FUSU9OX1RPS0VOFmhpdmVzZXJ2ZXIyQ2xpZW50VG9rZW4","service":"hive","config":

{"method":"kerberos","jdbcUrl":"jdbc:hive2://shad2.fyre.ibm.com:10000/;AuthMech=6;DelegationToken=DELEGATION_TOKEN"}}]}

Punto final para renovar el token de delegación de HDFS

Cada token de delegación tiene una fecha y una hora de caducidad. El mismo token de delegación se puede renovar antes de que caduque, de modo que se pueda volver a utilizar. Para renovar el token de delegación, este debe incluirse en el encabezado de la solicitud del punto final de renovación.

Indique el nombre del servicio como parámetro de consulta, tal y como service=hdfs se muestra en el siguiente ejemplo, al que pertenece el token de delegación que va a renovar. Solo se puede renovar un token de delegación para un servicio cada vez.

Por ejemplo:

export
delegationToken=NAAFdXNlcjEFZHN4aGkSZHN4aGlARllSRS5JQk0uQ09NigFz_1WBFIoBdCNiBRSOIcKOA2YUIL4Lk3BvwhlTZOMNP4G5TrTgmLMVSERGU19ERUxFR0FUSU9OX1RPS0VOD2hhLWhkZnM6bWFnaWNucw
curl -k -H "authorization: Bearer $TOKEN" -H "X-DelegationToken: $delegationToken" -X PUT "https://shadedgepn1.fyre.ibm.com:8443/gateway/wslpatch12-master-1/dsxhi/v1/delegationToken?doAs=user1&service=hdfs"

Punto final para eliminar o cancelar el token de delegación

Si el token de delegación ya no es necesario o ya no se puede utilizar, se puede eliminar. Para eliminar el token de delegación, este debe incluirse en el encabezado de la solicitud del punto final de eliminación.

Indica el nombre del servicio como parámetro de consulta, tal y como service=hdfs se muestra en el siguiente ejemplo, al que pertenece el token de delegación que vas a eliminar. Solo se puede cancelar un token de delegación para un servicio cada vez.

Por ejemplo:

export delegationToken=NAAFdXNlcjEFZHN4aGkSZHN4aGlARllSRS5JQk0uQ09NigFz_1WBFIoBdCNiBRSOIcKOA2YUIL4Lk3BvwhlTZOMNP4G5TrTgmLMVSERGU19ERUxFR0FUSU9OX1RPS0VOD2hhLWhkZnM6bWFnaWNucw`
curl -k -H "authorization: Bearer $TOKEN" -H "X-DelegationToken: $delegationToken" -X DELETE "https://shadedgepn1.fyre.ibm.com:8443/gateway/wslpatch12-master-1/dsxhi/v1/delegationToken?doAs=user1&service=hdfs"`

Solución de errores

Cuando la renovación o la eliminación de los puntos finales del token de delegación se realizan correctamente, se devuelve un código de estado 204 y un contenido vacío.

Cuando se produce un error, los puntos finales devuelven una respuesta con _statusCode_ field como 500 y el campo «message» contiene el seguimiento completo de la pila de errores.

Nota: Cada servicio genera mensajes de error distintos. El campo «Mensaje» contiene la respuesta. El campo « `statusCode` » de la respuesta para este tipo genérico de errores siempre será 500. Además de los errores genéricos, el otro tipo de errores tendrá valores diferentes en el campo « `statusCode` » de la respuesta.

Por ejemplo, aparece el siguiente mensaje de error junto con un código de estado cuando se intenta renovar un token que se ha eliminado o cancelado:

curl -k -H "authorization: Bearer $TOKEN" -H "X-DelegationToken: $delegationToken" -X PUT "https://shadedgepn1.fyre.ibm.com:8443/gateway/wslpatch12-master-1/dsxhi/v1/delegationToken?doAs=user1&service=hdfs"
{"exception":null,"_statusCode_":500,"message":"
<MessageNotFound::org.apache.hadoop.security.token.SecretManager$InvalidToken: Renewal
request for unknown token\n\tat
org.apache.hadoop.security.token.delegation.AbstractDelegationTokenSecretManager.renewToke
n(AbstractDelegationTokenSecretManager.java:502)\n\tat
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.renewDelegationToken(FSNamesystem
.java:7171)\n\tat
org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.renewDelegationToken(NameNo
deRpcServer.java:683)\n\tat
org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.renewDeleg
ationToken(ClientNamenodeProtocolServerSideTranslatorPB.java:1028)\n\tat
org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtoco
l$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)\n\tat
org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.j
ava:640)\n\tat
org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982)\n\tat
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2351)\n\tat
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2347)\n\tat
java.security.AccessController.doPrivileged(Native Method)\n\tat
javax.security.auth.Subject.doAs(Subject.java:422)\n\tat
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1869)\n\tat
org.apache.hadoop.ipc.Server$Handler.run(Server.java:2347)\n>"}

Limitaciones

Al renovar un token de delegación de HMS para los clústeres HDP, 2.x, CDH, 5.x y Hadoop, por ejemplo:

curl -k -H "authorization: Bearer $TOKEN" -H "X-DelegationToken: $delegationToken" -X PUT "https://shadedgepn1.fyre.ibm.com:8443/gateway/wslpatch12-master-1/dsxhi/v1/delegationToken?doAs=user1&service=hms"

Aparece el siguiente mensaje de error:

{"exception":null,"_statusCode_":500,"message":"<MessageNotFound::MetaException(message:dsxhi@FYRE.IBM.COM tries to renew a token with renewer dsxhi)>"}

Esta es una limitación de la versión Hive en HDP, 2.x, CDH y 5.x. Hadoop grupos. Esta limitación se solucionó en las versiones de Hive 3.0.0 o posteriores. Para obtener más información sobre Jira de Hive, consulta: https://issues.apache.org/jira/browse/HIVE-16708: