סקירה כללית על אימות

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

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

מבוא

בקרת הגישה בממשקי Google Cloud API כוללת אימות, הרשאה וביקורת. האימות קובע מי אתם, ההרשאה קובעת מה אתם יכולים לעשות והביקורת מנהלת תיעוד של מה שאתם עושים.

הדף הזה מתמקד בנושא האימות. למידע על הרשאה, קראו את המאמר ניהול זהויות והרשאות גישה (IAM). למידע על ביקורת, קראו את המאמר יומני ביקורת של Cloud.

נסו בעצמכם

אנחנו ממליצים למשתמשים חדשים ב-Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.

מתחילים לעבוד בלי לשלם

חשבונות משתמשים

חשבון משתמש הוא ישות, שנקראת גם זהות, שאפשר להעניק לה גישה למשאב. ממשקי Google Cloud API תומכים בשני סוגים של חשבונות משתמשים – חשבונות משתמשים וחשבונות שירות:

  • חשבונות משתמשים מנוהלים בתור חשבונות Google ומייצגים מפַתח, אדמין או כל אדם אחר שמנהל אינטראקציה עם Google Cloud. הם מיועדים לתרחישים שבהם לאפליקציה צריכה להיות גישה למשאבים מטעם משתמש אנושי. מידע נוסף זמין במאמר ביצוע אימות כמשתמש קצה.

  • חשבונות שירות מנוהלים על ידי IAM ומייצגים משתמשים לא אנושיים. הם מיועדים לתרחישים שבהם לאפליקציה צריכה להיות גישה למשאבים או אפשרות לבצע פעולות בעצמה, כמו הפעלת אפליקציות של App Engine או אינטראקציה עם מכונות של Compute Engine. מידע נוסף זמין במאמר ביצוע אימות כחשבון שירות.

תוכלו לקרוא על סוגי החשבונות בסקירה הכללית על IAM.

אפליקציות

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

פרטי הכניסה לאפליקציות כוללים את המידע הנדרש לגבי מבצע הקריאה ששולח בקשה לממשק Google Cloud API. סוגים תקינים של פרטי כניסה כוללים מפתחות API,‏ פרטי כניסה של לקוחות ב-OAuth 2.0 ומפתחות לחשבונות שירות. חשבונות שירות הם ייחודיים, כי ניתן להשתמש בהם גם בתור פרטי כניסה לאפליקציה וגם בתור זהות של חשבון משתמש. מידע נוסף זמין במאמר עבודה עם חשבון שירות.

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

שיטות אימות

ממשקי Google Cloud API משתמשים בפרוטוקול OAuth 2.0 לאימות של חשבונות משתמשים וחשבונות שירות. בעזרת תהליך האימות של OAuth 2.0 אפשר לקבוע מהם חשבון המשתמש והאפליקציה.

רוב ממשקי Google Cloud API תומכים גם בגישה אנונימית לנתונים ציבוריים באמצעות מפתחות API. עם זאת, מפתחות API מזהים רק את האפליקציה ולא את חשבון המשתמש. כאשר משתמשים במפתחות API, מוכרחים לאמת את חשבון המשתמש באמצעים אחרים.

ממשקי Google Cloud API תומכים בתהליכי אימות רבים בסביבות זמני ריצה שונות. כדי ליהנות מחוויית השימוש הטובה ביותר למפתחים, מומלץ להשתמש בספריות הלקוח ב-Google Cloud באמצעות ממשקי Google Cloud API. בספריות הלקוח נעשה שימוש בספריות אימות שסופקו על ידי Google ושתומכות במגוון תהליכי אימות וסביבות זמני ריצה.

כדי לפתח אפליקציה באמצעות ממשקי Google Cloud API, צריך לבצע את השלבים הכלליים הבאים:

  • בחירה של ספריות לקוח ב-Google Cloud ושימוש בהן.
  • קביעת תהליך האימות הנכון לאפליקציה.
  • חיפוש או יצירה של פרטי הכניסה הנדרשים לאפליקציה.
  • העברת פרטי הכניסה של האפליקציות לספריות הלקוח בזמן ההפעלה של האפליקציה, רצוי באמצעות Application Default Credentials‏ (ADC).

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

דרישה המלצה תגובה
גישה אנונימית לנתונים ציבוריים מפתח API מפתח API מזהה רק את האפליקציה ולא נדרש עבורו אימות משתמש. זה מספיק כדי לאפשר גישה לנתונים ציבוריים.
גישה לנתונים פרטיים מטעם משתמש קצה לקוח OAuth 2.0 לקוח OAuth 2.0 מזהה את האפליקציה ומאפשר למשתמשי קצה לאמת אותה באמצעות Google. זה מעניק לאפליקציה גישה לממשקי Google Cloud API מטעם משתמש הקצה.
גישה לנתונים פרטיים מטעם חשבון שירות בסביבות של Google Cloud חשבון שירות שסופק על ידי הסביבה אם האפליקציה פועלת בסביבת Google Cloud, כמו Compute Engine‏, App Engine‏, GKE‏, Cloud Run או Cloud Functions, היא צריכה להשתמש בחשבון השירות שסופק על ידי הסביבה.

