במאמר הזה מוסבר איך לבצע אימות ב- Google Cloud כשמשתמשים ב-Terraform.
הדרך המומלצת לאימות ב-Google Cloud כשמשתמשים ב-Terraform היא באמצעות Application Default Credentials (ADC). השירות ADC משמש את ספריות האימות כדרך למצוא את פרטי הכניסה באופן אוטומטי על סמך הסביבה שבה פועלת האפליקציה. כשעובדים עם ADC, Terraform יכול לפעול גם בסביבת הפיתוח וגם בסביבת הייצור בלי שתצטרכו לשנות את שיטת האימות שלו מול השירותים וממשקי ה-API שלGoogle Cloud . למידע נוסף לגבי סדר החיפוש של פרטי הכניסה ב-ADC במיקומים השונים, תוכלו לקרוא את המאמר הסבר על Application Default Credentials.
אימות כשמשתמשים ב-Terraform בסביבת פיתוח מקומית
כשמשתמשים ב-Terraform בסביבת פיתוח מקומית, למשל בעמדת פיתוח, אפשר לבצע אימות באמצעות פרטי הכניסה שמשויכים לחשבון המשתמש או לחשבון השירות.
אימות באמצעות חשבון משתמש
כדי להגדיר ADC עם חשבון משתמש, משתמשים ב-Google Cloud CLI:
-
התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
אם אתם משתמשים במעטפת מקומית, אתם צריכים ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
מסך הכניסה יופיע. אחרי שנכנסים, פרטי הכניסה נשמרים בקובץ פרטי הכניסה המקומי שמשמש את ADC.
אימות באמצעות התחזות לחשבון שירות
אתם יכולים להתחזות לחשבון שירות כדי להגדיר קובץ ADC מקומי. Terraform משתמש בפרטי הכניסה האלה באופן אוטומטי.
אתם צריכים את התפקיד Service Account Token Creator (
roles/iam.serviceAccountTokenCreator) ב-IAM לחשבון השירות שאליו אתם מתחזים. מידע נוסף זמין במאמר בנושא התפקידים הנדרשים.כדי ליצור קובץ מקומי ל-ADC באמצעות התחזות לחשבון שירות, מריצים את הפקודה הבאה:
gcloud auth application-default login --impersonate-service-account SERVICE_ACCT_EMAIL
אם רוצים לאפשר למשתמשים להשתמש במקור משותף לאימות ראשי ובחשבון שירות משתנה לכל סביבה, צריך להגדיר את השדה impersonate_service_account בקובץ ההגדרות של Terraform:
provider "google" {
impersonate_service_account = "SERVICE_ACCT_EMAIL"
}
אימות כשמריצים את Terraform ב- Google Cloud
כשמריצים את Terraform בסביבת פיתוח מבוססת-ענן כמו Cloud Shell, הכלי משתמש בפרטי הכניסה שסיפקתם כשנכנסתם לחשבון לצורך אימות. Google Cloud
כשמשתמשים ב-Terraform עם שירותים כמו Compute Engine, App Engine ופונקציות של Cloud Run, אפשר לצרף חשבון שירות שמנוהל על ידי משתמש למשאבים. Google Cloud באופן כללי, אפשר לצרף חשבון שירות למשאבים של השירות שיכולים להריץ או לכלול קוד אפליקציה. כשמחברים חשבון שירות למשאב, הקוד שרץ במשאב יכול להשתמש בחשבון השירות הזה בתור הזהות שלו.
צירוף של חשבון שירות שמשתמש מנהל היא הדרך המועדפת להעברת פרטי הכניסה ל-ADC, בקוד שרץ ב- Google Cloud.
במאמר בחירת תפקידים מוגדרים מראש מוסבר איך מגדירים ב-IAM את התפקידים הנדרשים לחשבון השירות.
במאמרים ומסמכי העזרה של IAM בקשר לצירוף חשבונות שירות מוסבר לאילו משאבים אפשר לצרף חשבונות שירות ואיך מצרפים אותם.
מגדירים את האימות:
-
מוודאים שיש לכם את תפקיד ה-IAM Create Service Accounts (
roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM Project Admin (roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים -
יוצרים את חשבון השירות:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
מחליפים את הערך
SERVICE_ACCOUNT_NAMEבשם שרוצים לתת לחשבון השירות. -
כדי לתת גישה לפרויקט ולמשאבים, מקצים תפקיד לחשבון השירות:
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_NAME: השם של חשבון השירותPROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירותROLE: התפקיד שאתם רוצים לתת
- כדי להקצות תפקיד נוסף לחשבון השירות, מריצים שוב את הפקודה שמו שעשיתם בשלב הקודם.
-
מקצים את התפקיד הנדרש לחשבון המשתמש שיצרף את חשבון השירות למשאבים אחרים.
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_NAME: השם של חשבון השירותPROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירותUSER_EMAIL: כתובת האימייל של חשבון Google
אימות כשמריצים את Terraform בארגון או אצל ספק אחר של שירותי ענן
אם אתם מתכננים להריץ את האפליקציה מחוץ ל- Google Cloud, תצטרכו להעביר פרטי כניסה שמזוהים על ידי Google Cloud כדי להשתמש בשירותיGoogle Cloud .
אימות באמצעות איחוד שירותי אימות הזהויות של עומסי עבודה
הדרך המועדפת לאימות מול Google Cloud באמצעות פרטי כניסה שמגיעים מספק זהויות חיצוני היא באמצעות איחוד שירותי אימות הזהות של עומסי עבודה. אפשר ליצור קובץ תצורה עם פרטי הכניסה, ולהגדיר את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS שיצביע אליו. הדרך הזו מאובטחת יותר מאשר יצירה של מפתח לחשבון שירות. הוראות להגדרת איחוד שירותי אימות הזהות של עומסי עבודה ב-ADC זמינות במאמר איחוד שירותי אימות הזהות של עומסי עבודה עם עננים אחרים.
אימות באמצעות מפתחות של חשבון שירות
כשמריצים את Terraform בסביבת פיתוח מקומית, בפריסה מקומית או אצל ספק שירותי ענן אחר, אפשר ליצור חשבון שירות, להקצות לו ב-IAM את התפקידים הנדרשים לאפליקציה וליצור מפתח לחשבון השירות.
כך יוצרים מפתח של חשבון שירות ומגדירים אותו כזמין ל-ADC:
מבצעים את ההוראות ליצירת מפתח של חשבון שירות כדי ליצור את חשבון השירות עם התפקידים הנדרשים לאפליקציה ואת המפתח.
אימות בשרתי קצה עורפיים של Cloud Storage
Terraform מאפשרת להגדיר את Cloud Storage כקצה עורפי לאחסון קובצי מצב של Terraform. כדי לבצע אימות לקצה עורפי של Cloud Storage, אפשר להשתמש בכל אחת מהשיטות שמתוארות בדף הזה. מידע על משתני הגדרה שקשורים לאימות של קצה עורפי (backend) של Cloud Storage זמין במאמר קצה עורפי (backend) של Terraform ל-Cloud Storage.