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

בדף הזה מוסבר איך לנהל תובנות לגבי חשבונות שירות. התובנות האלה הן ממצאים לגבי חשבונות שירות בפרויקט שלא אומתו ב-90 הימים האחרונים. מומלץ להשבית או למחוק את חשבונות השירות והמפתחות האלה שלא נמצאים בשימוש, כי הם יוצרים סיכון אבטחה מיותר.

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

פעילויות אימות עם Google API מחוץ ל- Google Cloud, כמו הענקת הרשאות גישה ברמת הדומיין של הרשאה ל-Google Workspace APIs, לא מתועדות בכלי לניתוח פעילות או בתובנות לגבי חשבונות שירות. כדי לעקוב אחרי פעילויות האימות האלה, משתמשים במדדי השימוש בחשבונות שירות של Cloud Monitoring.

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

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

  • מפעילים את Recommender API.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    להפעלת ה-API

  • אופציונלי: אפשר לקרוא על תובנות בשירות ההמלצות.

התפקידים הנדרשים

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

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

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

ההרשאות הנדרשות

כדי לנהל את התובנות לגבי חשבון השירות, נדרשות ההרשאות הבאות:

  • כדי לראות תובנות לגבי חשבון שירות:
    • recommender.iamServiceAccountinsights.get
    • recommender.iamServiceAccountinsights.list
  • כדי לשנות את התובנות לגבי חשבון השירות: recommender.iamServiceAccountinsights.update

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

הצגת תובנות לגבי חשבונות שירות

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

gcloud

משתמשים בפקודה gcloud recommender insights list כדי לראות את כל התובנות לגבי חשבונות השירות בפרויקט.

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

  • PROJECT_ID: המזהה של הפרויקט שרוצים לראות את התובנות לגביו.
gcloud recommender insights list --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

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

INSIGHT_ID                            CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME     SEVERITY  INSIGHT_SUBTYPE        DESCRIPTION
446303ba-2a14-49cc-b9fa-e2d2499d4f82  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-1@my-project.iam.gserviceaccount.com was inactive.
4cfd82c3-7320-4dc6-9b67-ca0756bbd54c  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-2@my-project.iam.gserviceaccount.com was inactive.
a627bed7-c8f4-4611-89c9-2a9a8618ca1b  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-3@my-project.iam.gserviceaccount.com was inactive.
a922dd59-df0a-422d-a2a4-096195e1dae5  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-4@my-project.iam.gserviceaccount.com was inactive.

REST

השיטה insights.list ב-Recommender API מציגה את כל התובנות לגבי חשבונות השירות בפרויקט.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: המזהה של הפרויקט שרוצים לראות את התובנות לגביו.

ה-method של ה-HTTP וכתובת ה-URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

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

{
  "insights": [
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
      "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "103185812403937829397",
        "email": "sa-1@my-project.iam.gserviceaccount.com",
        "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
      },
      "lastRefreshTime": "2022-05-24T07:00:00Z",
      "observationPeriod": "19008000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"9d797dd04263c855\"",
      "severity": "LOW"
    },
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/4cfd82c3-7320-4dc6-9b67-ca0756bbd54c",
      "description": "Service account sa-2@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "105496400997178042131",
        "email": "sa-2@my-project.iam.gserviceaccount.com"
      },
      "lastRefreshTime": "2022-05-24T07:00:00Z",
      "observationPeriod": "16070400s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"783a32b635d79a4e\"",
      "severity": "LOW"
    }
  ]
}

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

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

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

gcloud

משתמשים בפקודה gcloud recommender insights describe עם מזהה התובנה כדי לראות מידע על תובנה ספציפית.

  • INSIGHT_ID: המזהה של התובנה שרוצים להציג. כדי למצוא את המזהה, מציגים את רשימת התובנות של הפרויקט.
  • PROJECT_ID: המזהה של הפרויקט שרוצים לנהל את התובנות לגביו.
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

הפלט מציג את התובנה בפירוט. לדוגמה, התובנה הבאה מציינת שחשבון השירות sa-1@my-project.iam.gserviceaccount.com לא אומת מאז 11 באוקטובר 2020.

category: SECURITY
content:
  email: sa-1@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account sa-1@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"9d797dd04263c855"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2022-05-24T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
severity: LOW
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

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

REST

ה-method insights.get של Recommender API מחזירה תובנה אחת.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: המזהה של הפרויקט שרוצים לנהל את התובנות לגביו.
  • INSIGHT_ID: המזהה של התובנה שרוצים להציג. אם אתם לא יודעים מהו מזהה התובנה, תוכלו לראות את רשימת התובנות בפרויקט שלכם. המזהה של תובנה הוא כל מה שמופיע אחרי insights/ בשדה name של התובנה.

ה-method של ה-HTTP וכתובת ה-URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

התשובה מכילה את התובנה. לדוגמה, התובנה הבאה מציינת שחשבון השירות sa-1@my-project.iam.gserviceaccount.com לא אומת מאז 11 באוקטובר 2020.

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "sa-1@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
  },
  "lastRefreshTime": "2022-05-24T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"9d797dd04263c855\"",
  "severity": "LOW"
}

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

בדיקת תובנות לגבי חשבון שירות

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

התוכן של תובנה נקבע לפי סוגי המשנה שלה. תובנות לגבי חשבון שירות (google.iam.serviceAccount.Insight) הן תובנות עם סוג המשנה SERVICE_ACCOUNT_USAGE.

