자습서 - Enterprise Security Package를 사용하여 HDInsight에서 Apache Kafka 정책 구성

ESP(Enterprise Security Package) Apache Kafka 클러스터용 Apache Ranger 정책을 구성하는 방법을 알아봅니다. ESP 클러스터는 도메인에 연결되므로 사용자가 도메인 자격 증명을 사용하여 인증할 수 있습니다. 이 자습서에서는 salesmarketingspend 항목 액세스를 제한하는 Range 정책 두 개를 만듭니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 도메인 사용자를 만듭니다.
  • Ranger 정책을 만듭니다.
  • Kafka 클러스터에서 토픽을 만듭니다.
  • Ranger 정책을 테스트합니다.

전제 조건

엔터프라이즈 보안 패키지있는 HDInsight Kafka 클러스터입니다.

Apache Ranger 관리 UI에 연결

  1. 브라우저에서 URL https://ClusterName.azurehdinsight.net/Ranger/을 사용하여 Ranger Admin UI(사용자 인터페이스)에 연결합니다. ClusterName은 Kafka 클러스터 이름으로 변경해야 합니다. Ranger 자격 증명은 Hadoop 클러스터 자격 증명과 동일하지 않습니다. 브라우저가 캐시된 Hadoop 자격 증명을 사용하지 않도록 하려면 새 InPrivate 브라우저 창을 사용하여 Ranger 관리 UI에 연결합니다.

  2. Microsoft Entra 관리자 자격 증명을 사용하여 로그인합니다. Microsoft Entra 관리자 자격 증명은 HDInsight 클러스터 자격 증명 또는 Linux HDInsight 노드 SSH 자격 증명과는 다릅니다.

    HDInsight Apache Ranger 관리자 UI를 보여 주는 스크린샷

도메인 사용자 만들기

sales_user 만들고 도메인 사용자를 marketing_user 방법을 알아보려면 Enterprise Security Package를 사용하여 HDInsight 클러스터 만들기를 참조하세요. 프로덕션 시나리오에서 도메인 사용자는 Microsoft Entra ID 테넌트에서 제공됩니다.

Ranger 정책 만들기

sales_usermarketing_user 사용자에 대해 Ranger 정책을 만듭니다.

  1. Ranger 관리 UI를 엽니다.

  2. Kafka에서 ClusterName>_kafka 선택합니다<. 미리 구성된 정책 하나가 나열될 수 있습니다.

  3. 새 정책 추가를 선택하고 다음 값을 입력합니다.

    설정 제안 값
    정책 이름 HDInsight 판매* 정책
    항목 sales*
    사용자 선택 sales_user1
    사용 권한 게시, 사용, 만들기

    항목 이름에 다음 와일드카드를 포함할 수 있습니다.

    • *는 문자가 0개 이상 나옴을 나타냅니다.
    • ?는 문자 하나를 나타냅니다.

    Apache Ranger 관리자 UI 정책 만들기 1을 보여 주는 스크린샷

    도메인 사용자가 사용자 선택으로 자동으로 채워지지 않는 경우 Ranger가 Microsoft Entra ID와 동기화될 때까지 잠시 기다립니다.

  4. 추가를 선택하여 정책을 저장합니다.

  5. 새 정책 추가를 선택하고 다음 값을 입력합니다.

    설정 제안 값
    정책 이름 HDInsight 마케팅 정책
    항목 marketingspend
    사용자 선택 marketing_user1
    사용 권한 게시, 사용, 만들기

    Apache Ranger 관리자 UI 정책 만들기 2를 보여 주는 스크린샷

  6. 추가를 선택하여 정책을 저장합니다.

ESP를 사용하여 Kafka 클러스터에서 항목 만들기

두 개의 토픽, saleseventsmarketingspend를 만들려면:

  1. 다음 명령을 사용하여 클러스터에 대한 SSH(Secure Shell) 연결을 엽니다.

    ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
    

    클러스터를 만드는 동안 구성된 클러스터의 관리 사용자로 바꿉 DOMAINADMIN 니다. CLUSTERNAME을 클러스터의 이름으로 바꿉니다. 메시지가 표시되면 관리 사용자 계정의 암호를 입력합니다. HDInsight에서의 SSH 사용에 대한 자세한 내용은 HDInsight에서 SSH 사용을 참조하세요.

  2. 다음 명령을 사용하여 변수에 클러스터 이름을 저장하고 JSON 구문 분석 유틸리티 jq를 설치합니다. 메시지가 표시되면 Kafka 클러스터 이름을 입력합니다.

    sudo apt -y install jq
    read -p 'Enter your Kafka cluster name:' CLUSTERNAME
    
  3. 다음 명령을 사용하여 Kafka broker 호스트를 가져옵니다. 메시지가 표시되면 클러스터 관리 계정의 암호를 입력합니다.

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

    계속하기 전에 아직 개발 환경을 설정하지 않은 경우 설정해야 할 수 있습니다. Java JDK, Apache Maven 및 SCP(Secure Copy)를 사용하는 SSH 클라이언트와 같은 구성 요소가 필요합니다. 자세한 내용은 설치 지침을 참조 하세요.

  4. Apache Kafka 도메인 조인 생산자 소비자 예제를 다운로드합니다.

  5. 빌드에서 2단계와 3단계를 수행하고 자습서의 예제를 배포합니다. Apache Kafka 생산자 및 소비자 API를 사용합니다.

    참고 항목

    이 자습서에서는 프로젝트에서 사용합니다 kafka-producer-consumer.jar DomainJoined-Producer-Consumer . 비 도메인 조인 시나리오에 Producer-Consumer 대한 프로젝트 아래에는 사용하지 마세요.

  6. 다음 명령을 실행합니다.

    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
    

