Utiliser Ranger avec Kerberos

Les exemples suivants créent et utilisent un cluster Dataproc avec Kerberos activé et des composants Ranger et Solr pour contrôler l'accès des utilisateurs aux ressources Hadoop, YARN et HIVE.

Remarques :

  • L'interface utilisateur Web de Ranger est accessible via la passerelle des composants.

  • Dans un cluster Ranger avec Kerberos, Dataproc mappe un utilisateur Kerberos à l'utilisateur système en supprimant le domaine et l'instance de l'utilisateur Kerberos. Par exemple, le principal user1/cluster-m@MY.REALM Kerberos est mappé sur le système user1, et les règles Ranger sont définies pour autoriser ou refuser les autorisations pour user1.

  1. Configurez le mot de passe administrateur Ranger.

  2. Configurez le mot de passe principal racine Kerberos.

  3. Créez le cluster.

    1. La commande gcloud suivante peut être exécutée dans une fenêtre de terminal locale ou depuis Cloud Shell d'un projet.
      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. Une fois le cluster en cours d'exécution, accédez à la page Dataproc Clusters sur la console Google Cloud, puis sélectionnez le nom du cluster pour ouvrir la page Cluster details (Détails du cluster). Cliquez sur l'onglet Web Interfaces (Interfaces Web) pour afficher la liste des liens de la passerelle des composants vers les interfaces Web des composants par défaut et facultatifs installés sur le cluster. Cliquez sur le lien Ranger.

  5. Connectez-vous à Ranger en saisissant le nom d'utilisateur "admin" et le mot de passe administrateur Ranger.

  6. L'interface utilisateur d'administration Ranger s'ouvre dans un navigateur local.

Règles d'accès YARN

Cet exemple crée une règle Ranger pour autoriser et refuser l'accès des utilisateurs à la file d'attente root.default de YARN.

  1. Sélectionnez yarn-dataproc dans l'interface d'administration Ranger.

  2. Sur la page yarn-dataproc Policies (Règles yarn-dataproc), cliquez sur Add New Policy(Ajouter une nouvelle règle). Sur la page Create Policy (Créer une règle), les champs suivants sont saisis ou sélectionnés :

    • Policy Name : "yarn-policy-1"
    • Queue: "root.default"
    • Audit Logging : "Yes"
    • Allow Conditions:
      • Select User : "userone"
      • Permissions : "Select All" pour accorder toutes les autorisations
    • Deny Conditions:

      • Select User : "usertwo"
      • Permissions : "Select All" pour refuser toutes les autorisations

      Cliquez sur Add (Ajouter) pour enregistrer la règle. La règle est répertoriée sur la page yarn-dataproc Policies :

  3. Exécutez un job MapReduce Hadoop dans la fenêtre de session SSH maître en tant qu'utilisateurone:

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

    1. L'UI Ranger indique que userone a été autorisé à envoyer la tâche.
  4. Exécutez la tâche MapReduce Hadoop à partir de la fenêtre de la session SSH maître de la VM en tant que usertwo:

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

    1. L'interface utilisateur des Ranger indique que l'accès pour envoyer la tâche a été refusé à usertwo.

Règles d'accès HDFS

Cet exemple crée une règle Ranger pour autoriser et refuser l'accès utilisateur au répertoire /tmp HDFS.

  1. Sélectionnez hadoop-dataproc dans l'interface d'administration Ranger.

  2. Sur la page hadoop-dataproc Policies (Règles hadoop-dataproc), cliquez sur Add New Policy(Ajouter une nouvelle règle). Sur la page Create Policy (Créer une règle), les champs suivants sont saisis ou sélectionnés :

    • Policy Name : "hadoop-policy-1"
    • Resource Path : "/tmp"
    • Audit Logging : "Yes"
    • Allow Conditions:
      • Select User : "userone"
      • Permissions : "Select All" pour accorder toutes les autorisations
    • Deny Conditions:

      • Select User : "usertwo"
      • Permissions : "Select All" pour refuser toutes les autorisations

      Cliquez sur Add (Ajouter) pour enregistrer la règle. La règle est répertoriée sur la page hadoop-dataproc Policies :

  3. Accédez au répertoire HDFS /tmp en tant que userone:

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

    1. L'interface utilisateur Ranger indique que userone a été autorisé à accéder au répertoire HDFS /tmp.
  4. Accédez au répertoire HDFS /tmp en tant que usertwo:

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

    1. L'interface utilisateur des Ranger indique que l'accès au répertoire HDFS /tmp a été refusé à usertwo.

