Dela via


Konfigurera Apache Ranger-principer för Spark SQL i HDInsight med Enterprise Security Package

Den här artikeln beskriver hur du konfigurerar Apache Ranger-principer för Spark SQL med Enterprise Security Package i HDInsight.

I den här artikeln kan du se hur du:

  • Skapa Apache Ranger-principer.
  • Verifiera de tillämpade Ranger-principerna.
  • Tillämpa riktlinjer för att ange Apache Ranger för Spark SQL.

Förutsättningar

Anslut till administrationsgränssnittet för Apache Ranger

  1. Från en webbläsare ansluter du till Ranger-administratörens användargränssnitt med hjälp av URL:en https://ClusterName.azurehdinsight.net/Ranger/.

    Ändra ClusterName till namnet på ditt Spark-kluster.

  2. Logga in med dina autentiseringsuppgifter för Microsoft Entra-administratör. Autentiseringsuppgifterna för Microsoft Entra-administratören är inte samma som autentiseringsuppgifter för HDInsight-kluster eller autentiseringsuppgifter för Linux HDInsight-noden Secure Shell (SSH).

    Screenshot that shows the Service Manager page in the Ranger user interface.

Skapa domänanvändare

Information om hur du skapar sparkuser domänanvändare finns i Skapa ett HDInsight-kluster med ESP. I ett produktionsscenario kommer domänanvändare från din Microsoft Entra-klientorganisation.

Skapa en Ranger-princip

I det här avsnittet skapar du två Ranger-principer:

  • En åtkomstprincip för åtkomst hivesampletable från Spark SQL
  • En maskeringsprincip för att dölja kolumnerna i hivesampletable

Skapa en Ranger-åtkomstprincip

  1. Öppna ranger-administratörsgränssnittet.

  2. Under HADOOP SQL väljer du hive_and_spark.

    Screenshot that shows the selection of Hive and Spark.

  3. På fliken Åtkomst väljer du Lägg till ny princip.

    Screenshot that shows the button for adding a new access policy.

  4. Ange följande värden:

    Property Värde
    Principnamn read-hivesampletable-all
    database standard
    table hivesampletable
    column *
    Välj användare sparkuser
    Behörigheter välj

    Screenshot that shows sample details for an access policy.

    Om en domänanvändare inte fylls i automatiskt för Välj användare väntar du en stund tills Ranger synkroniserar med Microsoft Entra-ID.

  5. Välj Lägg till för att spara principen.

  6. Öppna en Zeppelin-anteckningsbok och kör följande kommando för att verifiera principen:

         %sql 
         select * from hivesampletable limit 10;
    

    Här är resultatet innan en princip tillämpas:

    Screenshot that shows the result before an access policy.

    Här är resultatet efter att en princip har tillämpats:

    Screenshot that shows the result after an access policy.

Skapa en rangermaskeringsprincip

I följande exempel visas hur du skapar en princip för att maskera en kolumn:

  1. På fliken Maskering väljer du Lägg till ny princip.

    Screenshot that shows the button for adding a new masking policy.

  2. Ange följande värden:

    Property Värde
    Principnamn mask-hivesampletable
    Hive Database standard
    Hive-tabell hivesampletable
    Hive-kolumn devicemake
    Välj användare sparkuser
    Åtkomsttyper välj
    Välj maskeringsalternativ Hash

    Screenshot shows masking policy details.

  3. Välj Spara för att spara principen.

  4. Öppna en Zeppelin-anteckningsbok och kör följande kommando för att verifiera principen:

         %sql
         select clientId, deviceMake from hivesampletable; 
    

    Screenshot that shows an open Zeppelin notebook.

Kommentar

Som standard är principerna för Hive och Spark SQL vanliga i Ranger.

Tillämpa riktlinjer för att konfigurera Apache Ranger för Spark SQL

Följande scenarier utforskar riktlinjer för att skapa ett HDInsight 5.1 Spark-kluster med hjälp av en ny Ranger-databas och med hjälp av en befintlig Ranger-databas.

Scenario 1: Använd en ny Ranger-databas när du skapar ett HDInsight 5.1 Spark-kluster

När du använder en ny Ranger-databas för att skapa ett kluster skapas den relevanta Ranger-lagringsplatsen som innehåller Ranger-principerna för Hive och Spark under namnet hive_and_spark i Hadoop SQL-tjänsten på Ranger-databasen.

