Tous les produits
Search
Centre de documentation

E-MapReduce:Use Kyuubi tokens to control access to Data Lake Formation data in EMR Serverless Spark

Dernière mise à jour :Aug 21, 2026

Configurez l'authentification par jeton pour une passerelle Kyuubi dans EMR Serverless Spark. Les jetons associés aux utilisateurs RAM appliquent un contrôle d'accès granulaire aux données du catalogue Paimon dans Data Lake Formation (DLF), garantissant que chaque client n'interroge que les données autorisées.

Cas d'utilisation

Dans le cadre de l'analyse de données en entreprise, plusieurs utilisateurs ou applications accèdent aux données via une passerelle SQL unifiée, telle qu'une passerelle Kyuubi. La sécurité des données exige d'isoler les accès selon l'identité : par exemple, l'analyste A interroge uniquement les rapports métier, tandis que l'ingénieur de données B accède aux jeux de données bruts. Cette solution isole les permissions de données dans un environnement multilocataire grâce à une authentification complète des identités.

image

Procédure

Étape 1 : Préparer l'environnement et les permissions

  1. Préparez les ressources de base.

  2. Configurez les permissions de l'utilisateur RAM.

Étape 2 : Accorder des permissions sur les tables dans DLF

Accordez à l'utilisateur RAM l'accès à la table cible dans DLF. Vous devez également accorder la permission Describe sur la base de données default afin que la passerelle Kyuubi puisse initialiser la session Spark.

  1. Connectez-vous à la .

  2. Accédez à la base de données et à la table dans le catalogue de données cible.

  3. Sélectionnez la table pour laquelle vous souhaitez accorder des permissions et cliquez sur l'onglet Permission.

  4. Cliquez sur Add Permission.

    1. Principal : sélectionnez DLF User.

    2. Select DLF User : sélectionnez l'utilisateur RAM cible.

    3. Permission : sélectionnez les permissions requises.

  5. Cliquez sur OK.

    Remarque

    EMR Serverless Spark met par défaut en cache les métadonnées et les données DLF. Les modifications de permissions peuvent prendre environ 10 minutes pour être effectives.

    Pour appliquer immédiatement les modifications de permissions, ajoutez spark.sql.catalog.lakehouse.cache-enabled false à la configuration Spark de la passerelle Kyuubi.

Étape 3 : Générer un jeton Kyuubi

  1. Sur la page Kyuubi Gateway, localisez la passerelle cible et, dans la colonne Actions, cliquez sur Token Management.

  2. Cliquez sur Create Token. Dans la boîte de dialogue qui s'affiche, configurez les paramètres suivants et cliquez sur OK.

    Parameter

    Description

    Name

    Nom du nouveau jeton.

    Expired At

    Période d'expiration en jours. Minimum : 1. Par défaut : 365 jours.

    Assigned to

    Sélectionnez l'utilisateur RAM cible.

  3. Copiez les informations du jeton.

    Important

    Copiez le jeton immédiatement : il ne sera plus possible de le consulter ultérieurement. Si le jeton expire ou est perdu, créez-en un nouveau ou réinitialisez le jeton existant.

Étape 4 : Se connecter avec Beeline et vérifier les permissions

  1. Construisez la commande de connexion JDBC.

    beeline -u "jdbc:hive2://<endpoint>:<port>/;transportMode=http;user=<UserName or RoleName>;httpPath=cliservice/token/<Token>"

    Paramètres :

    Parameter

    Description

    <endpoint>

    Endpoint de la passerelle Kyuubi.

    <port>

    443 pour les endpoints publics, 80 pour les endpoints internes.

    <UserName or RoleName>

    Utilisateur RAM ou rôle RAM. Utilisez le nom court ou le nom complet. Exemples :

    • Utilisateur RAM : agent ou agent@xxxx05398154xxxx.onaliyun.com

    • Rôle RAM : AliyunServiceRoleForDataworksEngine

    <Token>

    Le jeton que vous avez généré pour l'utilisateur RAM à l'étape 3.

    [root@master-1-1(xxx) ~]# beeline -u "jdbc:hive2://kyuubi-cn-hangzhou-internal.spark.emr.aliyuncs.com:80;transportMode=http;user=emr_test;httpPath=cliservice/token/j2xxx"
        xxx
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/opt/apps/HIVE/hive-3.1.3-hadoop3.1-1.0.9/lib/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/opt/apps/HADOOP-COMMON/hadoop-3.2.1-1.3.5-alinux3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
    Connecting to jdbc:hive2://kyuubi-cn-hangzhou-internal.spark.emr.aliyuncs.com:80;transportMode=http;user=emr_test;httpPath=cliservice/token/j2xxx
    Connected to: Spark SQL (version 3.5.2-emr)
    Driver: Hive JDBC (version 3.1.3)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    Beeline version 3.1.3 by Apache Hive
    0: jdbc:hive2://kyuubi-cn-hangzhou-internal.s>
  2. Vérifiez le contrôle d'accès.

    • Interrogez une table autorisée :

      SELECT * FROM <database_name>.<authorized_table_name> LIMIT 10;

      Sortie attendue :

      2025-10-24 16:55:45.008 INFO nioEventLoopGroup-7-1 org.
      nnelInactive!
      +-----+----------+
      | id  |   name   |
      +-----+----------+
      | 1   | Alice    |
      | 2   | Bob      |
      | 3   | Charlie  |
      +-----+----------+
      3 rows selected (5.079 seconds)
    • Interrogez une table non autorisée :

      SELECT * FROM <database_name>.<unauthorized_table_name> LIMIT 10;

      La requête échoue avec une erreur de permission telle que emr_test doesn't have privilege SELECT on TABLE. Exemple de sortie d'erreur :

      Caused by: org.apache.paimon.rest.exceptions.ForbiddenException: Forbidden: User acs:ram::xxx:user/emr_test doesn't have privilege SELECT on TABLE default.paimon_tbl
      requestId:xxx
      	at org.apache.paimon.rest.DefaultErrorHandler.accept(DefaultErrorHandler.java:59)
      	at org.apache.paimon.rest.DefaultErrorHandler.accept(DefaultErrorHandler.java:35)
      	at org.apache.paimon.rest.HttpClient.exec(HttpClient.java:156)
      	at org.apache.paimon.rest.HttpClient.get(HttpClient.java:69)
      	at org.apache.paimon.rest.RESTApi.getTable(RESTApi.java:465)

