Utiliser Ranger avec Kerberos

Vous pouvez gérer le contrôle des accès centralisé pour les charges de travail Hadoop, YARN et Hive en intégrant Apache Ranger à Kerberos dans Managed Service pour Apache Spark. Dans ce tutoriel, vous allez créer un cluster avec les composants Ranger et Apache Solr, configurer des règles d'autorisation et vérifier les autorisations des utilisateurs.

Lors de l'évaluation des règles d'accès, Managed Service pour Apache Spark mappe les comptes principaux Kerberos aux utilisateurs du système en supprimant le domaine et l'instance, par exemple en mappant user1/cluster-m@MY.REALM à user1. Vous pouvez gérer ces règles dans l'interface utilisateur Web de Ranger via la passerelle des composants.

  1. Configurez le mot de passe Ranger admin.

  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 de Managed Service pour Apache Spark dans la console Google Cloud , puis sélectionnez le nom du cluster pour ouvrir la page Détails du cluster. Cliquez sur l'onglet 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 Ranger admin 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)