Tutorial: Configurar políticas do Apache Kafka no HDInsight com o Enterprise Security Package
Saiba como configurar políticas do Apache Ranger para clusters Apache Kafka do Enterprise Security Package (ESP). Os clusters ESP estão conectados a um domínio, permitindo que os usuários se autentiquem com credenciais de domínio. Neste tutorial, você cria duas políticas do Ranger para restringir o acesso aos tópicos sales
e marketingspend
.
Neste tutorial, você aprenderá a:
- Crie usuários de domínio.
- Crie políticas do Ranger.
- Crie tópicos em um cluster do Kafka.
- Teste as políticas do Ranger.
Pré-requisito
Um cluster do Kafka do HDInsight com o Enterprise Security Package.
Conectar-se à interface do usuário de Administração do Apache Ranger
Em um navegador, conecte-se à interface do usuário do administrador do Ranger usando o URL
https://ClusterName.azurehdinsight.net/Ranger/
. Lembre-se de alterarClusterName
para o nome do seu cluster Kafka. As credenciais do Ranger não são as mesmas que as credenciais de cluster do Hadoop. Para impedir que os navegadores usem credenciais do Hadoop em cache, use uma nova janela do navegador InPrivate para se conectar à interface de administração do Ranger Admin.Entre usando suas credenciais de administrador do Microsoft Entra. As credenciais de administrador do Microsoft Entra não são as mesmas que as credenciais do cluster HDInsight ou as credenciais SSH do nó HDInsight do Linux.
Crie usuários de domínio
Para saber como criar os usuários de domínio sales_user e marketing_user, confira Criar um cluster do HDInsight com o Enterprise Security Package. Em um cenário de produção, os usuários de domínio vêm do seu locatário do Microsoft Entra ID.
Criar uma política do Ranger
Crie uma política de Ranger para sales_user e marketing_user.
Abra o interface do usuário administrador do Ranger.
Em Kafka, selecione <ClusterName>_kafka. Uma política pré-configurada pode ser listada.
Selecione Adicionar nova política e insira os seguintes valores:
Configuração Valor sugerido Nome da política Política de vendas do HDInsight* Tópico vendas * Selecionar usuário sales_user1 Permissões publicar, consumir, criar Os curingas a seguir podem ser incluídos no nome do tópico:
*
indica zero ou mais ocorrências de caracteres.?
indica um caractere único.
Aguarde alguns instantes para que o Ranger sincronize com o Microsoft Entra ID se um usuário de domínio não for preenchido automaticamente para Selecionar usuário.
Selecione Adicionar para salvar a política.
Selecione Adicionar nova política e, em seguida, insira os seguintes valores:
Configuração Valor sugerido Nome da política Política de marketing do HDInsight Tópico marketingspend
Selecionar usuário marketing_user1 Permissões publicar, consumir, criar Selecione Adicionar para salvar a política.
Criar tópicos em um cluster do Kafka com ESP
Para criar dois tópicos, salesevents
e marketingspend
:
Use o seguinte comando para abrir uma conexão SSH (Secure Shell) com o cluster:
ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
Substitua
DOMAINADMIN
pelo usuário administrador do cluster configurado durante a criação do cluster. SubstituaCLUSTERNAME
pelo nome do cluster. Se solicitado, insira a senha da conta de usuário administrador. Para saber mais sobre como usar oSSH
com HDInsight, confira Usar SSH com HDInsight.Use os seguintes comandos para salvar o nome do cluster em uma variável e instalar um utilitário de análise JSON
jq
. Quando solicitado, insira o nome do cluster Kafka.sudo apt -y install jq read -p 'Enter your Kafka cluster name:' CLUSTERNAME
Use os comandos a seguir para obter os hosts do broker do Kafka. Quando solicitado, digite a senha da conta de administrador do cluster.
export KAFKABROKERS=`curl -sS -u admin -G https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/services/KAFKA/components/KAFKA_BROKER | jq -r '["\(.host_components[].HostRoles.host_name):9092"] | join(",")' | cut -d',' -f1,2`; \
Antes de continuar, talvez seja necessário configurar seu ambiente de desenvolvimento se ainda não tiver feito isso. Você precisa de componentes como o JDK do Java, o Apache Maven e um cliente SSH com o Secure Copy (SCP). Para obter mais informações, confira Instruções de configuração.
Baixe os exemplos de consumidor do produtor ingressado no domínio do Apache Kafka.
Siga as etapas 2 e 3 em Compilar e implantar o exemplo em Tutorial: Usar as APIs de produtor e consumidor do Apache Kafka.
Observação
Para este tutorial, use
kafka-producer-consumer.jar
no projetoDomainJoined-Producer-Consumer
. Não use aquele no projetoProducer-Consumer
, que é para cenários não conectados ao domínio.Execute os comandos a seguir:
java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar create salesevents $KAFKABROKERS java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar create marketingspend $KAFKABROKERS
Testar as políticas do Ranger
Com base nas políticas do Ranger configuradas, sales_user pode produzir/consumir o tópico salesevents
, mas não o tópico marketingspend
. Por outro lado, marketing_user pode produzir/consumir o tópico marketingspend
, mas não o tópico salesevents
.
Abra uma nova conexão de SSH ao cluster. Use o seguinte comando para entrar como sales_user1:
ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
Use os nomes de broker da seção anterior para definir a seguinte variável de ambiente:
export KAFKABROKERS=<brokerlist>:9092
Exemplo:
export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092
Siga a etapa 3 em Compilar e implantar o exemplo no Tutorial: Usar as APIs de Produtor e Consumidor do Apache Kafka para garantir que o
kafka-producer-consumer.jar
também esteja disponível para sales_user.Observação
Para este tutorial, use
kafka-producer-consumer.jar
no projeto "DomainJoined-Producer-Consumer". Não use aquele no projeto "Produtor-Consumidor", que é para cenários não conectados ao domínio.Verifique se sales_user1 pode produzir para o tópico
salesevents
executando o seguinte comando:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS
Execute o seguinte comando para consumir do tópico
salesevents
:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
Verifique se você pode ler as mensagens.
Verifique se o sales_user1 não pode produzir para o tópico
marketingspend
executando o seguinte comando na mesma janela SSH:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer marketingspend $KAFKABROKERS
Ocorre um erro de autorização e ele pode ser ignorado.
Observe que marketing_user1 não pode consumir do tópico
salesevents
.Repita as etapas anteriores de 1 a 3, mas desta vez como marketing_user1.
Execute o seguinte comando para consumir do tópico
salesevents
:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
As mensagens anteriores não podem ser vistas.
Exiba os eventos de auditoria de acesso da interface do usuário do Ranger.
Produzir e consumir tópicos no Kafka do ESP usando o console
Observação
Você não pode usar comandos de console para criar tópicos. Em vez disso, você deve usar o código Java demonstrado na seção anterior. Para obter mais informações, confira Criar tópicos em um cluster Kafka com ESP.
Para produzir e consumir tópicos no Kafka do ESP usando o console:
Use
kinit
com o nome de usuário. Insira a senha quando solicitado.kinit sales_user1
Defina variáveis de ambiente:
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf" export KAFKABROKERS=<brokerlist>:9092
Gere mensagens para o tópico
salesevents
:/usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
Consuma mensagens do tópico
salesevents
:/usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
Produzir e consumir tópicos para sessão de execução longa no Kafka do ESP
O cache de tíquetes do Kerberos tem uma limitação de expiração. Para uma sessão de execução longa, use um keytab em vez de renovar o cache de tíquetes manualmente.
Para usar o keytab na sessão de execução longa sem kinit
:
Crie um novo keytab para o usuário de domínio:
ktutil addent -password -p <user@domain> -k 1 -e RC4-HMAC wkt /tmp/<user>.keytab q
Crie
/home/sshuser/kafka_client_jaas.conf
. Ele deve conter as seguintes linhas:KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/tmp/<user>.keytab" useTicketCache=false serviceName="kafka" principal="<user@domain>"; };
Substitua
java.security.auth.login.config
por/home/sshuser/kafka_client_jaas.conf
e produza ou consuma o tópico usando o console ou a API:export KAFKABROKERS=<brokerlist>:9092 # console tool export KAFKA_OPTS="-Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf" /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT # API java -jar -Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS java -jar -Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
Limpar os recursos
Se você não quiser continuar a usar este aplicativo, exclua o cluster do Kafka criado:
- Entre no portal do Azure.
- Na caixa Pesquisar na parte superior, insira HDInsight.
- Em Serviços, selecione clusters do HDInsight.
- Na lista de clusters do HDInsight exibida, selecione … ao lado do cluster que você criou para este tutorial.
- Selecione Excluir>Sim.
Solução de problemas
Se kafka-producer-consumer.jar
não funcionar em um cluster conectado ao domínio, verifique se você está usando kafka-producer-consumer.jar
no projeto DomainJoined-Producer-Consumer
. Não use aquele no projeto Producer-Consumer
, que é para cenários não conectados ao domínio.