אימות באשכול אישי

כשיוצרים אשכול Managed Service for Apache Spark, אפשר להפעיל את Managed Service for Apache Spark Personal Cluster Authentication כדי לאפשר לעומסי עבודה אינטראקטיביים באשכול לפעול בצורה מאובטחת בתור זהות המשתמש. המשמעות היא שאינטראקציות עם משאבים אחרים Google Cloud כמו Cloud Storage יאומתו כאילו אתם מבצעים אותן, ולא חשבון השירות של האשכול.

לתשומת ליבכם

  • כשיוצרים אשכול עם אימות אישי של האשכול, רק הזהות שלכם יכולה להשתמש באשכול. משתמשים אחרים לא יוכלו להריץ משימות באשכול או לגשת לנקודות הקצה של Component Gateway באשכול.

  • באשכולות שבהם מופעלת אימות אישי של האשכול, הגישה ל-SSH ולתכונות של Compute Engine כמו סקריפטים להפעלה נחסמת בכל המכונות הווירטואליות באשכול.

  • באשכולות שבהם מופעלת אימות אישי של האשכול, מערכת Kerberos מופעלת ומוגדרת באשכול באופן אוטומטי כדי לאפשר תקשורת מאובטחת בתוך האשכול. עם זאת, כל הזהויות של Kerberos באשכול יפעלו עם Google Cloud משאבים כאותו משתמש.

  • באשכולות שמופעל בהם אימות אישי של אשכולות, אי אפשר להשתמש בתמונות בהתאמה אישית.

  • אימות של אשכול אישי ב-Managed Service for Apache Spark לא תומך בתהליכי עבודה של Managed Service for Apache Spark.

  • אימות אשכול אישי ב-Managed Service for Apache Spark מיועד רק למשימות אינטראקטיביות שמורצות על ידי משתמש יחיד (אדם). למשימות ולפעולות ממושכות צריך להגדיר זהות מתאימה של חשבון שירות ולהשתמש בה.

  • ההרשאות שמועברות מצומצמות באמצעות גבולות הגישה לפרטי הכניסה. גבול הגישה שמוגדר כברירת מחדל מוגבל לקריאה ולכתיבה של אובייקטים ב-Cloud Storage בקטגוריות של Cloud Storage שנמצאות באותו פרויקט שמכיל את האשכול. אפשר להגדיר גבול גישה שאינו ברירת המחדל כשמפעילים enable_an_interactive_session.

  • ב-Managed Service for Apache Spark Personal Cluster Authentication נעשה שימוש במאפייני אורח של Compute Engine. אם התכונה 'מאפייני אורח' מושבתת, האימות של האשכול האישי ייכשל.

מטרות

  • יצירת אשכול של Managed Service for Apache Spark עם אימות אישי של אשכולות ב-Managed Service for Apache Spark.

  • מתחילים את העברת פרטי הכניסה לאשכול.

  • משתמשים ב-notebook של Jupyter באשכול כדי להריץ משימות Spark שמאומתות באמצעות פרטי הכניסה שלכם.

לפני שמתחילים

יצירת פרויקט

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. התקינו את ה-CLI של Google Cloud.

  6. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  7. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. התקינו את ה-CLI של Google Cloud.

  12. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  13. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init

הגדרת הסביבה

מגדירים את הסביבה מ-Cloud Shell או מטרמינל מקומי:

Cloud Shell

  1. מתחילים סשן Cloud Shell.

מסוף מקומי

  1. מריצים את gcloud auth login כדי לקבל פרטי כניסה תקינים של משתמש.

יצירת אשכול והפעלת סשן אינטראקטיבי

  1. מוצאים את כתובת האימייל של החשבון הפעיל ב-gcloud.

    gcloud auth list --filter=status=ACTIVE --format="value(account)"
    

  2. יוצרים אשכול.

    gcloud dataproc clusters create CLUSTER_NAME \
        --properties=dataproc:dataproc.personal-auth.user=your-email-address \
        --enable-component-gateway \
        --optional-components=JUPYTER \
        --region=REGION
    

  3. מפעילים סשן של העברת פרטי כניסה לאשכול כדי להתחיל להשתמש בפרטי הכניסה האישיים כשמבצעים אינטראקציה עם משאבי Google Cloud.

    gcloud dataproc clusters enable-personal-auth-session \
        --region=REGION \
        CLUSTER_NAME
    

    פלט לדוגמה:

    Injecting initial credentials into the cluster CLUSTER_NAME...done.
    Periodically refreshing credentials for cluster CLUSTER_NAME. This will continue running until the command is interrupted...
    

    1. דוגמה לגבול גישה מצומצם: בדוגמה הבאה מופעל סשן אימות אישי שהוא מגביל יותר מגבול הגישה המצומצם לפרטי הכניסה שמוגדר כברירת מחדל. היא מגבילה את הגישה לstaging bucket של אשכול Managed Service for Apache Spark (מידע נוסף זמין במאמר הגבלת היקף ההרשאות באמצעות גבולות של גישה לפרטי כניסה ).

       gcloud dataproc clusters enable-personal-auth-session \
          --project=PROJECT_ID \
          --region=REGION \
          --access-boundary=<(echo -n "{ \
       \"access_boundary\": { \
          \"accessBoundaryRules\": [{ \
             \"availableResource\": \"//storage.googleapis.com/projects/_/buckets/$(gcloud dataproc clusters describe --project=PROJECT_ID --region=REGION CLUSTER_NAME --format="value(config.configBucket)")\", \
             \"availablePermissions\": [ \
             \"inRole:roles/storage.objectViewer\", \
             \"inRole:roles/storage.objectCreator\", \
             \"inRole:roles/storage.objectAdmin\", \
             \"inRole:roles/storage.legacyBucketReader\" \
             ] \
          }] \
       } \
       }") \
          CLUSTER_NAME
      
  4. משאירים את הפקודה פועלת ועוברים לכרטיסייה חדשה ב-Cloud Shell או לסשן חדש במסוף. הלקוח ירענן את פרטי הכניסה בזמן שהפקודה פועלת.

  5. כדי לסיים את הסשן, מקלידים Ctrl-C.

