אתם יכולים לנהל בקרת גישה מרוכזת בעומסי עבודה של 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 באינטרנט דרך שער הרכיבים.
יוצרים את האשכול.
- אפשר להריץ את הפקודה
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
- אפשר להריץ את הפקודה
אחרי שהאשכול פועל, נכנסים לדף Clusters של Managed Service for Apache Spark במסוף Google Cloud ולוחצים על שם האשכול כדי לפתוח את הדף Cluster details. לוחצים על הכרטיסייה Web Interfaces כדי להציג רשימה של קישורי Component Gateway לממשקי האינטרנט של רכיבי ברירת המחדל והרכיבים האופציונליים שמותקנים באשכול. לוחצים על הקישור של Ranger.
נכנסים ל-Ranger באמצעות שם המשתמש של
adminוהסיסמה של האדמין ב-Ranger.
ממשק המשתמש של Ranger
adminנפתח בדפדפן מקומי.
מדיניות הגישה של YARN
בדוגמה הזו יוצרים מדיניות Ranger כדי לאפשר ולדחות גישה של משתמשים ל-YARN root.default queue.
בוחרים באפשרות
yarn-dataprocבממשק המשתמש לניהול של Ranger.
בדף 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:
מריצים משימת mapreduce של Hadoop בחלון הסשן של ה-SSH הראשי בתור userone:
userone@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples. jar pi 5 10
- בממשק המשתמש של Ranger אפשר לראות של-
useroneיש הרשאה לשלוח את המשימה.
- בממשק המשתמש של Ranger אפשר לראות של-
מריצים את משימת mapreduce של Hadoop מחלון הסשן של ה-SSH הראשי של המכונה הווירטואלית בתור
usertwo:usertwo@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples. jar pi 5 10
- בממשק המשתמש של Ranger מוצג שלמשתמש
usertwoנדחתה הגישה לשליחת המשימה.
- בממשק המשתמש של Ranger מוצג שלמשתמש
מדיניות הגישה ל-HDFS
בדוגמה הזו נוצרת מדיניות Ranger שמאפשרת ומונעת גישה של משתמשים לספריית HDFS /tmp.
בוחרים באפשרות
hadoop-dataprocבממשק המשתמש לניהול של Ranger.
בדף 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:
ניגשים לספריית HDFS
/tmpבתור userone:userone@example-cluster-m:~$ hadoop fs -ls /tmp
- בממשק המשתמש של Ranger אפשר לראות של-
useroneיש גישה לספריית HDFS /tmp.
- בממשק המשתמש של Ranger אפשר לראות של-
ניגשים לספרייה
/tmpב-HDFS בתורusertwo:usertwo@example-cluster-m:~$ hadoop fs -ls /tmp
- בממשק המשתמש של Ranger מוצג שנדחתה הגישה של
usertwoלספריית HDFS /tmp.
- בממשק המשתמש של Ranger מוצג שנדחתה הגישה של
מדיניות הגישה ל-Hive
בדוגמה הזו יוצרים מדיניות Ranger כדי לאפשר ולדחות גישה של משתמשים לטבלת Hive.
יוצרים טבלת
employeeקטנה באמצעות ה-CLI של Hive במכונה הראשית.hive> CREATE TABLE IF NOT EXISTS employee (eid int, name String); INSERT INTO employee VALUES (1 , 'bob') , (2 , 'alice'), (3 , 'john');
בוחרים באפשרות
hive-dataprocבממשק המשתמש לניהול של Ranger.
בדף 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:
מריצים שאילתה מסשן ה-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;"
- השאילתה של 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)
- השאילתה של userone מצליחה:
מריצים שאילתה מסשן ה-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;"
- ל-usertwo אין גישה לטבלה:
Error: Could not open client transport with JDBC Uri: ... Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
- ל-usertwo אין גישה לטבלה:
גישה פרטנית ל-Hive
Ranger תומך ב-Masking וב-Row Level Filters ב-Hive. הדוגמה הזו מבוססת על hive-policy-1 הקודם, ומוסיפה כללי מדיניות של הסתרה וסינון.
בוחרים באפשרות
hive-dataprocבממשק המשתמש לניהול של Ranger, ואז בוחרים בכרטיסייה Masking ולוחצים על Add New Policy.
בדף 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"
לוחצים על הוספה כדי לשמור את המדיניות.
בוחרים באפשרות
hive-dataprocבממשק המשתמש לניהול של Ranger, ואז בוחרים בכרטיסייה Row Level Filter ולוחצים על Add New Policy.
בדף 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"
לוחצים על הוספה כדי לשמור את המדיניות.
חוזרים על השאילתה הקודמת מסשן ה-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;"
- השאילתה מחזירה את עמודת השם עם מסכה, ו-bob (eid=1) מסונן מהתוצאות:
Transaction isolation: TRANSACTION_REPEATABLE_READ +---------------+----------------+ | employee.eid | employee.name | +---------------+----------------+ | 2 | NULL | | 3 | NULL | +---------------+----------------+ 2 rows selected (0.47 seconds)
- השאילתה מחזירה את עמודת השם עם מסכה, ו-bob (eid=1) מסונן מהתוצאות: