בדף הזה מוסבר איך להגדיר את Kerberos לשירות Dataproc Metastore שמשתמש בפרוטוקול של נקודת הקצה Thrift. אם שירות Dataproc Metastore שלכם משתמש בפרוטוקול נקודות הקצה gRPC, כדאי לעיין במאמר בנושא הגדרת Kerberos לנקודות קצה gRPC.
לפני שמתחילים
הסבר על היסודות של Kerberos.
בהוראות האלה, משתמשים באשכול Dataproc כדי ליצור את נכסי Kerberos הבאים:
- קובץ Keytab.
- קובץ
krb5.conf. - חשבון משתמש ב-Kerberos.
מידע נוסף על האופן שבו נכסי Kerberos האלה פועלים עם שירות Dataproc Metastore זמין במאמר מידע על Kerberos.
יוצרים ומארחים שרת KDC משלכם של Kerberos או לומדים איך להשתמש בשרת KDC המקומי של אשכול Dataproc.
יוצרים קטגוריה של Cloud Storage או מקבלים גישה לקטגוריה קיימת. חובה לאחסן את קובץ ה-
krb5.confבדלי הזה.
שיקולים לגבי הרשת
לפני שמגדירים את Kerberos, כדאי לבדוק את הגדרות הרשת הבאות:
מגדירים קישור דרך IP בין רשת ה-VPC לבין KDC. חובה לבצע את הפעולה הזו כדי לאמת את קובץ ה-KDC באמצעות שירות Dataproc Metastore.
מגדירים את כל כללי חומת האש הנחוצים ב-KDC. הכללים האלה נדרשים כדי לאפשר תעבורת נתונים מ-Dataproc Metastore. מידע נוסף זמין במאמר כללים של חומת אש לשירותים.
אם אתם משתמשים ב-VPC Service Controls, הסוד ב-Secret Manager ואובייקט
krb5.confCloud Storage צריכים להיות שייכים לפרויקט שנמצא באותם גבולות גזרה לשירות כמו שירות Dataproc Metastore.מחליטים באיזו רשת של קישור בין רשתות שכנות (peering) של VPC רוצים להשתמש. צריך להגדיר את אשכול Dataproc ואת שירות Dataproc Metastore עם אותה רשת VPC שכנה (peering).
תפקידים נדרשים
כדי לקבל את ההרשאה שדרושה ליצירת Dataproc Metastore עם Kerberos, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט, בהתאם לעקרון של הרשאות מינימליות:
-
הענקת שליטה מלאה במשאבי Dataproc Metastore (
roles/metastore.editor) -
מתן גישה מלאה לכל משאבי Dataproc Metastore, כולל ניהול מדיניות IAM (
roles/metastore.admin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקיד שמוגדר מראש מכיל את ההרשאה metastore.services.create, שנדרשת כדי ליצור Dataproc Metastore עם Kerberos.
יכול להיות שתוכלו לקבל את ההרשאה הזו גם בתפקידים בהתאמה אישית או בתפקידים אחרים שמוגדרים מראש.
מידע נוסף על תפקידים והרשאות ספציפיים ב-Dataproc Metastore זמין במאמר ניהול גישה באמצעות IAM.מידע נוסף זמין במאמר IAM ובקרת גישה ב-Dataproc Metastore.
הפעלת Kerberos ב-Dataproc Metastore
בהוראות הבאות מוסבר איך להגדיר את Kerberos לשירות Dataproc Metastore שמצורף לאשכול Dataproc.
יצירת אשכול Dataproc והפעלת Kerberos
gcloud
כדי להגדיר אשכול Dataproc עם Kerberos, מריצים את הפקודה הבאה של gcloud dataproc clusters create:
gcloud dataproc clusters create CLUSTER_NAME \
--image-version=2.0 \
--enable-kerberos \
--scopes 'https://www.googleapis.com/auth/cloud-platform'
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של אשכול Dataproc.
הגדרת אשכול Dataproc ל-Kerberos
בהוראות הבאות מוסבר איך להשתמש ב-SSH כדי להתחבר לאשכול Dataproc ראשי שמשויך לשירות Dataproc Metastore.
לאחר מכן, משנים את קובץ hive-site.xml ומגדירים את Kerberos לשירות.
- נכנסים לדף VM Instances במסוף Google Cloud .
ברשימת המכונות הווירטואליות, לוחצים על SSH
ייפתח חלון דפדפן בספריית הבית שלכם בצומת.
פותחים את הקובץ
/etc/hive/conf/hive-site.xml.sudo vim /etc/hive/conf/hive-site.xmlהפלט אמור להיראות כך:
<property> <name>hive.metastore.kerberos.principal</name> <value>PRINCIPAL_NAME</value> </property> <property> <name>hive.metastore.kerberos.keytab.file</name> <value>METASTORE_PRINCPAL_KEYTAB</value> </property>מחליפים את:
-
PRINCIPAL_NAME: שם חשבון ראשי, בפורמט הבאprimary/instance@REALM. לדוגמה:hive/test@C.MY-PROJECT.INTERNAL. -
METASTORE_PRINCIPAL_KEYTAB: המיקום של קובץ ה-keytab של Hive Metastore. משתמשים בערך/etc/security/keytab/metastore.service.keytab.
-
יצירת קובץ keytab
בהוראות הבאות מוסבר איך ליצור קובץ keytab.
קובץ keytab מכיל צמד של ישויות Kerberos וצמד של מפתחות מוצפנים. הוא משמש לאימות של שם שירות ראשי (SPN) באמצעות Kerberos KDC.
איך יוצרים קובץ keytab
בסשן ה-SSH של Dataproc, יוצרים את קובץ ה-keytab ואת העיקרון.
sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME" sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"בסשן ה-SSH של Dataproc, יוצרים את קובץ ה-keytab ומעלים אותו ל-Secret Manager.
gcloud secrets create SECRET_NAME --replication-policy automatic sudo gcloud secrets versions add SECRET_NAME --data-file /etc/security/keytab/metastore.service.keytab
מחליפים את מה שכתוב בשדות הבאים:
-
SECRET_NAME: שם הסוד.
-
עדכון הקובץ krb5.conf
לאחר מכן, צריך לעדכן את קובץ krb5.conf כדי לשייך אותו לאשכול Dataproc.
קובעים את כתובת ה-IP הפנימית הראשית של המופע הראשי של אשכול Dataproc.
gcloud compute instances listלדוגמה, הרצת הפקודה הזו יוצרת פלט דומה:
~$ gcloud compute instances list --project kerberos-project NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS cluster-236-m us-central1-c n2-standard-4 192.0.2.2 *.*.*.* RUNNING ...במקרה הזה, כתובת ה-IP הפנימית של האשכול היא
192.0.2.2.פותחים את הקובץ
krb5.conf.sudo vim /etc/krb5.confבקובץ, מחליפים את הפרמטר
KDCואת הפרמטרadmin_serverהקיימים בכתובת ה-IP הפנימית של אשכול Dataproc.לדוגמה, אם משתמשים בערך של כתובת ה-IP מהשלבים הקודמים, הפלט ייראה בערך כך.
[realms] US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = { kdc = 192.0.2.2 admin_server = 192.0.2.2 }מעלים את הקובץ
/etc/krb5.confממכונת ה-VM הראשית של Dataproc לקטגוריה של Cloud Storage.gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5מחליפים את:
-
PATH_TO_KRB5: ה-URI של Cloud Storage שמכיל את קובץkrb5.conf.
אחרי שההעלאה מסתיימת, מעתיקים את הנתיב של ההעלאה. צריך להשתמש בו כשיוצרים את שירות Dataproc Metastore.
-
מתן תפקידים והרשאות ב-IAM
נותנים לחשבון השירות של Dataproc Metastore הרשאה לגשת לקובץ keytab. החשבון הזה מנוהל על ידי Google ומופיע בדף ממשק המשתמש של הרשאות IAM כשמסמנים את התיבה Include Google-provided role grants.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
נותנים לחשבון השירות של Dataproc Metastore הרשאה לגשת לקובץ
krb5.conf.gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \ --role roles/storage.objectViewer
יצירת שירות Dataproc Metastore עם Kerberos
יוצרים שירות חדש של Dataproc Metastore שמוגדר עם קובצי Kerberos.
חשוב לוודא שיוצרים את השירות ברשת ה-VPC כמו אשכול Dataproc.
gcloud metastore services create SERVICE \ --location=LOCATION \ --instance-size=medium \ --network=VPC_NETWORK \ --kerberos-principal=KERBEROS_PRINCIPAL \ --krb5-config=KRB5_CONFIG \ --keytab=CLOUD_SECRET
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE: השם של שירות Dataproc Metastore. -
LOCATION: המיקום של שירות Dataproc Metastore. -
VPC_NETWORK: השם של רשת ה-VPC משתמשים באותה רשת שהוגדרה באשכול Dataproc. -
KERBEROS_PRINCIPAL: השם של העיקרון ב-Kerberos שיצרתם קודם. -
KRB5_CONFIG: המיקום של קובץkrb5.conf. משתמשים ב-URI של אובייקט Cloud Storage שמפנה לקובץ. -
CLOUD_SECRET: שם המשאב היחסי של גרסת סוד ב-Secret Manager.
אחרי שיוצרים את האשכול, Dataproc Metastore מנסה להתחבר עם פרטי הכניסה של Kerberos באמצעות העיקרון, ה-keytab וkrb5.confהקובץ שסופקו. אם החיבור נכשל, גם יצירת Dataproc Metastore נכשלת.
קישור אשכול Dataproc ל-Dataproc Metastore
אחרי שיוצרים את שירות Dataproc Metastore, מאתרים את מזהה ה-URI של נקודת הקצה של Thrift ואת ספריית מחסן הנתונים.
מתחברים באמצעות SSH למופע הראשי של אשכול Dataproc.
בסשן ה-SSH, פותחים את הקובץ
/etc/hive/conf/hive-site.xml.sudo vim /etc/hive/conf/hive-site.xmlמשנים את
/etc/hive/conf/hive-site.xmlבאשכול Dataproc.<property> <name>hive.metastore.uris</name> <!-- Update this value. --> <value>ENDPOINT_URI</value> </property> <!-- Add this property entry. --> <property> <name>hive.metastore.warehouse.dir</name> <value>WAREHOUSE_DIR</value> </property>מפעילים מחדש את HiveServer2:
sudo systemctl restart hive-server2.service
הגדרת Dataproc לפני שליחת משימות
כדי להריץ את העבודות ב-Dataproc, צריך להוסיף את המשתמש hive למאפיין allowed.system.users בקובץ container-executor.cfg של Hadoop. כך המשתמשים יכולים להריץ שאילתות כדי לגשת לנתונים, כמו select * from.
בסשן ה-SSH, פותחים את הקובץ
container-executor.cfgשל Hadoop.sudo vim /etc/hadoop/conf/container-executor.cfgמוסיפים את השורה הבאה לכל צומת Dataproc.
allowed.system.users=hive
קבלת כרטיס Kerberos
צריך לקבל את כרטיס Kerberos לפני שמתחברים למופע של Dataproc Metastore.
sudo klist -kte /etc/security/keytab/metastore.service.keytab sudo kinit -kt /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME sudo klist # gets the ticket information. sudo hiveמחליפים את מה שכתוב בשדות הבאים:
-
PRINCIPAL_NAME: השם של החשבון הראשי.
-