Utilizzare Ranger con Kerberos

I seguenti esempi creano e utilizzano un cluster Managed Service for Apache Spark abilitato a Kerberos con componenti Ranger e Solr per controllare l'accesso degli utenti alle risorse Hadoop, YARN e HIVE.

Note:

  • È possibile accedere alla UI web di Ranger tramite il gateway dei componenti.

  • In un cluster Ranger con Kerberos, Managed Service for Apache Spark mappa un utente Kerberos all'utente di sistema rimuovendo il realm e l'istanza dell'utente Kerberos. Ad esempio, l'entità Kerberos user1/cluster-m@MY.REALM viene mappata al sistema user1 e le policy di Ranger sono definite per consentire o negare le autorizzazioni per user1.

  1. Imposta la password admin di Ranger.

  2. Imposta la password dell'entità root Kerberos.

  3. Crea il cluster.

    1. Il seguente comando gcloud può essere eseguito in una finestra del terminale locale o da Cloud Shell di un progetto.
      gcloud dataproc clusters create cluster-name \
          --region=region \
          --optional-components=SOLR,RANGER \
          --enable-component-gateway \
          --properties="dataproc:ranger.kms.key.uri=projects/project-id/locations/global/keyRings/keyring/cryptoKeys/key,dataproc:ranger.admin.password.uri=gs://bucket/admin-password.encrypted" \
          --kerberos-root-principal-password-uri=gs://bucket/kerberos-root-principal-password.encrypted \
          --kerberos-kms-key=projects/project-id/locations/global/keyRings/keyring/cryptoKeys/key
      
  4. Dopo che il cluster è in esecuzione, vai alla pagina Cluster Managed Service for Apache Spark Cluster su Google Cloud console, quindi seleziona il nome del cluster per aprire la pagina Dettagli cluster. Fai clic sulla scheda Interfacce web per visualizzare un elenco di link del gateway dei componenti alle interfacce web dei componenti predefiniti e facoltativi installati sul cluster. Fai clic sul link Ranger.

  5. Accedi a Ranger inserendo il nome utente admin e la password di amministratore di Ranger.

  6. La UI admin di Ranger si apre in un browser locale.

Policy di accesso a YARN

Questo esempio crea una policy di Ranger per consentire e negare l'accesso degli utenti alla coda root.default di YARN.

  1. Seleziona yarn-dataproc dalla UI di amministrazione di Ranger.

  2. Nella pagina Policy yarn-dataproc, fai clic su Aggiungi nuova policy. Nella pagina Crea policy, vengono inseriti o selezionati i seguenti campi:

    • Policy Name: "yarn-policy-1"
    • Queue: "root.default"
    • Audit Logging: "Yes"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Select All" to grant all permissions
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "Select All" to deny all permissions

      Fai clic su Aggiungi per salvare la policy. La policy è elencata nella pagina Policy yarn-dataproc:

  3. Esegui un job Hadoop MapReduce nella finestra della sessione SSH master come userone:

    userone@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples.
    jar pi 5 10
    

    1. La UI di Ranger mostra che a userone è stato consentito di inviare il job.
  4. Esegui il job Hadoop MapReduce dalla finestra della sessione SSH master della VM come usertwo:

    usertwo@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples.
    jar pi 5 10

    1. La UI di Ranger mostra che a usertwo è stato negato l'accesso per inviare il job.

Policy di accesso a HDFS

Questo esempio crea una policy di Ranger per consentire e negare l'accesso degli utenti alla directory HDFS /tmp.

  1. Seleziona hadoop-dataproc dalla UI di amministrazione di Ranger.

  2. Nella pagina Policy hadoop-dataproc, fai clic su Aggiungi nuova policy. Nella pagina Crea policy, vengono inseriti o selezionati i seguenti campi:

    • Policy Name: "hadoop-policy-1"
    • Resource Path: "/tmp"
    • Audit Logging: "Yes"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Select All" to grant all permissions
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "Select All" to deny all permissions

      Fai clic su Aggiungi per salvare la policy. La policy è elencata nella pagina Policy hadoop-dataproc:

  3. Accedi alla directory /tmp di HDFS come userone:

    userone@example-cluster-m:~$ hadoop fs -ls /tmp
    

    1. La UI di Ranger mostra che userone è stato consentito l'accesso alla directory /tmp di HDFS.
  4. Accedi alla directory /tmp di HDFS come usertwo:

    usertwo@example-cluster-m:~$ hadoop fs -ls /tmp
    

    1. La UI di Ranger mostra che usertwo è stato negato l'accesso alla directory /tmp di HDFS.