ספריות הלקוח ב-Google Cloud ימצאו את פרטי הכניסה לחשבון השירות וישתמשו בהם באופן אוטומטי.
גישה לנתונים פרטיים מטעם חשבון שירות מחוץ לסביבות של Google Cloud מפתח לחשבון השירות עליכם ליצור חשבון שירות ולהוריד את המפתח הפרטי שלו כקובץ JSON. הקובץ צריך לעבור לספריות הלקוח ב-Google Cloud כדי שהן יוכלו ליצור פרטי כניסה לחשבון השירות בזמן הריצה.

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

דוגמאות

דוגמאות הקוד הבאות מציגות את אופן השימוש בשיטות אימות שונות באמצעות גרסת השפה של Go בספריית הלקוח של Pub/Sub. החוויה של המפתחים בשפות אחרות היא כמעט זהה.

מפתחות לחשבונות שירות

import (
	"context"
	"fmt"

	"cloud.google.com/go/pubsub"
)

// serviceAccount shows how to use a service account to authenticate.
func serviceAccount() error {
	// Download service account key per https://cloud.google.com/docs/authentication/production.
	// Set environment variable GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
	// This environment variable will be automatically picked up by the client.
	client, err := pubsub.NewClient(context.Background(), "your-project-id")
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %v", err)
	}
	defer client.Close()
	// Use the authenticated client.
	_ = client

	return nil
}
מידע נוסף זמין במאמר אימות כחשבון שירות.

חשבונות שירות בסביבות

import (
	"context"
	"fmt"

	"cloud.google.com/go/pubsub"
)

// envServiceAccount shows how to use an environment-provided service account to authenticate.
func envServiceAccount() error {
	// If your application runs in a GCP environment, such as Compute Engine,
	// you don't need to provide any application credentials. The client
	// library will find the credentials by itself.
	client, err := pubsub.NewClient(context.Background(), "your-project-id")
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %v", err)
	}
	defer client.Close()
	// Use the authenticated client.
	_ = client

	return nil
}
מידע נוסף זמין במאמר אימות כחשבון שירות.

לקוחות OAuth 2.0

import (
	"context"
	"fmt"
	"os"

	"cloud.google.com/go/pubsub"
	"golang.org/x/oauth2"
	"golang.org/x/oauth2/google"
	"google.golang.org/api/option"
)

// oauthClient shows how to use an OAuth client ID to authenticate as an end-user.
func oauthClient() error {
	ctx := context.Background()

	// Please make sure the redirect URL is the same as the one you specified when you
	// created the client ID.
	redirectURL := os.Getenv("OAUTH2_CALLBACK")
	if redirectURL == "" {
		redirectURL = "your redirect url"
	}
	config := &oauth2.Config{
		ClientID:     "your-client-id",
		ClientSecret: "your-client-secret",
		RedirectURL:  redirectURL,
		Scopes:       []string{"email", "profile"},
		Endpoint:     google.Endpoint,
	}

	// Dummy authorization flow to read auth code from stdin.
	authURL := config.AuthCodeURL("your state")
	fmt.Printf("Follow the link in your browser to obtain auth code: %s", authURL)

	// Read the authentication code from the command line
	var code string
	fmt.Scanln(&code)

	// Exchange auth code for OAuth token.
	token, err := config.Exchange(ctx, code)
	if err != nil {
		return fmt.Errorf("config.Exchange: %v", err)
	}
	client, err := pubsub.NewClient(ctx, "your-project-id", option.WithTokenSource(config.TokenSource(ctx, token)))
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %v", err)
	}
	defer client.Close()

	// Use the authenticated client.
	_ = client

	return nil
}
מידע נוסף זמין במאמר אימות כמשתמש קצה.

מפתחות API

import (
	"context"
	"fmt"

	"cloud.google.com/go/pubsub"
	"google.golang.org/api/option"
)

// apiKey shows how to use an API key to authenticate.
func apiKey() error {
	client, err := pubsub.NewClient(context.Background(), "your-project-id", option.WithAPIKey("api-key-string"))
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %v", err)
	}
	defer client.Close()
	// Use the authenticated client.
	_ = client

	return nil
}
מידע נוסף זמין במאמר שימוש במפתחות API.

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