Samouczek: konfigurowanie zasad platformy Apache Kafka w usłudze HDInsight przy użyciu pakietu Enterprise Security

Dowiedz się, jak skonfigurować zasady platformy Apache Ranger na potrzeby klastrów Apache Kafka pakietów Enterprise Security Package (ESP). Klastry ESP są łączone z domeną, co pozwala użytkownikom na uwierzytelnianie przy użyciu poświadczeń domeny. Korzystając z tego artykułu, utworzysz dwie zasady platformy Ranger, aby ograniczyć dostęp do tematów sales i marketingspend.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie użytkowników domeny.
  • Tworzenie zasad platformy Ranger.
  • Tworzenie tematów w klastrze platformy Kafka.
  • Testowanie zasad platformy Ranger.

Warunek wstępny

Klaster platformy Kafka usługi HDInsight z pakietem Enterprise Security.

Łączenie z interfejsem użytkownika administratora platformy Apache Ranger

  1. W przeglądarce nawiąż połączenie z interfejsem użytkownika platformy Ranger Administracja przy użyciu adresu URL https://ClusterName.azurehdinsight.net/Ranger/. Pamiętaj, aby zmienić wartość ClusterName na nazwę klastra platformy Kafka. Poświadczenia platformy Ranger nie są takie same jak poświadczenia klastra Hadoop. Aby zapobiec używaniu w przeglądarce buforowanych poświadczeń usługi Hadoop, należy połączyć się z interfejsem użytkownika administratora platformy Ranger w nowym oknie przeglądarki InPrivate.

  2. Zaloguj się przy użyciu poświadczeń administratora firmy Microsoft Entra. Poświadczenia administratora usługi Microsoft Entra nie są takie same jak poświadczenia klastra usługi HDInsight ani poświadczenia protokołu SSH węzła usługi HDInsight w systemie Linux.

    Screenshot that shows the HDInsight Apache Ranger Admin UI.

Tworzenie użytkowników domeny

Aby dowiedzieć się, jak utworzyć sales_user i marketing_user użytkowników domeny, zobacz Tworzenie klastra usługi HDInsight przy użyciu pakietu Enterprise Security. W scenariuszu produkcyjnym użytkownicy domeny pochodzą z dzierżawy identyfikatora Entra firmy Microsoft.

Tworzenie zasad platformy Ranger

Utwórz zasady platformy Ranger dla użytkowników sales_user i marketing_user.

  1. Otwórz interfejs użytkownika administratora platformy Ranger.

  2. W obszarze Kafka wybierz pozycję <ClusterName>_kafka. Na liście może znajdować się jedna wstępnie skonfigurowana zasada.

  3. Wybierz pozycję Dodaj nowe zasady i wprowadź następujące wartości:

    Ustawienie Sugerowana wartość
    Policy Name (Nazwa zasad) hdi sales* policy
    Temat sales*
    Select User (Wybierz użytkownika) sales_user1
    Uprawnienia publish, consume, create

    W nazwie tematu można uwzględnić następujące symbole wieloznaczne:

    • * oznacza zero lub więcej wystąpień znaków.
    • ? oznacza pojedynczy znak.

    Screenshot that shows the Apache Ranger Admin UI Create Policy1.

    Poczekaj chwilę na zsynchronizowanie platformy Ranger z identyfikatorem Entra firmy Microsoft, jeśli użytkownik domeny nie zostanie automatycznie wypełniony dla pozycji Wybierz użytkownika.

  4. Wybierz pozycję Dodaj , aby zapisać zasady.

  5. Wybierz pozycję Dodaj nowe zasady , a następnie wprowadź następujące wartości:

    Ustawienie Sugerowana wartość
    Policy Name (Nazwa zasad) hdi marketing policy
    Temat marketingspend
    Select User (Wybierz użytkownika) marketing_user1
    Uprawnienia publish, consume, create

    Screenshot that shows the Apache Ranger Admin UI Create Policy2.

  6. Wybierz pozycję Dodaj , aby zapisać zasady.

