הגדרת אבטחה ב-Dataproc

כשיוצרים אשכול Dataproc, אפשר להפעיל את המצב המאובטח של Hadoop באמצעות Kerberos כדי לספק ריבוי דיירים באמצעות אימות משתמשים, בידוד והצפנה בתוך אשכול Dataproc.

אימות משתמשים ושירותים אחרים של Google Cloud Platform. אימות לכל משתמש באמצעות Kerberos חל רק בתוך האשכול. האינטראקציות עם שירותים אחרים של Google Cloud Google, כמו Cloud Storage, ממשיכות להיות מאומתות כחשבון השירות של האשכול.

הפעלה של מצב מאובטח של Hadoop באמצעות Kerberos

הפעלת Kerberos ומצב מאובטח של Hadoop באשכול תכלול את ההפצה של MIT של Kerberos ותגדיר את Apache Hadoop YARN,‏ HDFS,‏ Hive,‏ Spark ורכיבים קשורים לשימוש בו לאימות.

הפעלת Kerberos יוצרת מרכז להקצאת מפתחות (KDC) באשכול, שמכיל חשבונות שירות וחשבון ראשי. החשבון הראשי הבסיסי הוא החשבון עם הרשאות אדמין ל-KDC באשכול. הוא יכול להכיל גם ישויות משתמש רגילות או להיות מחובר באמצעות יחסי אמון בין תחומים ל-KDC אחר שמכיל את ישויות המשתמש.

יצירת אשכול Kerberos

אפשר להשתמש ב-Google Cloud CLI, ב-Dataproc API או במסוףGoogle Cloud כדי להפעיל את Kerberos באשכולות שמשתמשים בגרסה 1.3 של תמונת Dataproc ואילך.

פקודת gcloud

כדי להגדיר באופן אוטומטי אשכול Dataproc חדש של Kerberos (גרסת התמונה 1.3 ואילך), משתמשים בפקודה gcloud dataproc clusters create.

gcloud dataproc clusters create cluster-name \
    --image-version=2.0 \
    --enable-kerberos

מאפיין אשכול: במקום להשתמש בדגל --enable-kerberos כמו בדוגמה הקודמת, אפשר להגדיר את Kerberos באופן אוטומטי על ידי העברת הדגל --properties "dataproc:kerberos.beta.automatic-config.enable=true" לפקודה ליצירת אשכולות (ראו מאפייני שירות Dataproc).

API ל-REST

אפשר ליצור אשכולות Kerberos באמצעות ClusterConfig.SecurityConfig.KerberosConfig כחלק מבקשת clusters.create. צריך להגדיר את enableKerberos לערך true.

המסוף

אפשר להגדיר את Kerberos באופן אוטומטי באשכול חדש על ידי בחירה באפשרות Enable (הפעלה) בקטע Kerberos and Hadoop Secure Mode (מצב מאובטח של Kerberos ו-Hadoop) בחלונית Manage security (ניהול אבטחה) בדף Create a cluster (יצירת אשכול) במסוף Google Cloud .

יצירת אשכול Kerberos עם סיסמת מנהל ראשי משלכם

מגדירים את הסיסמה של ה-principal הבסיסי של Kerberos ואז יוצרים אשכול.

הגדרת הסיסמה של השם הראשי של שרת Kerberos

החשבון הראשי של שורש Kerberos הוא החשבון עם הרשאות אדמין ל-KDC באשכול. כדי לספק בצורה מאובטחת את הסיסמה של ישות מורשית הבסיסית של Kerberos, המשתמשים יכולים להצפין אותה באמצעות מפתח של שירות ניהול מפתחות (KMS), ואז לאחסן אותה בקטגוריה של Google Cloud Storage שאפשר לגשת אליה באמצעות חשבון השירות של האשכול. צריך להקצות לחשבון השירות של האשכול את תפקיד ה-IAMcloudkms.cryptoKeyDecrypter.

  1. מקצים את התפקיד Cloud KMS CryptoKey Encrypter/Decrypter לחשבון השירות של האשכול:

    gcloud projects add-iam-policy-binding project-id \
        --member serviceAccount:project-number-compute@developer.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyDecrypter
    

  2. יצירת אוסף מפתחות:

    gcloud kms keyrings create my-keyring --location global
    

  3. יוצרים מפתח באוסף המפתחות:

    gcloud kms keys create my-key \
        --location global \
        --keyring my-keyring \
        --purpose encryption
    

  4. הצפנת הסיסמה של המשתמש הראשי ב-Kerberos:

    echo "my-password" | \
      gcloud kms encrypt \
        --location=global \
        --keyring=my-keyring \
        --key=my-key \
        --plaintext-file=- \
        --ciphertext-file=kerberos-root-principal-password.encrypted
    

    1. מעלים את הסיסמה המוצפנת לקטגוריה של Cloud Storage בפרויקט.
      1. דוגמה:
        gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
        

