Tutorial: Configurar políticas do Apache Kafka no HDInsight com o pacote de segurança empresarial
Saiba como configurar políticas do Apache Ranger para clusters Apache Kafka do Enterprise Security Package (ESP). Os clusters do ESP estão ligados a um domínio, permitindo que os utilizadores sejam autenticados com credenciais do domínio. Neste tutorial, vai criar duas políticas do Ranger para restringir o acesso aos tópicos sales
e marketingspend
.
Neste tutorial, irá aprender a:
- Crie usuários de domínio.
- Crie políticas de Ranger.
- Crie tópicos em um cluster Kafka.
- Políticas de teste Ranger.
Pré-requisito
Um cluster HDInsight Kafka com pacote de segurança empresarial.
Ligar à IU do Apache Ranger Admin
A partir de um navegador, conecte-se à interface do usuário (UI) do Ranger Admin usando o URL
https://ClusterName.azurehdinsight.net/Ranger/
. Não se esqueça de alterarClusterName
para o nome do cluster do Kafka. As credenciais do Ranger não são iguais às credenciais do cluster Hadoop. Para impedir que os browsers utilizem credenciais em cache do Hadoop, utilize uma nova janela do browser InPrivate para ligar à IU 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 de cluster HDInsight ou as credenciais SSH do nó HDInsight do Linux.
Criar utilizadores de domínio
Para saber como criar o sales_user e marketing_user usuários do domínio, consulte Criar um cluster HDInsight com o Pacote de Segurança Empresarial. Em um cenário de produção, os usuários do domínio vêm do locatário do Microsoft Entra ID.
Criar uma política Ranger
Crie uma política do Ranger para sales_user e marketing_user.
Abra a IU do Ranger Admin.
Em Kafka, selecione <ClusterName>_kafka. Uma política pré-configurada pode estar listada.
Selecione Adicionar nova política e insira os seguintes valores:
Definição Valor sugerido Nome da Política Política de vendas do HDInsight* Tópico sales* Selecionar Utilizador sales_user1 Permissões publicar, consumir, criar Os carateres universais seguintes podem ser incluídos no nome do tópico:
*
indica zero ou mais ocorrências de caracteres.?
indica um único caractere.
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 insira os seguintes valores:
Definição Valor sugerido Nome da Política Política de marketing do HDInsight Tópico marketingspend
Selecionar Utilizador marketing_user1 Permissões publicar, consumir, criar Selecione Adicionar para salvar a política.
Criar tópicos num cluster do Kafka com o 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, digite a senha da conta de usuário administrador. Para obter mais informações sobre como utilizarSSH
com o HDInsight, veja Utilizar SSH com o HDInsight.Utilize os comandos seguintes para guardar o nome do cluster numa variável e instalar um utilitário de análise JSON
jq
. Quando lhe for pedido, introduza o nome do cluster do Kafka.sudo apt -y install jq read -p 'Enter your Kafka cluster name:' CLUSTERNAME
Use os seguintes comandos para obter os hosts do corretor Kafka. Quando lhe for pedido, introduza a palavra-passe 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 prosseguir, talvez seja necessário configurar seu ambiente de desenvolvimento, caso ainda não o tenha feito. Você precisa de componentes como Java JDK, Apache Maven e um cliente SSH com Secure Copy (SCP). Para obter mais informações, consulte Instruções de configuração.
Transfira os exemplos de consumidor produtor associados a um domínio do Apache Kafka.
Siga as etapas 2 e 3 em Compilar e implantar o exemplo em Tutorial: Use as APIs de produtor e consumidor do Apache Kafka.
Nota
Para este tutorial, use
kafka-producer-consumer.jar
noDomainJoined-Producer-Consumer
projeto. Não use oProducer-Consumer
do projeto, que é para cenários sem ingresso no domínio.Execute os seguintes comandos:
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 de Ranger configuradas, sales_user pode produzir/consumir o tópicosalesevents
, mas não o tópicomarketingspend
. Por outro lado, marketing_user pode produzir/consumir o tópicomarketingspend
, mas não o tópicosalesevents
.
Abra uma nova ligação SSH ao cluster. Utilize o seguinte comando para iniciar sessão 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 Criar e implantar o exemplo em Tutorial: Use as APIs de produtor e consumidor do Apache Kafka para garantir que
kafka-producer-consumer.jar
também esteja disponível para sales_user.Nota
Para este tutorial, use
kafka-producer-consumer.jar
o projeto "DomainJoined-Producer-Consumer". Não use o do projeto "Produtor-Consumidor", que é para cenários não associados ao domínio.Verifique se sales_user1 pode produzir para 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 a partir 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 consegue 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
Um erro de autorização ocorre e pode ser ignorado.
Observe que marketing_user1 não pode consumir do tópico
salesevents
.Repita os passos 1 a 3 anteriores, mas desta vez como marketing_user1.
Execute o seguinte comando para consumir a partir 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.
Veja os eventos de acesso de auditoria da IU do Ranger.
Produzir e consumir tópicos no ESP Kafka usando o console
Nota
Não é possível usar comandos do 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, consulte Criar tópicos em um cluster Kafka com ESP.
Para produzir e consumir tópicos no ESP Kafka usando o console:
Use
kinit
com o nome de usuário do usuário. Digite a senha quando solicitado.kinit sales_user1
Definir 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
Produzir 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
Consumir 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
Produza e consuma tópicos para uma sessão de longa duração no ESP Kafka
O cache de tíquetes Kerberos tem uma limitação de expiração. Para uma sessão de longa duração, use um keytab em vez de renovar o cache de tíquetes manualmente.
Para usar um keytab em uma sessão de longa duração sem kinit
:
Crie um novo keytab para o usuário do seu 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
. Deve ter 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
e/home/sshuser/kafka_client_jaas.conf
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
Clean up resources (Limpar recursos)
Se você não vai continuar a usar este aplicativo, exclua o cluster Kafka que você criou:
- Inicie sessão no portal do Azure.
- Na caixa Pesquisar na parte superior, digite HDInsight.
- Em Serviços, selecione Clusters HDInsight.
- Na lista de clusters HDInsight exibida, selecione o botão ... ao lado do cluster que você criou para este tutorial.
- Selecione Eliminar>Sim.
Resolução de Problemas
Se kafka-producer-consumer.jar
não funcionar em um cluster associado a um domínio, verifique se você está usando kafka-producer-consumer.jar
no DomainJoined-Producer-Consumer
projeto. Não use o Producer-Consumer
do projeto, que é para cenários sem ingresso no domínio.