Tworzenie tematów w klastrze platformy Kafka przy użyciu pakietu ESP

Aby utworzyć dwa tematy — salesevents i marketingspend:

  1. Użyj następującego polecenia, aby otworzyć połączenie protokołu Secure Shell (SSH) z klastrem:

    ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
    

    Zastąp DOMAINADMIN element użytkownikiem administracyjnym klastra skonfigurowanym podczas tworzenia klastra. Zastąp ciąg CLUSTERNAME nazwą klastra. Jeśli zostanie wyświetlony monit, wprowadź hasło konta użytkownika będącego administratorem. Aby uzyskać więcej informacji na temat używania polecenia SSH w usłudze HDInsight, zobacz Korzystanie z protokołu SSH w usłudze HDInsight.

  2. Użyj następujących poleceń, aby zapisać nazwę klastra w zmiennej i zainstalować narzędzie do analizy JSON, jq. Po wyświetleniu monitu wprowadź nazwę klastra platformy Kafka.

    sudo apt -y install jq
    read -p 'Enter your Kafka cluster name:' CLUSTERNAME
    
  3. Użyj następujących poleceń, aby uzyskać hosty brokera platformy Kafka. Po wyświetleniu monitu wprowadź hasło konta administratora klastra.

    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`; \
    

    Przed kontynuowaniem może być konieczne skonfigurowanie środowiska deweloperskiego, jeśli jeszcze tego nie zrobiono. Potrzebne są składniki, takie jak zestaw Java JDK, Apache Maven i klient SSH z funkcją Secure Copy (SCP). Aby uzyskać więcej informacji, zobacz Instrukcje dotyczące instalacji.

  4. Pobierz przykłady odbiorców i producentów przyłączonych do domeny na platformie Apache Kafka.

  5. Wykonaj kroki 2 i 3 w obszarze Kompilowanie i wdrażanie przykładu w artykule Samouczek: korzystanie z interfejsów API producentów i konsumentów platformy Apache Kafka.

    Uwaga

    Na potrzeby tego samouczka użyj kafka-producer-consumer.jar polecenia w DomainJoined-Producer-Consumer ramach projektu. Nie używaj tego elementu w projekcie Producer-Consumer , który jest przeznaczony dla scenariuszy nieprzyłączonych do domeny.

  6. Uruchom następujące polecenia:

    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
    

Testowanie zasad platformy Ranger

Na podstawie skonfigurowanych zasad platformy Ranger sales_user może tworzyć/wykorzystywać tematsalesevents, ale nie temat marketingspend. Z drugiej strony marketing_user może tworzyć/wykorzystywać tematmarketingspend, ale nie temat salesevents.

  1. Otwórz nowe połączenie SSH z klastrem. Użyj następującego polecenia, aby zalogować się jako użytkownik sales_user1:

    ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Użyj nazw brokera z poprzedniej sekcji, aby ustawić następujące zmienne środowiskowe:

    export KAFKABROKERS=<brokerlist>:9092
    

    Przykład: export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092

  3. Wykonaj krok 3 w obszarze Kompilowanie i wdrażanie przykładu w artykule Samouczek: użyj interfejsów API producentów i konsumentów platformy Apache Kafka, aby upewnić się, że kafka-producer-consumer.jar jest on również dostępny do sales_user.

    Uwaga

    Na potrzeby tego samouczka użyj kafka-producer-consumer.jar projektu "DomainJoined-Producer-Consumer". Nie używaj go w projekcie "Producent-konsument", który jest przeznaczony dla scenariuszy nieprzyłączonych do domeny.

  4. Sprawdź, czy sales_user1 może utworzyć temat salesevents , uruchamiając następujące polecenie:

    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. Uruchom następujące polecenie, aby skorzystać z tematu 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
    

    Sprawdź, czy możesz odczytać komunikaty.

  6. Sprawdź, czy sales_user1 nie może utworzyć do tematu marketingspend , uruchamiając następujące polecenie w tym samym oknie 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
    

    Wystąpi błąd autoryzacji, który można zignorować.

  7. Zwróć uwagę, że marketing_user1 nie może korzystać z tematu salesevents.

    Powtórz powyższe kroki od 1 do 3, ale tym razem jako marketing_user1.

    Uruchom następujące polecenie, aby skorzystać z tematu 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
    

    Poprzednie komunikaty nie będą widoczne.

  8. Wyświetl zdarzenia dostępu inspekcji z poziomu interfejsu użytkownika platformy Ranger.

    Screenshot that shows the Ranger UI policy audit access events.

Tworzenie i używanie tematów na platformie ESP Kafka przy użyciu konsoli programu

Uwaga

Nie można używać poleceń konsoli do tworzenia tematów. Zamiast tego należy użyć kodu Java przedstawionego w poprzedniej sekcji. Aby uzyskać więcej informacji, zobacz Create topics in a Kafka cluster with ESP (Tworzenie tematów w klastrze kafka przy użyciu esp).

Aby utworzyć tematy i korzystać z nich na platformie KAFka ze strony ze stanem rejestracji przy użyciu konsoli:

  1. Użyj z kinit nazwą użytkownika. Wprowadź hasło po wyświetleniu monitu.

    kinit sales_user1
    
  2. Ustaw zmienne środowiskowe:

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf"
    export KAFKABROKERS=<brokerlist>:9092
    
  3. Tworzenie komunikatów w temacie salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    
  4. Korzystanie z komunikatów z tematu salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
    

Tworzenie tematów i korzystanie z nich na potrzeby długotrwałej sesji na platformie Kafka esp

Pamięć podręczna biletów Kerberos ma ograniczenie wygaśnięcia. W przypadku długotrwałej sesji użyj tabki kluczy zamiast ręcznego odnawiania pamięci podręcznej biletów.

Aby użyć tab klucza w długotrwałej sesji bez kinitpolecenia :

  1. Utwórz nową kartę klucza dla użytkownika domeny:

    ktutil
    addent -password -p <user@domain> -k 1 -e RC4-HMAC
    wkt /tmp/<user>.keytab
    q
    
    
  2. Utwórz plik /home/sshuser/kafka_client_jaas.conf. Powinny mieć następujące wiersze:

    KafkaClient {
     com.sun.security.auth.module.Krb5LoginModule required
     useKeyTab=true
     storeKey=true
     keyTab="/tmp/<user>.keytab"
     useTicketCache=false
     serviceName="kafka"
     principal="<user@domain>";
    };
    
  3. Zastąp java.security.auth.login.config ciąg ciągiem /home/sshuser/kafka_client_jaas.conf i wygeneruj lub użyj tematu przy użyciu konsoli lub interfejsu 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
    

Czyszczenie zasobów

Jeśli nie zamierzasz nadal korzystać z tej aplikacji, usuń utworzony klaster Kafka:

  1. Zaloguj się w witrynie Azure Portal.
  2. W polu Wyszukiwania u góry wprowadź wartość HDInsight.
  3. W obszarze Usługi wybierz pozycję Klastry usługi HDInsight.
  4. Na wyświetlonej liście klastrów usługi HDInsight wybierz pozycję ... obok klastra utworzonego na potrzeby tego samouczka.
  5. Wybierz pozycję Usuń>tak.

Rozwiązywanie problemów

Jeśli kafka-producer-consumer.jar nie działa w klastrze przyłączonym do domeny, upewnij się, że używasz kafka-producer-consumer.jar go w projekcie DomainJoined-Producer-Consumer . Nie używaj tego elementu w projekcie Producer-Consumer , który jest przeznaczony dla scenariuszy nieprzyłączonych do domeny.

Następne kroki