שימוש ב-Ranger עם Kerberos

אתם יכולים לנהל בקרת גישה מרוכזת בעומסי עבודה של Hadoop,‏ YARN ו-Hive על ידי שילוב של Apache Ranger עם Kerberos ב-Managed Service for Apache Spark. במדריך הזה תיצרו אשכול עם רכיבי Ranger ו-Apache Solr, תגדירו כללי מדיניות הרשאה ותאמתו הרשאות משתמשים.

כשהמערכת בודקת את מדיניות הגישה, Managed Service for Apache Spark ממפה את הישויות של Kerberos למשתמשי המערכת על ידי הסרת התחום והמכונה, למשל מיפוי של user1/cluster-m@MY.REALM ל-user1. אפשר לנהל את כללי המדיניות האלה בממשק המשתמש של Ranger באינטרנט דרך שער הרכיבים.

  1. מגדירים את הסיסמה של Ranger admin.

  2. הגדרת הסיסמה של מנהל השורש של Kerberos.

  3. יוצרים את האשכול.

    1. אפשר להריץ את הפקודה gcloud הבאה בחלון טרמינל מקומי או מ-Cloud Shell של הפרויקט.
      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. אחרי שהאשכול פועל, נכנסים לדף Clusters של Managed Service for Apache Spark במסוף Google Cloud ולוחצים על שם האשכול כדי לפתוח את הדף Cluster details. לוחצים על הכרטיסייה Web Interfaces כדי להציג רשימה של קישורי Component Gateway לממשקי האינטרנט של רכיבי ברירת המחדל והרכיבים האופציונליים שמותקנים באשכול. לוחצים על הקישור של Ranger.

  5. נכנסים ל-Ranger באמצעות שם המשתמש של admin והסיסמה של האדמין ב-Ranger.

  6. ממשק המשתמש של Ranger admin נפתח בדפדפן מקומי.

מדיניות הגישה של YARN

בדוגמה הזו יוצרים מדיניות Ranger כדי לאפשר ולדחות גישה של משתמשים ל-YARN root.default queue.

  1. בוחרים באפשרות yarn-dataproc בממשק המשתמש לניהול של Ranger.

  2. בדף yarn-dataproc Policies, לוחצים על Add New Policy. בדף Create Policy, מזינים או בוחרים את השדות הבאים:

    • Policy Name: "yarn-policy-1"
    • Queue: "root.default"
    • Audit Logging: "כן"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "בחירת הכול" כדי לתת את כל ההרשאות
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "בחירת הכול" כדי לדחות את כל ההרשאות

      לוחצים על הוספה כדי לשמור את המדיניות. המדיניות מופיעה בדף yarn-dataproc Policies:

  3. מריצים משימת mapreduce של Hadoop בחלון הסשן של ה-SSH הראשי בתור userone:

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

    1. בממשק המשתמש של Ranger אפשר לראות של-userone יש הרשאה לשלוח את המשימה.
  4. מריצים את משימת mapreduce של Hadoop מחלון הסשן של ה-SSH הראשי של המכונה הווירטואלית בתור usertwo:

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

    1. בממשק המשתמש של Ranger מוצג שלמשתמש usertwo נדחתה הגישה לשליחת המשימה.

מדיניות הגישה ל-HDFS

בדוגמה הזו נוצרת מדיניות Ranger שמאפשרת ומונעת גישה של משתמשים לספריית HDFS /tmp.

  1. בוחרים באפשרות hadoop-dataproc בממשק המשתמש לניהול של Ranger.

  2. בדף hadoop-dataproc Policies, לוחצים על Add New Policy. בדף Create Policy, מזינים או בוחרים את השדות הבאים:

    • Policy Name: "hadoop-policy-1"
    • Resource Path: "/tmp"
    • Audit Logging: "כן"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "בחירת הכול" כדי לתת את כל ההרשאות
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "בחירת הכול" כדי לדחות את כל ההרשאות

      לוחצים על הוספה כדי לשמור את המדיניות. המדיניות מופיעה בדף hadoop-dataproc Policies:

  3. ניגשים לספריית HDFS /tmp בתור userone:

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

    1. בממשק המשתמש של Ranger אפשר לראות של-userone יש גישה לספריית HDFS /tmp.
  4. ניגשים לספרייה /tmp ב-HDFS בתור usertwo:

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

    1. בממשק המשתמש של Ranger מוצג שנדחתה הגישה של usertwo לספריית HDFS /tmp.

