Partilhar via


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

  1. 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 alterar ClusterName 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.

  2. 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.

    Captura de ecrã que mostra a IU de administração do HDInsight Apache Ranger.

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.

  1. Abra a IU do Ranger Admin.

  2. Em Kafka, selecione <ClusterName>_kafka. Uma política pré-configurada pode estar listada.

  3. 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.

    Captura de tela que mostra a UI de administração do Apache Ranger Criar Política 1.

    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.

  4. Selecione Adicionar para salvar a política.

  5. 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

    Captura de tela que mostra a UI Admin do Apache Ranger Criar Política 2.

  6. 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:

  1. 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. Substitua CLUSTERNAME pelo nome do cluster. Se solicitado, digite a senha da conta de usuário administrador. Para obter mais informações sobre como utilizar SSH com o HDInsight, veja Utilizar SSH com o HDInsight.

  2. 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
    
  3. 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.

  4. Transfira os exemplos de consumidor produtor associados a um domínio do Apache Kafka.

  5. 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 no DomainJoined-Producer-Consumer projeto. Não use o Producer-Consumer do projeto, que é para cenários sem ingresso no domínio.

  6. 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.

  1. 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
    
  2. 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

  3. 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.

  4. 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
    
  5. 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.

  6. 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.

  7. 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.

  8. Veja os eventos de acesso de auditoria da IU do Ranger.

    Captura de ecrã que mostra os eventos de acesso à auditoria da política de IU da Ranger (Ranger UI).

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:

  1. Use kinit com o nome de usuário do usuário. Digite a senha quando solicitado.

    kinit sales_user1
    
  2. 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
    
  3. 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
    
  4. 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:

  1. 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
    
    
  2. 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>";
    };
    
  3. 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:

  1. Inicie sessão no portal do Azure.
  2. Na caixa Pesquisar na parte superior, digite HDInsight.
  3. Em Serviços, selecione Clusters HDInsight.
  4. Na lista de clusters HDInsight exibida, selecione o botão ... ao lado do cluster que você criou para este tutorial.
  5. 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.

Próximos passos