בדף הזה מוסבר איך להשתמש בחשבונות שירות כדי לאפשר לאפליקציות שפועלות במכונות וירטואליות (VM) לבצע אימות ל-API Cloud de Confiance by S3NS ולקבל הרשאת גישה למשאבים.
כדי להשתמש בחשבונות שירות לאימות, קודם צריך לוודא שהמכונה הווירטואלית מוגדרת לשימוש בחשבון שירות. כדי לעשות זאת, מבצעים אחת מהפעולות הבאות:
- כדי להגדיר חשבון שירות במהלך יצירת מכונה וירטואלית, ראו יצירת מכונה וירטואלית שמשתמשת בחשבון שירות שמנוהל על ידי משתמש.
- כדי להגדיר חשבון שירות במכונה וירטואלית קיימת, ראו שינוי חשבון השירות המצורף.
לפני שמתחילים
- קוראים את הסקירה הכללית על חשבונות שירות.
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Python שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.
-
התקינו את ה-CLI של Google Cloud.
-
הגדירו שה-CLI של gcloud ישתמש בזהות המאוחדת שלכם.
-
יוצרים פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
-
סקירה כללית
אחרי שמגדירים מכונה וירטואלית להפעלה באמצעות חשבון שירות, אפליקציה שפועלת במכונה הווירטואלית יכולה להשתמש באחת מהשיטות הבאות לאימות:
- ברוב האפליקציות, בוחרים באחת מהאפשרויות הבאות:
- באפליקציות שנדרש בהן אסימון גישה מסוג OAuth2, מבקשים אסימוני גישה ומשתמשים בהם ישירות משרת המטא-נתונים
אימות אפליקציות באמצעות פרטי כניסה של חשבון שירות
אחרי שמגדירים מכונה להפעלה כחשבון שירות, אפשר להשתמש בפרטי הכניסה של חשבון השירות כדי לאמת אפליקציות שפועלות במכונה.
אימות אפליקציות באמצעות ספריית לקוח
בספריות הלקוח אפשר להשתמש ב-Application Default Credentials כדי לעבור אימות מול Google APIs ולשלוח בקשות לאותם ממשקי API. בעזרת Application Default Credentials, אפליקציות יכולות לקבל באופן אוטומטי פרטי כניסה ממקורות שונים. כך אפשר לבדוק את האפליקציה באופן מקומי ואז לפרוס אותה במופע של Compute Engine בלי לשנות את קוד האפליקציה.
במאמר איך מספקים פרטי כניסה ל-Application Default Credentials מוסבר איך להגדיר את Application Default Credentials.
בדוגמה הזו נעשה שימוש בספריית הלקוח של Python כדי לבצע אימות ולשלוח בקשה ל-Cloud Storage API כדי להציג רשימה של הקטגוריות בפרויקט. בדוגמה הזו השתמשנו בתהליך הבא:
- מקבלים את פרטי האימות הנדרשים ל-Cloud Storage API ומפעילים את שירות Cloud Storage באמצעות השיטה
build()ופרטי הכניסה. - הצגת רשימה של קטגוריות ב-Cloud Storage.
אפשר להריץ את הדוגמה הזו במופע שיש לו גישה לניהול קטגוריות ב-Cloud Storage.
אימות אפליקציות ישירות באמצעות אסימוני גישה
ברוב האפליקציות, אפשר לבצע אימות באמצעות Application Default Credentials, שמוצאים את פרטי הכניסה ומנהלים את האסימונים בשבילכם. עם זאת, אם האפליקציה דורשת לספק אסימון גישה של OAuth2, Compute Engine מאפשר לכם לקבל אסימון גישה משרת המטא-נתונים שלו לשימוש באפליקציה. כברירת מחדל, שרת המטא-נתונים מחזיר אסימון גישה עם כל ההיקפים שצוינו עבור חשבון השירות של המופע. אם האפליקציה שלכם דורשת הרשאות מוגבלות, אתם יכולים לבקש טוקנים עם היקף הרשאות מצומצם או טוקנים מוגבלים. מידע נוסף זמין במאמר קבלת אסימוני גישה ספציפיים מסוג OAuth2.
יש כמה דרכים להשיג את טוקני הגישה האלה ולהשתמש בהם כדי לאמת את האפליקציות שלכם. לדוגמה, אפשר להשתמש ב-curl כדי ליצור בקשה פשוטה, או להשתמש בשפת תכנות כמו Python כדי לקבל גמישות רבה יותר.
cURL
כדי להשתמש ב-curl כדי לבקש אסימון גישה ולשלוח בקשה ל-API:
במכונה שבה האפליקציה פועלת, מריצים את הפקודה הבאה כדי לשלוח שאילתה לשרת המטא-נתונים ולקבל אסימון גישה:
$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google"בתגובה לבקשה מוחזרת תשובה שדומה לדוגמה הבאה:
{ "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAS08i85nHq39HE3C2LTrCARA", "expires_in":3599, "token_type":"Bearer" }בבקשות API צריך לכלול את הערך
access_token, ולא את התגובה כולה. אם התקנתם את מעבד ה-JSON של שורת הפקודה jq, אתם יכולים להשתמש בפקודה הבאה כדי לחלץ את הערך של אסימון הגישה מהתגובה:$ ACCESS_TOKEN=`curl \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google" | jq -r '.access_token'`מעתיקים את הערך של המאפיין
access_tokenמהתגובה ומשתמשים בו כדי לשלוח בקשות ל-API. לדוגמה, הבקשה הבאה מדפיסה רשימה של מכונות וירטואליות בפרויקט מאזור מסוים:$ curl https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances \ -H "Authorization":"Bearer ACCESS_TOKEN"מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט של הבקשה. -
ZONE: האזור שממנו יוצגו מכונות ה-VM. -
ACCESS_TOKEN: ערך אסימון הגישה שקיבלתם בשלב הקודם.
מידע על הפרמטרים שאפשר להגדיר בבקשה מופיע במאמר בנושא פרמטרים של המערכת.
-
Python
בדוגמה הזו מוסבר איך לבקש אסימון לגישה ל-Cloud Storage API באפליקציית Python. בדוגמה הבאה משתמשים בהליך הבא:
- שולחים בקשה לאסימון גישה משרת המטא-נתונים.
- מחפשים את אסימון הגישה בתגובה מהשרת.
- משתמשים באסימון הגישה כדי לשלוח בקשה ל-Cloud Storage.
- אם הבקשה מצליחה, הסקריפט מדפיס את התגובה.
תוקף אסימוני הגישה פג אחרי פרק זמן קצר. שרת המטא-נתונים שומר במטמון את אסימוני הגישה עד שנותרות להם 5 דקות לפני שהם יפוגו. אם אי אפשר לשמור טוקנים במטמון, יכול להיות שקצב הבקשות יוגבל אם תשלחו יותר מ-50 שאילתות בשנייה. כדי שהקריאות ל-API של האפליקציות שלכם יצליחו, צריך להיות להן אסימון גישה תקין.
אימות כלים במופע באמצעות חשבון שירות
יכול להיות שחלק מהאפליקציות משתמשות בפקודות מ-ה-CLI של gcloud, שכלול כברירת מחדל ברוב התמונות של Compute Engine. ה-CLI של gcloud מזהה באופן אוטומטי את חשבון השירות של מופע ואת ההרשאות הרלוונטיות שניתנו לחשבון השירות. במילים אחרות, אם תקצו את התפקידים הנכונים לחשבון השירות, תוכלו להשתמש ב-CLI של gcloud מהמכונות שלכם בלי להשתמש ב-gcloud auth login.
הזיהוי של חשבון השירות מתבצע באופן אוטומטי, והוא חל רק על ה-CLI של gcloud שכלול במופע. אם יוצרים כלים חדשים או מוסיפים כלים בהתאמה אישית, צריך לתת הרשאה לאפליקציה באמצעות ספריית לקוח או באמצעות אסימוני גישה ישירות באפליקציה.
כדי ליהנות מזיהוי אוטומטי של חשבון שירות, צריך לתת את התפקידים המתאימים ב-IAM לחשבון השירות ולצרף את חשבון השירות למופע.
לדוגמה, אם נותנים לחשבון שירות את התפקיד roles/storage.objectAdmin, ה-CLI של gcloud יכול לנהל ולגשת לאובייקטים של Cloud Storage באופן אוטומטי.
באופן דומה, אם מפעילים את roles/compute.instanceAdmin.v1 עבור חשבון השירות, הכלי gcloud compute יכול לנהל באופן אוטומטי את המופעים.