הגדרת יעד ליומן באמצעות חשבונות שירות שמנוהלים על ידי משתמשים

בדף הזה מוסבר איך לנתב רשומות ביומן על ידי יצירת מאגרי מידע שמוגדרים עם חשבונות שירות בניהול המשתמש. כברירת מחדל, שירות Logging משתמש בחשבון שירות של Logging לכל יעד בתוך משאב. עם זאת, אם יעד ההעברה של היומנים נמצא בפרויקטים שונים, אתם יכולים ליצור ולנהל חשבון שירות בניהול המשתמשים שלכם, שיאפשר לכם לנהל באופן מרכזי את ההרשאות של ניהול זהויות וגישה (IAM) מהפרויקט שמכיל את חשבון השירות בניהול המשתמשים.

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

מומלץ לבדוק את ההגדרה של sink ביומן כשמבצעים שינויים באחסון היומנים. לדוגמה, אם מוחקים את היעד של sink ביומן, צריך למחוק גם את sink ביומן התואם.

לפני שמתחילים

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

    gcloud init
  2. מוודאים שיש לכם חשבון שירות בניהול המשתמש, ואז מגדירים את המשתנים הבאים לערכים המתאימים לחשבון השירות בניהול המשתמש:

    • CUSTOM_SA_PROJECT_ID: מזהה הפרויקט שמכיל את חשבון השירות שמנוהל על ידי המשתמש.

    • CUSTOM_SA: כתובת האימייל של חשבון השירות שמנוהל על ידי המשתמש.

    מידע על יצירת חשבון שירות זמין במאמר יצירת חשבונות שירות.

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

    • LOG_BUCKET_PROJECT_ID: מזהה הפרויקט שמכיל את קטגוריה ביומן.

    • LOCATION: המיקום של קטגוריית היומנים.

    • BUCKET_NAME: השם של קטגוריית היומנים.

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

    • SINK_PROJECT_ID: מזהה הפרויקט שבו אתם מתכננים ליצור את sink ביומן.

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

      gcloud logging settings describe --project=SINK_PROJECT_ID
      

      בתשובה, השורה שמתחילה ב-loggingServiceAccountId מציגה את כתובת האימייל של חשבון השירות.

  5. בפרויקט שמכיל את חשבון השירות בניהול המשתמשים, מוודאים שהאילוץ הבוליאני של מדיניות הארגון iam.disableCrossProjectServiceAccountUsage לא נאכף. כברירת מחדל, האילוץ הזה נאכף. כדי להשבית את האילוץ הזה ולאפשר לכם לצרף חשבון שירות למשאב בפרויקט אחר, מריצים את הפקודה הבאה:

    gcloud resource-manager org-policies disable-enforce \
    iam.disableCrossProjectServiceAccountUsage \
    --project=CUSTOM_SA_PROJECT_ID
    

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

מתן תפקידים ב-IAM

בקטע הזה מתוארות הדרישות המוקדמות ליצירת יעד שמשתמש בחשבון שירות בניהול המשתמש.

מתן הרשאה לחשבון שירות שמנוהל על ידי משתמש לכתוב רשומות ביומן ליעד של ה-sink

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

כדי לתת את ההרשאות הנדרשות לחשבון השירות שמנוהל על ידי המשתמש, צריך להקצות לו את התפקיד 'כותב מאגרי יומנים' (roles/logging.bucketWriter) בפרויקט שמכיל את מאגר היומנים:

gcloud projects add-iam-policy-binding LOG_BUCKET_PROJECT_ID \
--member='serviceAccount:CUSTOM_SA' \
--role='roles/logging.bucketWriter'

מידע נוסף על הפקודה הקודמת זמין במאמר בנושא gcloud projects add-iam-policy-binding.

הגדרת התחזות לחשבון שירות

מגדירים את חשבון השירות שמוגדר כברירת מחדל ב-Cloud Logging, ‏ LOGGING_SA, כך שהוא יוכל להתחזות לחשבון השירות בניהול המשתמש,‏ CUSTOM_SA. חשבון השירות שמוגדר כברירת מחדל ב-Cloud Logging קיים ב Cloud de Confiance פרויקט שבו רוצים ליצור מאגרי יומנים שמשתמשים בחשבון השירות בניהול המשתמשים.

