Configure a autenticação baseada em tokens para um Kyuubi Gateway no EMR Serverless Spark. Os tokens vinculados a usuários RAM aplicam controle de acesso granular aos dados do catálogo Paimon no Data Lake Formation (DLF) e garantem que cada cliente consulte apenas os dados autorizados.
Casos de uso
Em cenários de análise de dados corporativos, diversos usuários ou aplicações acessam dados por meio de um gateway SQL unificado, como o Kyuubi Gateway. A segurança dos dados exige isolamento de acesso por identidade. Por exemplo, o Analista A consulta apenas relatórios de negócios, enquanto o Engenheiro de Dados B acessa conjuntos de dados brutos. Esta solução isola as permissões de dados em um ambiente multilocatário com autenticação de identidade de ponta a ponta.
Procedimento
Etapa 1: Preparar o ambiente e as permissões
-
Prepare os recursos básicos.
Crie um workspace. Gerencie workspaces.
Crie e inicie um Kyuubi Gateway no workspace. Gerencie Kyuubi Gateways.
Crie um data catalog no DLF com o banco de dados e as tabelas necessários.
-
Configure as permissões do usuário RAM.
Permissões do EMR Serverless Spark: Grant permissions to a RAM user.
Permissões do workspace: adicione o usuário RAM ao workspace e atribua uma função. Gerencie usuários e funções.
Etapa 2: Conceder permissões de tabela no DLF
Conceda ao usuário RAM acesso à tabela de destino no DLF. Também é necessário conceder a permissão Describe no banco de dados default para que o Kyuubi Gateway possa inicializar a sessão do Spark.
Faça login no .
Acesse o banco de dados e a tabela no catálogo de dados de destino.
Selecione a tabela para a qual deseja conceder permissões e clique em na aba Permission.
-
Clique em Add Permission.
Principal: selecione DLF User.
Select DLF User: selecione o usuário RAM de destino.
Permission: selecione as permissões necessárias.
-
Clique em OK.
NotaPor padrão, o EMR Serverless Spark armazena em cache os metadados e dados do DLF. As alterações de permissão podem levar cerca de 10 minutos para entrar em vigor.
Para aplicar as alterações de permissão imediatamente, adicione
spark.sql.catalog.lakehouse.cache-enabled falseà configuração do Spark no Kyuubi Gateway.
Etapa 3: Gerar um token do Kyuubi
Na página Kyuubi Gateway, localize o gateway de destino e, na coluna Actions, clique em Token Management.
-
Clique em Create Token. Na caixa de diálogo exibida, configure os seguintes parâmetros e clique em OK.
Parâmetro
Descrição
Name
Nome do novo token.
Expired At
Período de validade em dias. Mínimo: 1. Padrão: 365 dias.
Assigned to
Selecione o usuário RAM de destino.
-
Copie as informações do token.
ImportanteCopie o token imediatamente, pois ele não ficará visível novamente. Se o token expirar ou for perdido, crie um novo ou redefina o token existente.
Etapa 4: Conectar-se com o Beeline e verificar as permissões
-
Monte o comando de conexão JDBC.
beeline -u "jdbc:hive2://<endpoint>:<port>/;transportMode=http;user=<UserName or RoleName>;httpPath=cliservice/token/<Token>"Parâmetros:
Parâmetro
Descrição
<endpoint>Endpoint do Kyuubi Gateway.
<port>443para endpoints públicos,80para endpoints internos.<UserName or RoleName>Usuário RAM ou função RAM. Use o nome curto ou o nome completo. Exemplos:
-
Usuário RAM:
agentouagent@xxxx05398154xxxx.onaliyun.com -
Função RAM:
AliyunServiceRoleForDataworksEngine
<Token>O token gerado para o usuário RAM na Etapa 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> -
-
Verifique o controle de acesso.
-
Consulte uma tabela autorizada:
SELECT * FROM <database_name>.<authorized_table_name> LIMIT 10;Saída esperada:
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) -
Consulte uma tabela não autorizada:
SELECT * FROM <database_name>.<unauthorized_table_name> LIMIT 10;A consulta falha com um erro de permissão, como
emr_test doesn't have privilege SELECT on TABLE. Exemplo de saída de erro: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)
-
Perguntas frequentes
P1: Por que ainda consigo consultar uma tabela não autorizada após conceder permissões? Possíveis causas:
Cache de metadados do DLF: o mecanismo Spark armazena em cache o esquema da tabela, o que pode ignorar as verificações de permissão. Solução: adicione
spark.sql.catalog.lakehouse.cache-enabled falseà sua configuração do Spark.Latência de permissão: a sincronização de permissões do DLF pode apresentar um pequeno atraso, geralmente inferior a 10 segundos. Sugestão: aguarde e tente novamente ou verifique as permissões no console do DLF.
P2: O que devo fazer se perder um token? O token em texto simples é exibido apenas uma vez no momento da criação e o sistema não o armazena. Se o token for perdido ou vazado:
Na página Token Management, localize a entrada correspondente e clique em Reset Token.
O sistema invalida automaticamente o token antigo e gera uma nova credencial.
Atualize todas as configurações de cliente com o novo token.
P3: Por que é necessário conceder a permissão Describe no banco de dados default ao usuário RAM ao conectar-se ao Kyuubi Gateway? Ao estabelecer uma sessão do Spark, o Kyuubi Gateway carrega o banco de dados default como contexto inicial. Sem acesso a esse banco de dados, a inicialização da sessão falha e a conexão é encerrada. Isso se aplica mesmo que suas tabelas de negócios estejam em outros bancos de dados. Portanto, todos os usuários RAM que se conectam ao gateway devem ter a permissão DescribeDatabase no banco de dados default.
P4: Como usar um token do Kyuubi no DataWorks para controlar o acesso a dados do DLF no EMR Serverless Spark?
Ao enviar um job por meio de um nó Serverless Kyuubi do DataWorks, o sistema passa automaticamente a identidade de acesso padrão do recurso de computação para a conexão JDBC. Bind EMR Serverless Spark computing resources. Serverless Kyuubi node.
Apêndice: Proxy de identidade e fluxo de permissões
Os tokens do Kyuubi Gateway funcionam como credenciais de identidade. O sistema envia solicitações de acesso via proxy sob a identidade do usuário RAM proprietário do token e integra as permissões do DLF ao fluxo de trabalho de consultas do EMR Serverless Spark.
Fluxo de trabalho:
Geração de token: gere um token para um usuário RAM no Kyuubi Gateway, vinculado exclusivamente à identidade desse usuário.
Autenticação do cliente: o cliente (como o Beeline) inclui o token e o nome de usuário RAM na solicitação de conexão JDBC ao Kyuubi Gateway.
Proxy de identidade: o Kyuubi Gateway valida o token e o mecanismo Spark assume a identidade do usuário RAM durante as consultas.
Autorização do DLF: o mecanismo Spark envia solicitações ao DLF como o usuário RAM representado.
Aplicação de permissões: o DLF autoriza a solicitação com base na política de acesso do usuário RAM.