יצירת האשכול

אפשר להשתמש בפקודה gcloud או ב-Dataproc API כדי להפעיל את Kerberos באשכולות עם סיסמת העיקרון הבסיסי שלכם.

פקודת gcloud

כדי ליצור אשכול Kerberos Dataproc (גרסת אימג' 1.3 ואילך), משתמשים בפקודה gcloud dataproc clusters create.

gcloud dataproc clusters create cluster-name \
    --region=region \
    --image-version=2.0 \
    --kerberos-root-principal-password-uri=gs://my-bucket/kerberos-root-principal-password.encrypted \
    --kerberos-kms-key=projects/project-id/locations/global/keyRings/my-keyring/cryptoKeys/my-key

משתמשים בקובץ תצורה בפורמט YAML (או JSON). במקום להעביר kerberos-*flags לפקודה gcloud כמו בדוגמה שלמעלה, אפשר להציב הגדרות של Kerberos בקובץ תצורה YAML (או JSON), ואז להפנות לקובץ התצורה כדי ליצור את אשכול Kerberos.

  1. יוצרים קובץ תצורה (אפשר לעיין באישורי SSL, בהגדרות נוספות של Kerberos וביחסי אמון בין תחומים כדי לראות הגדרות נוספות שאפשר לכלול בקובץ):
    root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted
    kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
  2. כדי ליצור את אשכול Kerberos, משתמשים בפקודה gcloud הבאה:
    gcloud dataproc clusters create cluster-name \
        --region=region \
        --kerberos-config-file=local path to config-file \
        --image-version=2.0
    

שיקולי אבטחה. ‫Dataproc משליך את הטופס המפוענח של הסיסמה אחרי הוספת חשבון הבסיס ל-KDC. מטעמי אבטחה, אחרי שיוצרים את האשכול אפשר למחוק את קובץ הסיסמה ואת המפתח שמשמש לפענוח הסוד, ולהסיר את חשבון השירות מהתפקיד kmsKeyDecrypter. אל תעשו את זה אם אתם מתכננים להגדיל את הקיבולת של האשכול, כי בשביל זה צריך את קובץ הסיסמה, את המפתח ואת התפקיד של חשבון השירות.

API ל-REST

אפשר ליצור אשכולות Kerberos באמצעות ClusterConfig.SecurityConfig.KerberosConfig כחלק מבקשת clusters.create. מגדירים את enableKerberos כ-true ומגדירים את השדות rootPrincipalPasswordUri ו-kmsKeyUri.

המסוף

כשיוצרים אשכול עם גרסת תמונה 1.3 ומעלה, בוחרים באפשרות Enable (הפעלה) בקטע Kerberos and Hadoop Secure Mode (מצב מאובטח של Kerberos ו-Hadoop) בחלונית Manage security (ניהול אבטחה) בדף Create a cluster (יצירת אשכול) במסוף Google Cloud , ואז משלימים את אפשרויות האבטחה (שמוסברות בקטעים הבאים).

OS Login

אפשר לבצע ניהול של KDC באשכול באמצעות הפקודה kadmin, באמצעות המשתמש הראשי של Kerberos או באמצעות sudo kadmin.local. מפעילים את OS Login כדי לשלוט במי שיכול להריץ פקודות של משתמש-על.

אישורי SSL

כחלק מהפעלת מצב מאובטח של Hadoop, ‏ Dataproc יוצר אישור בחתימה עצמית כדי להפעיל הצפנת SSL באשכול. לחלופין, אפשר לספק אישור להצפנת SSL של אשכול על ידי הוספת ההגדרות הבאות לקובץ תצורה כשיוצרים אשכול Kerberos:

  • ssl:keystore_password_uri: המיקום ב-Cloud Storage של הקובץ המוצפן באמצעות KMS שמכיל את הסיסמה לקובץ של מאגר המפתחות.
  • ssl:key_password_uri: המיקום ב-Cloud Storage של הקובץ המוצפן ב-KMS שמכיל את הסיסמה למפתח בקובץ של מאגר המפתחות.
  • ssl:keystore_uri: המיקום ב-Cloud Storage של קובץ מאגר המפתחות שמכיל את אישור התו הכללי ואת המפתח הפרטי שמשמש את צמתי האשכול.
  • ssl:truststore_password_uri: המיקום ב-Cloud Storage של הקובץ המוצפן באמצעות KMS שמכיל את הסיסמה לקובץ של מאגר האישורים.
  • ssl:truststore_uri: המיקום ב-Cloud Storage של קובץ מאגר האישורים שמכיל אישורים מהימנים.

קובץ תצורה לדוגמה:

root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted
kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
ssl:
  key_password_uri: gs://bucket/key_password.encrypted
  keystore_password_uri: gs://bucket/keystore_password.encrypted
  keystore_uri: gs://bucket/keystore.jks
  truststore_password_uri: gs://bucket/truststore_password.encrypted
  truststore_uri: gs://bucket/truststore.jks

הגדרות נוספות של Kerberos

כדי לציין תחום Kerberos, צריך ליצור אשכול Kerberos עם המאפיין הבא שנוסף לקובץ התצורה של Kerberos:

  • realm: השם של תחום Kerberos באשכול.

אם לא מגדירים את המאפיין הזה, הדומיין של שמות המארחים (באותיות רישיות) יהיה התחום.

כדי לציין את מפתח האב של מסד הנתונים של KDC, צריך ליצור אשכול Kerberos עם המאפיין הבא שנוסף לקובץ התצורה של Kerberos:

  • kdc_db_key_uri: המיקום ב-Cloud Storage של הקובץ המוצפן ב-KMS שמכיל את מפתח הראשי של מסד הנתונים של KDC.

אם לא מגדירים את המאפיין הזה, Dataproc ייצור את מפתח הראשי.

כדי לציין את משך החיים המקסימלי של כרטיס למתן כרטיסים (בשעות), צרו אשכול Kerberos עם המאפיין הבא שנוסף לקובץ התצורה של Kerberos:

  • tgt_lifetime_hours: משך החיים המקסימלי של כרטיס הגישה בשעות.

אם לא מגדירים את המאפיין הזה, Dataproc מגדיר את משך החיים של כרטיס ההרשאה ל-10 שעות.

אמון בין תחומים

ב-KDC באשכול יש בהתחלה רק את מנהל הבסיס ואת עקרונות השירות. אתם יכולים להוסיף חשבונות משתמשים באופן ידני או ליצור יחסי אמון בין תחומים עם שרת KDC חיצוני או שרת Active Directory שמכיל חשבונות משתמשים. מומלץ להשתמש ב-Cloud VPN או ב-Cloud Interconnect כדי להתחבר ל-KDC או ל-Active Directory מקומיים.

כדי ליצור אשכול Kerberos שתומך באמון בין תחומים, צריך להוסיף את ההגדרות הבאות לקובץ התצורה של Kerberos כשיוצרים אשכול Kerberos. מצפינים את הסיסמה המשותפת באמצעות KMS ומאחסנים אותה בקטגוריה של Cloud Storage שחשבון השירות של האשכול יכול לגשת אליה.

  • cross_realm_trust:admin_server: שם המארח או הכתובת של שרת האדמין המרוחק
  • cross_realm_trust:kdc: שם המארח או הכתובת של שרת ה-KDC המרוחק
  • cross_realm_trust:realm: שם התחום המרוחק שרוצים לתת בו אמון
  • cross_realm_trust:shared_password_uri: המיקום ב-Cloud Storage של הסיסמה המשותפת שמוצפנת באמצעות KMS

קובץ תצורה לדוגמה:

root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted
kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
cross_realm_trust:
  admin_server: admin.remote.realm
  kdc: kdc.remote.realm
  realm: REMOTE.REALM
  shared_password_uri: gs://bucket/shared_password.encrypted

כדי להפעיל אמון בין תחומים ב-KDC מרוחק, פועלים לפי השלבים הבאים:

  1. מוסיפים את הטקסט הבא לקובץ /etc/krb5.conf ב-KDC המרוחק:

    [realms]
    DATAPROC.REALM = {
      kdc = MASTER-NAME-OR-ADDRESS
      admin_server = MASTER-NAME-OR-ADDRESS
    }

  2. יוצרים את משתמש האמון:

    kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
    

  3. כשמתבקשים, מזינים את הסיסמה של המשתמש. הסיסמה צריכה להיות זהה לתוכן של קובץ הסיסמה המוצפן ששותף

כדי להפעיל אמון בין תחומים באמצעות Active Directory, מריצים את הפקודות הבאות ב-PowerShell כאדמין:

  1. יוצרים הגדרת KDC ב-Active Directory.

    ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
    

  2. יוצרים יחסי אמון ב-Active Directory.

    netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
    
    הסיסמה צריכה להיות זהה לתוכן של קובץ הסיסמה המוצפן ששותף.

dataproc חשבון משתמש

כששולחים משימה באמצעות jobs API של Dataproc לאשכול Dataproc Kerberos, היא מופעלת כ-dataproc Kerberos principal מ-Kerberos realm של האשכול.

ריבוי דיירים נתמך באשכול Dataproc Kerberos אם שולחים משימה ישירות לאשכול, למשל באמצעות SSH. עם זאת, אם המשימה קוראת או כותבת לשירותים אחרים Google Cloud , כמו Cloud Storage, המשימה פועלת בתור חשבון השירות של האשכול.

מאפייני ברירת מחדל ומאפיינים מותאמים אישית של אשכול

מצב מאובטח של Hadoop מוגדר באמצעות מאפיינים בקובצי תצורה. מערכת Dataproc מגדירה ערכי ברירת מחדל למאפיינים האלה.

כדי לשנות את מאפייני ברירת המחדל כשיוצרים את האשכול, משתמשים בדגל gcloud dataproc clusters create --properties או קוראים ל-API‏ clusters.create ומגדירים את מאפייני SoftwareConfig (ראו דוגמאות למאפייני אשכול).

מצב זמינות גבוהה

במצב זמינות גבוהה (HA), לאשכול Kerberos יהיו 3 שרתי KDC: אחד בכל שרת ראשי. ה-KDC שפועל בשרת הראשי ה "ראשון" ($CLUSTER_NAME-m-0) יהיה ה-KDC הראשי וישמש גם כשרת האדמין. מסד הנתונים של ה-KDC הראשי יסונכרן עם שני ה-KDC המשוכפלים במרווחי זמן של 5 דקות באמצעות משימת cron, ושלושת ה-KDC ישרתו תנועת קריאה.

מערכת Kerberos לא תומכת באופן מובנה בשכפול בזמן אמת או במעבר אוטומטי לגיבוי אם שרת ה-KDC הראשי מושבת. כדי לבצע יתירות כשל ידנית:

  1. בכל מכונות ה-KDC, בקובץ /etc/krb5.conf, משנים את admin_server לשם הדומיין שמוגדר במלואו (FQDN) של השרת הראשי החדש. מסירים את השרת הראשי הישן מרשימת ה-KDC.
  2. בשרת ה-KDC הראשי החדש, מגדירים משימת cron להפצת מסד הנתונים.
  3. בשרת ה-KDC הראשי החדש, מפעילים מחדש את התהליך admin_server (krb5-admin-server).
  4. בכל מכונות ה-KDC, מפעילים מחדש את תהליך ה-KDC‏ (krb5-kdc).

הגדרת רשת

כדי לוודא שצמתי העובדים יכולים לתקשר עם שרת ה-KDC ועם שרת האדמין של Kerberos שפועלים בצומת הראשי, צריך לוודא שכללי חומת האש של ה-VPC מאפשרים תעבורת TCP ו-UDP נכנסת ביציאה 88 ותעבורת TCP נכנסת ביציאה 749 בצומת הראשי. במצב זמינות גבוהה, מוודאים שכללי חומת האש של ה-VPC מאפשרים תעבורת נתונים נכנסת (ingress) של TCP ביציאה 754 בשרתים הראשיים, כדי לאפשר את הפצת השינויים שבוצעו בשרת ה-KDC הראשי. כדי להגדיר את Kerberos בצורה תקינה, צריך להגדיר DNS הפוך. בנוסף, כדי לבצע קנוניזציה של חשבון משתמש בשירות שמבוסס על מארח, צריך לוודא שה-DNS ההפוך מוגדר בצורה נכונה ברשת של האשכול.

המאמרים הבאים