מדיניות הגישה ל-Hive

בדוגמה הזו יוצרים מדיניות Ranger כדי לאפשר ולדחות גישה של משתמשים לטבלת Hive.

  1. יוצרים טבלת employee קטנה באמצעות ה-CLI של Hive במכונה הראשית.

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

  2. בוחרים באפשרות hive-dataproc בממשק המשתמש לניהול של Ranger.

  3. בדף hive-dataproc Policies, לוחצים על Add New Policy. בדף Create Policy, מזינים או בוחרים את השדות הבאים:

    • Policy Name: "hive-policy-1"
    • database: "default"
    • table: "employee"
    • Hive Column: "*"
    • Audit Logging: "כן"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "בחירת הכול" כדי לתת את כל ההרשאות
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "בחירת הכול" כדי לדחות את כל ההרשאות

      לוחצים על הוספה כדי לשמור את המדיניות. המדיניות מופיעה בדף hive-dataproc Policies:

  4. מריצים שאילתה מסשן ה-SSH הראשי של ה-VM על טבלת העובדים של Hive בתור userone:

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

    1. השאילתה של userone מצליחה:
      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. מריצים שאילתה מסשן ה-SSH הראשי של ה-VM על טבלת העובדים של Hive בתור usertwo:

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

    1. ל-usertwo אין גישה לטבלה:
      Error: Could not open client transport with JDBC Uri:
      ...
      Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
      

גישה פרטנית ל-Hive

‫Ranger תומך ב-Masking וב-Row Level Filters ב-Hive. הדוגמה הזו מבוססת על hive-policy-1 הקודם, ומוסיפה כללי מדיניות של הסתרה וסינון.

  1. בוחרים באפשרות hive-dataproc בממשק המשתמש לניהול של Ranger, ואז בוחרים בכרטיסייה Masking ולוחצים על Add New Policy.

    1. בדף Create Policy, מזינים או בוחרים את השדות הבאים כדי ליצור מדיניות להסתרת (איפוס) העמודה של שם העובד:

      • Policy Name: "hive-masking policy"
      • database: "default"
      • table: "employee"
      • Hive Column: "name"
      • Audit Logging: "כן"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: הרשאות הוספה/עריכה של "בחירה"
        • Select Masking Option: "nullify"

          לוחצים על הוספה כדי לשמור את המדיניות.

  2. בוחרים באפשרות hive-dataproc בממשק המשתמש לניהול של Ranger, ואז בוחרים בכרטיסייה Row Level Filter ולוחצים על Add New Policy.

    1. בדף Create Policy, מזינים או בוחרים את השדות הבאים כדי ליצור מדיניות לסינון (החזרה) של שורות שבהן הערך של eid לא שווה ל-1:

      • Policy Name: "מדיניות hive-filter"
      • Hive Database: "default"
      • Hive Table: "employee"
      • Audit Logging: "כן"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: הרשאות הוספה/עריכה של "בחירה"
        • Row Level Filter: ביטוי הסינון "eid != 1"

          לוחצים על הוספה כדי לשמור את המדיניות.

    2. חוזרים על השאילתה הקודמת מסשן ה-SSH הראשי של ה-VM בטבלת העובדים של Hive בתור userone:

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

      1. השאילתה מחזירה את עמודת השם עם מסכה, ו-bob‏ (eid=1) מסונן מהתוצאות:
        Transaction isolation: TRANSACTION_REPEATABLE_READ
        +---------------+----------------+
        | employee.eid  | employee.name  |
        +---------------+----------------+
        | 2             | NULL           |
        | 3             | NULL           |
        +---------------+----------------+
        2 rows selected (0.47 seconds)