תובנות SERVICE_ACCOUNT_USAGE כוללות את הרכיבים הבאים, לא בהכרח בסדר הזה:

  • associatedRecommendations: המזהים של כל ההמלצות שמשויכות לתובנה. אם אין המלצות שמשויכות לתובנה, השדה הזה ריק.
  • category: הקטגוריה של תובנות IAM היא תמיד SECURITY.
  • content: מדווח על הפעם האחרונה שבה בוצעה אימות של חשבון השירות. השדה הזה מכיל את הרכיבים הבאים:

    • email: כתובת האימייל של חשבון השירות.
    • lastAuthenticatedTime: הפעם האחרונה שבה בוצעה אימות של חשבון השירות. אם לא נרשמו אימותים בחשבון השירות, השדה הזה לא ייכלל.
    • serviceAccountId: המזהה המספרי הייחודי של חשבון השירות.
  • description: סיכום קריא של התובנה.
  • etag: מזהה ייחודי של המצב הנוכחי של התובנה. בכל פעם שהתובנה משתנה, מוקצה לה ערך etag חדש.

    כדי לשנות את המצב של תובנה, צריך לציין את etag של התובנה הקיימת. השימוש ב-etag עוזר לוודא שפעולות יתבצעו רק אם התובנה לא השתנתה מאז הפעם האחרונה שבה אחזרתם אותה.

  • insightSubtype: תת-הסוג של התובנה.
  • lastRefreshTime: התאריך שבו התובנה עודכנה לאחרונה, שמציין את עדכניות הנתונים ששימשו ליצירת התובנה.
  • name: השם של התובנה, בפורמט הבא:

    projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

    מחליפים את ה-placeholders בערכים הבאים:

    • PROJECT_ID: המזהה של הפרויקט שבו נוצר התובנה.
    • INSIGHT_ID: מזהה ייחודי של התובנה.
  • observationPeriod: תקופת הזמן שקדמה לתובנה. הנתונים מהמקור ששימשו ליצירת התובנה מסתיימים בתאריך lastRefreshTime ומתחילים בתאריך lastRefreshTime פחות observationPeriod.
  • stateInfo: אחרי שהתובנות מוצעות, הן עוברות כמה שינויי סטטוס:

    • ACTIVE: התובנה נוצרה, אבל לא בוצעה פעולה או שבוצעה פעולה בלי לעדכן את מצב התובנה. תובנות פעילות מתעדכנות כשיש שינויים בנתוני הבסיס.
    • ACCEPTED: ננקטה פעולה מסוימת על סמך התובנה. התובנות מתקבלות כשסימנתם המלצה משויכת כCLAIMED,‏ SUCCEEDED או FAILED, או כשאישרתם את התובנה ישירות. כשמצב התובנה הוא ACCEPTED, אי אפשר לשנות את התוכן שלה. תובנות שאושרו נשמרות למשך 90 יום אחרי האישור.
  • targetResources: שם המשאב המלא של הפרויקט שאליו מתייחס התובנה. לדוגמה, //cloudresourcemanager.googleapis.com/projects/123456789012.

סימון תובנה לגבי חשבון שירות כACCEPTED

אם אתם מבצעים פעולה על סמך תובנה פעילה, אתם יכולים לסמן את התובנה הזו כACCEPTED. הסטטוס ACCEPTED מציין ל-Recommender API שפעלתם על סמך התובנה הזו, וכך הוא יכול לשפר את ההמלצות.

תובנות שאושרו נשמרות למשך 90 ימים אחרי שמסמנים אותן כACCEPTED.

gcloud

משתמשים בפקודה gcloud recommender insights mark-accepted עם מזהה התובנה כדי לסמן תובנה כACCEPTED.

  • INSIGHT_ID: המזהה של התובנה שרוצים להציג. כדי למצוא את המזהה, מציגים את רשימת התובנות של הפרויקט.
  • PROJECT_ID: המזהה של הפרויקט שרוצים לנהל את התובנות לגביו.
  • ETAG: מזהה של גרסת התובנה. כדי לקבל את etag, מבצעים את הפעולות הבאות:

    1. מקבלים את התובנה באמצעות הפקודה gcloud recommender insights describe.
    2. מוצאים ומעתיקים את הערך etag מהפלט, כולל המירכאות שמקיפות אותו. לדוגמה, "d3cdec23cc712bd0".
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global \
    --etag=ETAG

הפלט מציג את התובנה, ועכשיו הסטטוס הוא ACCEPTED:

category: SECURITY
content:
  email: sa-1@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account sa-1@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"39c4199dcec92848"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2022-05-24T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
severity: LOW
stateInfo:
  state: ACCEPTED
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

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

REST

ה-method insights.markAccepted של Recommender API מסמנת תובנה כ-ACCEPTED.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: המזהה של הפרויקט שרוצים לנהל את התובנות לגביו.
  • INSIGHT_ID: המזהה של התובנה שרוצים להציג. אם אתם לא יודעים מהו מזהה התובנה, תוכלו לראות את רשימת התובנות בפרויקט שלכם. המזהה של תובנה הוא כל מה שמופיע אחרי insights/ בשדה name של התובנה.
  • ETAG: מזהה של גרסת התובנה. כדי לקבל את etag, מבצעים את הפעולות הבאות:
    1. קבלת התובנה באמצעות השיטה insights.get.
    2. מאתרים את הערך etag בתשובה ומעתיקים אותו.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID:markAccepted

תוכן בקשת JSON:

{
  "etag": "ETAG"
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

התשובה מכילה את התובנה, ועכשיו הסטטוס שלה הוא ACCEPTED:

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "sa-1@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-10-11T07:00:00Z"
  },
  "lastRefreshTime": "2022-05-24T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACCEPTED"
    },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"39c4199dcec92848\"",
  "severity": "LOW"
}

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

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

  • כדאי לעיין בכלים האחרים שזמינים כדי להבין את השימוש בחשבון שירות.
  • תוכלו להשתמש ב-Active Assist כדי לראות ולנהל את כל ההמלצות לפרויקט, כולל המלצות ל-IAM.