Règles d'accès Hive

Cet exemple crée une règle Ranger pour autoriser et refuser l'accès d'un utilisateur à un tableau Hive.

  1. Créez une petite table employee à l'aide de la CLI Hive sur l'instance maître.

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

  2. Sélectionnez hive-dataproc dans l'interface d'administration Ranger.

  3. Sur la page hive-dataproc Policies (Règles hive-dataproc), cliquez sur Add New Policy(Ajouter une nouvelle règle). Sur la page Create Policy (Créer une règle), les champs suivants sont saisis ou sélectionnés :

    • Policy Name : "hive-policy-1"
    • database : "default"
    • table : "employee"
    • Hive Column : "*"
    • Audit Logging : "Yes"
    • Allow Conditions:
      • Select User : "userone"
      • Permissions : "Select All" pour accorder toutes les autorisations
    • Deny Conditions:

      • Select User : "usertwo"
      • Permissions : "Select All" pour refuser toutes les autorisations

      Cliquez sur Add (Ajouter) pour enregistrer la règle. La règle est répertoriée sur la page hive-dataproc Policies :

  4. Exécutez une requête à partir de la session SSH maître de VM sur la table des employés Hive en tant que userone:

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

    1. La requête userone aboutit:
      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. Exécutez une requête à partir de la session SSH maître de VM sur la table des employés Hive en tant que usertwo:

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

    1. usertwo n'a pas accès à la table:
      Error: Could not open client transport with JDBC Uri:
      ...
      Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
      

Accès ultra-précis à Hive

Ranger est compatible avec les filtres de masquage et de niveau de ligne sur Hive. Cet exemple s'appuie sur le précédent hive-policy-1 en ajoutant des règles de masquage et de filtrage.

  1. Sélectionnez hive-dataproc dans l'interface utilisateur d'administration Ranger, puis l'onglet Masquage et cliquez sur Ajouter une règle.

    1. Sur la page Create Policy (Créer une règle), les champs suivants sont saisis ou sélectionnés pour créer une règle permettant de masquer (annuler) la colonne de nom des employés :

      • Policy Name : "hive-masking policy"
      • database : "default"
      • table : "employee"
      • Hive Column : "name"
      • Audit Logging : "Yes"
      • Mask Conditions:
        • Select User : "userone"
        • Access Types : "select" ajouter/modifier des autorisations
        • Select Masking Option: "nullifier"

          Cliquez sur Add (Ajouter) pour enregistrer la règle.

  2. Sélectionnez hive-dataproc dans l'interface utilisateur d'administration Ranger, puis sélectionnez l'onglet Filtre au niveau des lignes et cliquez sur Ajouter une règle.

    1. Sur la page Create Policy (Créer une règle), les champs suivants sont saisis ou sélectionnés pour créer une règle permettant de filtrer (afficher) les lignes où eid n'est pas égal à 1 :

      • Policy Name : "hive-filter policy"
      • Hive Database : "default"
      • Hive Table : "employee"
      • Audit Logging : "Yes"
      • Mask Conditions:
        • Select User : "userone"
        • Access Types : "select" ajouter/modifier des autorisations
        • Row Level Filter : expression de filtre "eid != 1"

          Cliquez sur Add (Ajouter) pour enregistrer la règle.

    2. Répétez la requête précédente de la session SSH maître de VM sur la table des employés Hive en tant qu'utilisateurone:

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

      1. La requête renvoie une réponse contenant la colonne "name" masquée et "bob" (eid=1) est filtrée des résultats :
        Transaction isolation: TRANSACTION_REPEATABLE_READ
        +---------------+----------------+
        | employee.eid  | employee.name  |
        +---------------+----------------+
        | 2             | NULL           |
        | 3             | NULL           |
        +---------------+----------------+
        2 rows selected (0.47 seconds)