במאמר הזה מוסבר איך לבצע אימות ב- Google Cloud כשמשתמשים ב-Terraform.
Application Default Credentials (ADC) היא הדרך המומלצת לאימות ב-Google Cloud כשמשתמשים ב-Terraform. השירות ADC משמש את ספריות האימות כדרך למצוא את פרטי הכניסה באופן אוטומטי על סמך הסביבה שבה פועלת האפליקציה. כשעובדים עם ADC, Terraform יכול לפעול גם בסביבת הפיתוח וגם בסביבת הייצור בלי שתצטרכו לשנות את שיטת האימות שלו מול השירותים וממשקי ה-API שלGoogle Cloud . למידע נוסף לגבי סדר החיפוש של פרטי הכניסה ב-ADC במיקומים השונים, תוכלו לקרוא את המאמר הסבר על Application Default Credentials.
אימות כשמשתמשים ב-Terraform בסביבת פיתוח מקומית
כשמשתמשים ב-Terraform בסביבת פיתוח מקומית, למשל בעמדת פיתוח, אפשר לבצע אימות באמצעות פרטי הכניסה שמשויכים לחשבון המשתמש או לחשבון השירות.
אימות באמצעות חשבון משתמש
כדי להגדיר ADC עם חשבון משתמש, משתמשים ב-Google Cloud CLI:
-
Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI by running the following command:
gcloud initIf you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
מסך הכניסה יופיע. אחרי שנכנסים, פרטי הכניסה נשמרים בקובץ פרטי הכניסה המקומי שמשמש את 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 בקשר לצירוף חשבונות שירות מוסבר לאילו משאבים אפשר לצרף חשבונות שירות ואיך מצרפים אותם.
Set up authentication:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAMEwith a name for the service account. -
To provide access to your project and your resources, grant a role to the service account:
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME: the name of the service accountPROJECT_ID: the project ID where you created the service accountROLE: the role to grant
- To grant another role to the service account, run the command as you did in the previous step.
-
Grant the required role to the principal that will attach the service account to other resources.
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser
Replace the following:
SERVICE_ACCOUNT_NAME: the name of the service accountPROJECT_ID: the project ID where you created the service accountUSER_EMAIL: the email address for a Google Account
אימות כשמריצים את Terraform בארגון או אצל ספק שירותי ענן אחר
אם אתם מתכננים להריץ את האפליקציה מחוץ ל- Google Cloud, תצטרכו להעביר פרטי כניסה שמזוהים על ידי Google Cloud כדי להשתמש בשירותיGoogle Cloud .
אימות באמצעות איחוד שירותי אימות הזהות של עומסי עבודה
הדרך המומלצת לאימות מול Google Cloud באמצעות פרטי כניסה שמגיעים מספק זהויות חיצוני היא באמצעות איחוד שירותי אימות הזהות של עומסי עבודה. אפשר ליצור קובץ תצורה עם פרטי הכניסה, ולהגדיר את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS שיצביע אליו. הדרך הזו מאובטחת יותר מאשר יצירה של מפתח לחשבון שירות. הוראות להגדרת איחוד שירותי אימות הזהות של עומסי עבודה ב-ADC זמינות במאמר איחוד שירותי אימות הזהות של עומסי עבודה עם עננים אחרים.
אימות באמצעות מפתחות של חשבון שירות
כשמריצים את Terraform בסביבת פיתוח מקומית, בפריסה מקומית או אצל ספק שירותי ענן אחר, אפשר ליצור חשבון שירות, להקצות לו ב-IAM את התפקידים הנדרשים לאפליקציה וליצור מפתח לחשבון השירות.
כך יוצרים מפתח של חשבון שירות ומגדירים אותו כזמין ל-ADC:
מבצעים את ההוראות ליצירת מפתח של חשבון שירות כדי ליצור את חשבון השירות עם התפקידים הנדרשים לאפליקציה ואת המפתח.
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALSto the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again.
אימות בשרתי קצה עורפיים של Cloud Storage
בעזרת Terraform אפשר להגדיר את Cloud Storage כקצה עורפי לאחסון קובצי מצב של Terraform. כדי לבצע אימות לקצה עורפי של Cloud Storage, אפשר להשתמש בכל אחת מהשיטות שמתוארות בדף הזה. מידע על משתני הגדרה שקשורים לאימות של קצה עורפי (backend) של Cloud Storage זמין במאמר קצה עורפי (backend) של Terraform ל-Cloud Storage.