גישה ל-Jupyter באשכול

gcloud

  1. קבלת פרטים על האשכול.
    gcloud dataproc clusters describe CLUSTER_NAME --region=REGION
    

    כתובת ה-URL של ממשק האינטרנט של Jupyter מופיעה בפרטי האשכול.

    ...
    JupyterLab: https://UUID-dot-us-central1.dataproc.googleusercontent.com/jupyter/lab/
    ...
    
  2. מעתיקים את כתובת ה-URL לדפדפן המקומי כדי להפעיל את ממשק המשתמש של Jupyter.
  3. בודקים שהאימות של האשכול האישי הצליח.
    1. מפעילים טרמינל של Jupyter.
    2. מריצים את gcloud auth list
    3. מוודאים ששם המשתמש שלכם הוא החשבון הפעיל היחיד.
  4. בטרמינל של Jupyter, מפעילים את האפשרות לאימות של Jupyter באמצעות Kerberos ושולחים משימות Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab managed-spark/$(hostname -f)
    
    1. מריצים את הפקודה klist כדי לוודא ש-Jupyter קיבל כרטיס TGT תקין.
  5. בטרמינל של Juypter, משתמשים ב-CLI של gcloud כדי ליצור קובץ rose.txt בקטגוריה של Cloud Storage בפרויקט.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. מסמנים את הקובץ כפרטי כדי שרק חשבון המשתמש שלכם יוכל לקרוא ממנו או לכתוב בו. מערכת Jupyter תשתמש בפרטי הכניסה האישיים שלכם כשתהיה אינטראקציה עם Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. מאמתים את הגישה הפרטית.
      gcloud storage objects describe gs://$BUCKET/rose.txt
      

      acl:
  6. email: $USER entity: user-$USER role: OWNER

המסוף

  1. לוחצים על הקישור Component Gateway Jupyter כדי להפעיל את ממשק המשתמש של Jupyter.
  2. בודקים שהאימות של האשכול האישי הצליח.
    1. הפעלת טרמינל של Jupyter
    2. מריצים את gcloud auth list
    3. מוודאים ששם המשתמש שלכם הוא החשבון הפעיל היחיד.
  3. בטרמינל של Jupyter, מפעילים את האפשרות לאימות של Jupyter באמצעות Kerberos ושולחים משימות Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab managed-spark/$(hostname -f)
    
    1. מריצים את הפקודה klist כדי לוודא ש-Jupyter קיבל כרטיס TGT תקין.
  4. בטרמינל של Jupyter, משתמשים ב-CLI של gcloud כדי ליצור קובץ rose.txtבקטגוריה של Cloud Storage בפרויקט.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. מסמנים את הקובץ כפרטי כדי שרק חשבון המשתמש שלכם יוכל לקרוא ממנו או לכתוב בו. מערכת Jupyter תשתמש בפרטי הכניסה האישיים שלכם כשתהיה אינטראקציה עם Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. מאמתים את הגישה הפרטית.
      gcloud storage objects describe gs://bucket-name/rose.txt
      
      acl:
  5. email: $USER entity: user-$USER role: OWNER

הפעלת משימת PySpark מ-Jupyter

  1. עוברים לתיקייה ויוצרים מחברת PySpark.
  2. מריצים עבודת ספירת מילים בסיסית בקובץ rose.txt שיצרתם למעלה.

    text_file = sc.textFile("gs://bucket-name/rose.txt")
    counts = text_file.flatMap(lambda line: line.split(" ")) \
             .map(lambda word: (word, 1)) \
             .reduceByKey(lambda a, b: a + b)
    print(counts.collect())

    ‫Spark יכול לקרוא את הקובץ rose.txt ב-Cloud Storage כי הוא פועל עם פרטי הכניסה של המשתמש.

    אפשר גם לבדוק את יומני הביקורת של קטגוריית Cloud Storage כדי לוודא שהגישה של העבודה ל-Cloud Storage מתבצעת באמצעות הזהות שלכם (מידע נוסף זמין במאמר בנושא יומני ביקורת של Cloud ב-Cloud Storage).

הסרת המשאבים

  1. מוחקים את האשכול של Managed Service for Apache Spark.
    gcloud dataproc clusters delete CLUSTER_NAME --region=REGION