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

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

לתשומת ליבכם

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

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

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

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

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

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

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

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

מטרות

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

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

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

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

יצירת פרויקט

  1. 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

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

  3. Enable the Dataproc API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    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 של אשכול 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 notebook.
  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