אימות ל-Terraform

במאמר הזה מוסבר איך לבצע אימות ב- Cloud de Confiance by S3NS כשמשתמשים ב-Terraform.

הדרך המומלצת לאימות ב-Cloud de Confiance כשמשתמשים ב-Terraform היא באמצעות Application Default Credentials‏ (ADC). השירות ADC משמש את ספריות האימות כדרך למצוא את פרטי הכניסה באופן אוטומטי על סמך הסביבה שבה פועלת האפליקציה. כשעובדים עם ADC, ‏ Terraform יכול לפעול גם בסביבת הפיתוח וגם בסביבת הייצור בלי שתצטרכו לשנות את שיטת האימות שלו מול השירותים וממשקי ה-API שלCloud de Confiance by S3NS . למידע נוסף לגבי סדר החיפוש של פרטי הכניסה ב-ADC במיקומים השונים, תוכלו לקרוא את המאמר הסבר על Application Default Credentials.

אימות כשמשתמשים ב-Terraform בסביבת פיתוח מקומית

כשמשתמשים ב-Terraform בסביבת פיתוח מקומית, למשל בעמדת פיתוח, אפשר לבצע אימות באמצעות פרטי הכניסה שמשויכים לחשבון המשתמש או לחשבון השירות.

אימות באמצעות חשבון משתמש

כדי להגדיר ADC עם חשבון משתמש, משתמשים ב-Google Cloud CLI:

  1. התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

    gcloud init
  2. יוצרים פרטי כניסה לאימות מקומי עבור חשבון המשתמש:

    gcloud auth application-default login

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

    מסך הכניסה יופיע. אחרי שנכנסים, פרטי הכניסה נשמרים בקובץ פרטי הכניסה המקומי שמשמש את ADC.

אימות באמצעות התחזות לחשבון שירות

אתם יכולים להתחזות לחשבון שירות כדי להגדיר קובץ ADC מקומי. ‫Terraform משתמש בפרטי הכניסה האלה באופן אוטומטי.

  1. אתם צריכים את התפקיד Service Account Token Creator ‏(roles/iam.serviceAccountTokenCreator) ב-IAM לחשבון השירות שאליו אתם מתחזים. מידע נוסף זמין במאמר בנושא התפקידים הנדרשים.

  2. כדי ליצור קובץ מקומי ל-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 ב- Cloud de Confiance

כשמריצים את Terraform בסביבת פיתוח מבוססת-ענן כמו Cloud Shell, הכלי משתמש בפרטי הכניסה שסיפקתם כשנכנסתם לחשבון לצורך אימות. Cloud de Confiance

כשמשתמשים ב-Terraform עם שירותים כמו Compute Engine,‏ App Engine ופונקציות של Cloud Run, אפשר לצרף חשבון שירות שמנוהל על ידי משתמש למשאבים. Cloud de Confiance באופן כללי, אפשר לצרף חשבון שירות למשאבים של השירות שיכולים להריץ או לכלול קוד אפליקציה. כשמחברים חשבון שירות למשאב, הקוד שרץ במשאב יכול להשתמש בחשבון השירות הזה בתור הזהות שלו.

צירוף של חשבון שירות שמשתמש מנהל היא הדרך המועדפת להעברת פרטי הכניסה ל-ADC, בקוד שרץ ב- Cloud de Confiance.

במאמר בחירת תפקידים מוגדרים מראש מוסבר איך מגדירים ב-IAM את התפקידים הנדרשים לחשבון השירות.

במאמרים ומסמכי העזרה של IAM בקשר לצירוף חשבונות שירות מוסבר לאילו משאבים אפשר לצרף חשבונות שירות ואיך מצרפים אותם.

מגדירים את האימות:

  1. מוודאים שיש לכם את תפקיד ה-IAM ‏Create Service Accounts ‏(roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM ‏Project Admin ‏(roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים
  2. יוצרים את חשבון השירות:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    מחליפים את הערך SERVICE_ACCOUNT_NAME בשם שרוצים לתת לחשבון השירות.

  3. כדי לתת גישה לפרויקט ולמשאבים, מקצים תפקיד לחשבון השירות:

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com" --role=ROLE

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE_ACCOUNT_NAME: השם של חשבון השירות
    • PROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירות
    • ROLE: התפקיד שאתם רוצים לתת
  4. כדי להקצות תפקיד נוסף לחשבון השירות, מריצים שוב את הפקודה שמו שעשיתם בשלב הקודם.
  5. מקצים את התפקיד הנדרש לחשבון המשתמש שיצרף את חשבון השירות למשאבים אחרים.

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/SUBJECT_ID" --role=roles/iam.serviceAccountUser

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE_ACCOUNT_NAME: השם של חשבון השירות.
    • PROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירות.
    • POOL_ID: מזהה מאגר הזהויות של כוח העבודה.
    • SUBJECT_ID: מזהה נושא. בדרך כלל זה המזהה של משתמש במאגר זהויות של כוח עבודה. לפרטים נוספים, קראו את המאמר ייצוג המשתמשים במאגרי כוח עבודה בכללי מדיניות IAM.

אימות כשמריצים את Terraform בארגון או אצל ספק אחר של שירותי ענן

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

אימות באמצעות איחוד שירותי אימות הזהויות של עומסי עבודה

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

אימות באמצעות מפתחות של חשבון שירות

כשמריצים את Terraform בסביבת פיתוח מקומית, בפריסה מקומית או אצל ספק שירותי ענן אחר, אפשר ליצור חשבון שירות, להקצות לו ב-IAM את התפקידים הנדרשים לאפליקציה וליצור מפתח לחשבון השירות.

כך יוצרים מפתח של חשבון שירות ומגדירים אותו כזמין ל-ADC:

  1. מבצעים את ההוראות ליצירת מפתח של חשבון שירות כדי ליצור את חשבון השירות עם התפקידים הנדרשים לאפליקציה ואת המפתח.

אימות בשרתי קצה עורפיים של Cloud Storage

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

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