Policy di accesso a Hive

Questo esempio crea una policy di Ranger per consentire e negare l'accesso degli utenti a una tabella Hive table.

  1. Crea una piccola tabella employee utilizzando l'interfaccia a riga di comando di Hive sull'istanza master.

    hive> CREATE TABLE IF NOT EXISTS employee (eid int, name String); INSERT INTO employee VALUES (1 , 'bob') , (2 , 'alice'), (3 , 'john');
    

  2. Seleziona hive-dataproc dalla UI di amministrazione di Ranger.

  3. Nella pagina Policy hive-dataproc, fai clic su Aggiungi nuova policy. Nella pagina Crea policy, vengono inseriti o selezionati i seguenti campi:

    • Policy Name: "hive-policy-1"
    • database: "default"
    • table: "employee"
    • Hive Column: "*"
    • Audit Logging: "Yes"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Select All" to grant all permissions
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "Select All" to deny all permissions

      Fai clic su Aggiungi per salvare la policy. La policy è elencata nella pagina Policy hive-dataproc:

  4. Esegui una query dalla sessione SSH master della VM sulla tabella employee di Hive come userone:

    userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
    

    1. La query userone ha esito positivo:
      Connected to: Apache Hive (version 2.3.6)
      Driver: Hive JDBC (version 2.3.6)
      Transaction isolation: TRANSACTION_REPEATABLE_READ
      +---------------+----------------+
      | employee.eid  | employee.name  |
      +---------------+----------------+
      | 1             | bob            |
      | 2             | alice          |
      | 3             | john           |
      +---------------+----------------+
      3 rows selected (2.033 seconds)
      
  5. Esegui una query dalla sessione SSH master della VM sulla tabella employee di Hive come usertwo:

    usertwo@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
    

    1. A usertwo viene negato l'accesso alla tabella:
      Error: Could not open client transport with JDBC Uri:
      ...
      Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
      

Accesso granulare a Hive

Ranger supporta il mascheramento e i filtri a livello di riga su Hive. Questo esempio si basa sulla precedente hive-policy-1 aggiungendo policy di mascheramento e filtro.

  1. Seleziona hive-dataproc dalla UI di amministrazione di Ranger, quindi seleziona la scheda Mascheramento e fai clic su Aggiungi nuova policy.

    1. Nella pagina Crea policy, vengono inseriti o selezionati i seguenti campi per creare una policy per mascherare (impostare su null) la colonna del nome del dipendente:

      • Policy Name: "hive-masking policy"
      • database: "default"
      • table: "employee"
      • Hive Column: "name"
      • Audit Logging: "Yes"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: "select" add/edit permissions
        • Select Masking Option: "nullify"

          Fai clic su Aggiungi per salvare la policy.

  2. Seleziona hive-dataproc dalla UI di amministrazione di Ranger, quindi seleziona la scheda Filtro a livello di riga e fai clic su Aggiungi nuova policy.

    1. Nella pagina Crea policy, vengono inseriti o selezionati i seguenti campi per creare una policy per filtrare (restituire) le righe in cui eid non è uguale a 1:

      • Policy Name: "hive-filter policy"
      • Hive Database: "default"
      • Hive Table: "employee"
      • Audit Logging: "Yes"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: "select" add/edit permissions
        • Row Level Filter: espressione di filtro "eid != 1"

          Fai clic su Aggiungi per salvare la policy.

    2. Ripeti la query precedente dalla sessione SSH master della VM sulla tabella employee di Hive come userone:

      userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
      

      1. La query viene restituita con la colonna del nome mascherata e bob (eid=1) filtrata dai risultati:
        Transaction isolation: TRANSACTION_REPEATABLE_READ
        +---------------+----------------+
        | employee.eid  | employee.name  |
        +---------------+----------------+
        | 2             | NULL           |
        | 3             | NULL           |
        +---------------+----------------+
        2 rows selected (0.47 seconds)