כדי להגדיר התחזות לחשבון שירות, צריך להעניק את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) לחשבון השירות של Cloud Logging בחשבון השירות בניהול המשתמש:

gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='serviceAccount:LOGGING_SA' \
--role='roles/iam.serviceAccountTokenCreator'

התחזות לחשבון שירות כוללת שני חשבונות משתמשים: חשבון השירות שאין לו הרשאות גישה למשאב, וחשבון השירות שנושא את ההרשאות שיש לו הרשאות גישה למשאב. במקרה הזה, חשבון השירות בניהול המשתמשים הוא החשבון שנושא את ההרשאות, כי יש לו אפשרות לכתוב רשומות ביומן ליעד של sink, שהוא קטגוריה ביומן בפרויקט שנקרא LOG_BUCKET_PROJECT_ID. לחשבון השירות של Logging יש הרשאות לניתוב רשומות ביומן.

מידע נוסף על התפקיד 'יצירת אסימונים בחשבון שירות' זמין במאמר התפקיד 'יצירת אסימונים בחשבון שירות'.

מידע נוסף על התחזות לחשבון שירות זמין במאמר מידע על התחזות לחשבון שירות.

מתן הרשאה לחשבון משתמש להריץ פעולות כחשבון שירות שמנוהל על ידי משתמש

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

כדי לתת את ההרשאות הנדרשות, צריך להקצות לחשבון המשתמש את התפקיד 'משתמש בחשבון שירות' (roles/iam.serviceAccountUser) בפרויקט Cloud de Confiance שבו מאוחסן חשבון השירות בניהול המשתמש, CUSTOM_SA_PROJECT_ID.

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

  • PRINCIPAL: מזהה של חשבון המשתמש שרוצים להקצות לו את התפקיד. בדרך כלל, מזהי החשבונות הראשיים מופיעים בפורמט הבא: PRINCIPAL-TYPE:ID. לדוגמה, principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com. רשימה מלאה של הפורמטים האפשריים של PRINCIPAL מופיעה במאמר מזהים של חשבונות משתמשים.

מריצים את הפקודה gcloud iam service-accounts add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/iam.serviceAccountUser'

אם אתם משתמשים בתפקידים בהתאמה אישית, לחשבון המשתמש צריכה להיות ההרשאה iam.serviceAccounts.actAs.

מידע נוסף על התפקיד Service Account User זמין במאמר התפקיד Service Account User.

יצירת sink ביומן שמשתמש בחשבון שירות שמנוהל על ידי משתמש

כדי ליצור מאגר עם חשבון שירות שמנוהל על ידי משתמש, מריצים את הפקודה gcloud logging sinks create וכוללים את האפשרות --custom-writer-identity.

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

  • SINK_NAME: השם של ה-sink ביומן.

מריצים את הפקודה gcloud logging sinks create:

gcloud logging sinks create SINK_NAME \
logging.googleapis.com/projects/LOG_BUCKET_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
--custom-writer-identity=serviceAccount:CUSTOM_SA \
--project=SINK_PROJECT_ID

אימות של ניתוב רשומות ביומן אל יעד

בקטע הזה משתמשים ב-CLI של gcloud כדי לכתוב ולעיין ברשומה ביומן, כדי לוודא שהיעד מעביר את הרשומות ביומן בצורה תקינה.

כדי לוודא שיעד הטביעה מכוון את רשומות היומן בצורה נכונה, מבצעים את הפעולות הבאות:

  1. מריצים את הפקודה gcloud logging write:

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

    • LOG_NAME: השם של היומן. לדוגמה, אפשר להגדיר את השדה הזה לערך mylog.

    מריצים את הפקודה gcloud logging write:

    gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
    

    הפקודה הקודמת מחזירה את ההודעה הבאה: Created log entry.

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

    gcloud logging read 'textPayload="Test log entry"' \
    --bucket=BUCKET_NAME --location=LOCATION \
    --view=_AllLogs --project=SINK_PROJECT_ID
    

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