Screenshot that shows the repo that contains the Ranger policies for Hive and Spark.

Om du redigerar principerna tillämpas de på både Hive och Spark.

Tänk på följande:

  • Om du har två metaarkivdatabaser med samma namn som används för både Hive-kataloger (till exempel DB1) och Spark -kataloger (till exempel DB1):

    • Om Spark använder Spark-katalogen (metastore.catalog.default=spark) tillämpas principerna på DB1-databasen i Spark-katalogen.
    • Om Spark använder Hive-katalogen (metastore.catalog.default=hive) tillämpas principerna på DATABASEN DB1 i Hive-katalogen.

    När det gäller Ranger finns det inget sätt att skilja mellan DB1 i Hive- och Spark-katalogerna.

    I sådana fall rekommenderar vi att du antingen:

    • Använd Hive-katalogen för både Hive och Spark.
    • Underhålla olika databas-, tabell- och kolumnnamn för både Hive- och Spark-kataloger så att principerna inte tillämpas på databaser mellan kataloger.
  • Om du använder Hive-katalogen för både Hive och Spark bör du överväga följande exempel.

    Anta att du skapar en tabell med namnet table1 via Hive med den aktuella xyz-användaren . Den skapar en HDFS-fil (Hadoop Distributed File System) med namnet table1.db vars ägare är xyz-användaren .

    Anta nu att du använder användaren abc för att starta Spark SQL-sessionen. I den här sessionen av användaren abc, om du försöker skriva något till table1, kommer det säkert att misslyckas eftersom tabellägaren är xyz.

    I sådana fall rekommenderar vi att du använder samma användare i Hive och Spark SQL för att uppdatera tabellen. Användaren bör ha tillräcklig behörighet för att utföra uppdateringsåtgärder.

Scenario 2: Använd en befintlig Ranger-databas (med befintliga principer) när du skapar ett HDInsight 5.1 Spark-kluster

När du skapar ett HDInsight 5.1-kluster med hjälp av en befintlig Ranger-databas skapas en ny Ranger-lagringsplats igen på den här databasen med namnet på det nya klustret i det här formatet: hive_and_spark.

Screenshot that shows a new repo with an old ranger database.

Anta att du redan har definierat principerna i Ranger-lagringsplatsen under namnet oldclustername_hive på den befintliga Ranger-databasen i Hadoop SQL-tjänsten. Du vill dela samma principer i det nya HDInsight 5.1 Spark-klustret. Använd följande steg för att uppnå det här målet.

Kommentar

En användare som har administratörsbehörighet för Ambari kan utföra konfigurationsuppdateringar.

  1. Öppna Ambari-användargränssnittet från ditt nya HDInsight 5.1-kluster.

  2. Gå till Spark3-tjänsten och gå sedan till Konfigurationer.

  3. Öppna konfigurationen Advanced ranger-spark-security .

    Screenshot shows Ambari config ranger security.

    eller Så kan du även öppna den här konfigurationen i /etc/spark3/conf med hjälp av SSH.

    Redigera två konfigurationer (ranger.plugin.spark.service.name och ranger.plugin.spark.policy.cache.dir) för att peka på den gamla principlagringsplatsen oldclustername_hive och spara sedan konfigurationerna.

    Ambari:

    Screenshot that shows a configuration update for service name in Ambari.

    XML-fil:

    Screenshot that shows a configuration update for service name in XML.

  4. Starta om Ranger- och Spark-tjänsterna från Ambari.

  5. Öppna ranger-administratörsgränssnittet och klicka på knappen Redigera under HADOOP SQL-tjänsten .

    Screenshot that shows edit option for ranger service.

  6. För oldclustername_hive-tjänsten lägger du till rangersparklookup-användare i listan policy.download.auth.users och tag.download.auth.users och klickar på Spara.

    Screenshot that shows how to add user in Ranger service.

Principerna tillämpas på databaser i Spark-katalogen. Om du vill komma åt databaserna i Hive-katalogen:

  1. I Ambari går du till Spark3-konfigurationer>.

  2. Ändra metastore.catalog.default från spark till hive.

    Screenshot that shows changing a metastore configuration.

Kända problem

  • Apache Ranger-integrering med Spark SQL fungerar inte om Ranger-administratören är nere.
  • När du hovrar över kolumnen Resurs i Ranger-granskningsloggar kan den inte visa hela frågan som du körde.