Utiliser Ranger avec Kerberos

Les exemples suivants créent et utilisent un cluster Dataproc compatible Kerberos avec 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 en local dans une fenêtre de terminal ou à partir du 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 Clusters (Clusters) Dataproc de 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 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 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 une tâche Hadoop mapreduce dans la fenêtre de session SSH maître en tant que userone :

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

    1. L'interface utilisateur Ranger indique que userone a été autorisé à envoyer la tâche.
  4. Exécutez la tâche Hadoop mapreduce depuis la fenêtre de session SSH maître 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 de Ranger indique que usertwo s'est vu refuser l'accès pour envoyer la tâche.

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 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 /tmp HDFS en tant que userone :

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

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

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

    1. L'interface utilisateur Ranger indique que usertwo s'est vu refuser l'accès au répertoire HDFS /tmp.

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 un petit tableau 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 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 la VM sur le tableau 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 de 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 la VM sur le tableau 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 se voit refuser l'accès au tableau :
      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 administrateur Ranger, puis cliquez sur l'onglet Masking (Masquage), puis sur Add New Policy (Ajouter une nouvelle 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 : "nullify"

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

  2. Sélectionnez hive-dataproc dans l'interface administrateur Ranger, puis cliquez sur l'onglet Row Level Filter (Filtre au niveau des lignes), puis sur Add New Policy (Ajouter une nouvelle 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: "eid != 1" expression de filtre

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

    2. Répétez la requête précédente depuis la session SSH maître de la VM avec le tableau 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 renvoie avec la colonne de nom masquée et le filtre (eid=1) dans les résultats :
        Transaction isolation: TRANSACTION_REPEATABLE_READ
        +---------------+----------------+
        | employee.eid  | employee.name  |
        +---------------+----------------+
        | 2             | NULL           |
        | 3             | NULL           |
        +---------------+----------------+
        2 rows selected (0.47 seconds)