FAQ

Q1 : Pourquoi puis-je toujours interroger une table non autorisée après avoir accordé des permissions ? Causes possibles :

  • Cache des métadonnées DLF : le moteur Spark met en cache le schéma de la table, ce qui peut contourner les vérifications de permissions. Solution : ajoutez spark.sql.catalog.lakehouse.cache-enabled false à votre configuration Spark.

  • Latence des permissions : la synchronisation des permissions DLF peut présenter un court délai, généralement inférieur à 10 secondes. Suggestion : patientez et réessayez, ou vérifiez les permissions dans la console DLF.

Q2 : Que faire si un jeton est perdu ? Le jeton en texte clair n'est affiché qu'une seule fois lors de sa création. Le système ne le stocke pas. Si le jeton est perdu ou divulgué :

  • Sur la page Token Management, localisez l'entrée correspondante et cliquez sur Reset Token.

  • L'ancien jeton est automatiquement invalidé et un nouvel identifiant est généré.

  • Mettez à jour toutes les configurations clientes avec le nouveau jeton.

Q3 : Pourquoi un utilisateur RAM doit-il disposer de la permission Describe sur la base de données default lors de la connexion à la passerelle Kyuubi ? Lorsque la passerelle Kyuubi établit une session Spark, elle charge la base de données default comme contexte initial. Sans accès à cette base de données, l'initialisation de la session échoue et la connexion est interrompue. Cela s'applique même si vos tables métier se trouvent dans d'autres bases de données ; tous les utilisateurs RAM se connectant à la passerelle doivent donc disposer de la permission DescribeDatabase sur la base de données default.

Q4 : Comment utiliser un jeton Kyuubi dans DataWorks pour contrôler l'accès aux données DLF pour EMR Serverless Spark ?

Lorsque vous soumettez une tâche via un nœud Serverless Kyuubi DataWorks, DataWorks transmet automatiquement l'identité d'accès par défaut de la ressource de calcul à la connexion JDBC. Lier des ressources de calcul EMR Serverless Spark. Nœud Serverless Kyuubi.

Annexe : Proxy d'identité et flux de permissions

Les jetons de la passerelle Kyuubi servent d'identifiants d'identité. Les demandes d'accès sont transmises par proxy sous l'identité de l'utilisateur RAM propriétaire du jeton, intégrant ainsi les permissions DLF au flux de travail des requêtes EMR Serverless Spark.

Flux de travail :

  1. Génération du jeton : un jeton est généré pour un utilisateur RAM dans la passerelle Kyuubi, lié de manière unique à l'identité de cet utilisateur.

  2. Authentification du client : le client (tel que Beeline) inclut le jeton et le nom d'utilisateur RAM dans la demande de connexion JDBC adressée à la passerelle Kyuubi.

  3. Proxy d'identité : la passerelle Kyuubi valide le jeton et le moteur Spark emprunte l'identité de l'utilisateur RAM lors des requêtes.

  4. Autorisation DLF : le moteur Spark envoie des requêtes à DLF en tant qu'utilisateur RAM emprunté.

  5. Application des permissions : DLF autorise la requête en fonction de la politique d'accès de l'utilisateur RAM.