Ranger 정책 테스트

구성된 Ranger 정책에 따라 sales_user 토픽을 생성/사용할 수 있지만 토픽 salesevents marketingspend은 생성/사용할 수 없습니다. 반대로 marketing_user 토픽을 생성/사용할 수 있지만 토픽 marketingspend salesevents은 생성/사용할 수 없습니다.

  1. 클러스터에 대한 새 SSH 연결을 엽니다. 다음 명령을 사용하여 sales_user1로 로그인합니다.

    ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. 이전 섹션의 broker 이름을 사용하여 다음 환경 변수를 설정합니다.

    export KAFKABROKERS=<brokerlist>:9092
    

    예: export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092

  3. 빌드 아래의 3단계에 따라 자습서의 예제를 배포합니다. Apache Kafka 생산자 및 소비자 API를 사용하여 sales_user 사용할 수 있는지 확인 kafka-producer-consumer.jar 합니다.

    참고 항목

    이 자습서에서는 "DomainJoined-Producer-Consumer" 프로젝트에서 사용합니다 kafka-producer-consumer.jar . 도메인에 가입되지 않은 시나리오를 위한 "생산자-소비자" 프로젝트에서 사용하지 마세요.

  4. sales_user1 다음 명령을 실행하여 토픽 salesevents 에 생성할 수 있는지 확인합니다.

    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. 다음 명령을 실행하여 토픽 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
    

    메시지를 읽을 수 있는지 확인합니다.

  6. 동일한 SSH 창에서 다음 명령을 실행하여 sales_user1 토픽 marketingspend 에 생성할 수 없는지 확인합니다.

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer marketingspend $KAFKABROKERS
    

    권한 부여 오류가 발생하지만 무시해도 됩니다.

  7. marketing_user1 항목salesevents에서 사용할 수 없습니다.

    이전 1~3단계를 반복하지만 이번에는 marketing_user1.

    다음 명령을 실행하여 토픽 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
    

    이전 메시지를 볼 수 없습니다.

  8. Ranger UI에서 감사 액세스 이벤트를 확인합니다.

    Ranger UI 정책 감사 액세스 이벤트를 보여 주는 스크린샷

콘솔을 사용하여 ESP Kafka에서 항목 생성 및 사용

참고 항목

콘솔 명령을 사용하여 항목을 만들 수 없습니다. 대신, 이전 섹션에서 설명한 Java 코드를 사용해야 합니다. 자세한 내용은 ESP를 사용하여 Kafka 클러스터에서 항목 만들기를 참조하세요.

콘솔을 사용하여 ESP Kafka에서 항목을 생성하고 사용하려면 다음을 수행합니다.

  1. 사용자의 사용자 이름과 함께 kinit를 사용합니다. 프롬프트가 표시되면 암호를 입력합니다.

    kinit sales_user1
    
  2. 환경 변수 설정:

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf"
    export KAFKABROKERS=<brokerlist>:9092
    
  3. 토픽 salesevents에 메시지를 생성합니다.

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    
  4. 토픽 salesevents의 메시지 사용:

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

ESP Kafka에서 장기 실행 세션에 대한 토픽 생성 및 사용

Kerberos 티켓 캐시에는 만료 제한이 있습니다. 장기 실행 세션의 경우 티켓 캐시를 수동으로 갱신하는 대신 keytab을 사용합니다.

다음 없이 kinit장기 실행 세션에서 keytab을 사용하려면:

  1. 도메인 사용자에 대한 새 키탭을 만듭니다.

    ktutil
    addent -password -p <user@domain> -k 1 -e RC4-HMAC
    wkt /tmp/<user>.keytab
    q
    
    
  2. /home/sshuser/kafka_client_jaas.conf를 만듭니다. 파일에 다음 줄이 있어야 합니다.

    KafkaClient {
     com.sun.security.auth.module.Krb5LoginModule required
     useKeyTab=true
     storeKey=true
     keyTab="/tmp/<user>.keytab"
     useTicketCache=false
     serviceName="kafka"
     principal="<user@domain>";
    };
    
  3. /home/sshuser/kafka_client_jaas.conf 콘솔 또는 API를 사용하여 토픽을 대체 java.security.auth.login.config 하고 생성하거나 사용합니다.

    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
    

리소스 정리

이 애플리케이션을 계속 사용하지 않려면 만든 Kafka 클러스터를 삭제합니다.

  1. Azure Portal에 로그인합니다.
  2. 위쪽의 검색 상자에 HDInsight를 입력합니다.
  3. 서비스에서 HDInsight 클러스터를 선택합니다.
  4. 표시되는 HDInsight 클러스터 목록에서 이 자습서용으로 만든 클러스터 옆에 있는 ...를 선택합니다.
  5. 삭제>를 선택합니다.

문제 해결

도메인에 가입된 클러스터에서 작동하지 않는 경우 kafka-producer-consumer.jar 프로젝트에서 사용하고 kafka-producer-consumer.jar DomainJoined-Producer-Consumer 있는지 확인합니다. 비 도메인 조인 시나리오에 Producer-Consumer 대한 프로젝트 아래에는 사용하지 마세요.

다음 단계