אימות הנפקת הזהות והשימוש בה

בדף הזה מוסבר איך להשתמש ביומנים כדי לבדוק את ההנפקה והשימוש בזהויות של Kubernetes, בצורה של אישורים ואסימונים של חשבונות שירות, על ידי רמת הבקרה של אשכול Google Kubernetes Engine‏ (GKE). האימות הזה הוא אופציונלי לחלוטין ולא נדרש כדי לאבטח את מישור הבקרה.

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

כדאי להכיר את המושגים הבאים:

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

כברירת מחדל, Google Cloud מחיל אמצעי אבטחה שונים על מישור הבקרה המנוהל. בדף הזה מתוארות יכולות אופציונליות שמאפשרות לכם לקבל יותר שקיפות או שליטה במישור הבקרה של GKE.

מידע על יומני הנפקת זהויות

יומני הנפקת הזהויות ב-GKE הם יומני ביקורת של מישור הבקרה שמתעדים מתי מישור הבקרה מנפיק פרטי כניסה ומתי נעשה שימוש בפרטי הכניסה האלה באשכול. אפשר להשתמש ביומנים האלה כדי לעקוב אחרי משך החיים של פרטי כניסה, כולל הנפקה ושימוש, על ידי שילוב של יומני הנפקת הזהויות עם יומנים של Cloud KMS, של Certificate Authority Service ושל Kubernetes API. יומני הנפקת הזהויות של GKE מופעלים כשמשתמשים בשליטה במישור הבקרה של GKE. ביומנים האלה מתועדים הנפקת פרטי הכניסה מהסוגים הבאים והשימוש בהם:

  • אישורי X.509
  • אסימוני JWT (‏JSON Web Tokens) של אשכול

אישורי X.509

‫Kubernetes משתמש באישור X.509 לאימות אישור לקוח. כדי להנפיק אישורים, מישור הבקרה של Kubernetes שולח CertificateSigningRequest שאושרה לרשות אישורים (CA) בשירות CA. לאחר מכן, הרשות שמנפיקה את האישורים (CA) מנפיקה אישור באמצעות המפתח המתאים ב-Cloud KMS כדי לחתום על תקציר האישור.

יומני השרת של Kubernetes API מכילים פרטים על חתימת האישור של כל קריאה ל-API של Kubernetes שאומתה באמצעות אישור. הרשומה של מזהה פרטי הכניסה ביומן נראית כך:

"authentication.k8s.io/credential-id": "X509SHA256=CERTIFICATE_HASH"

הערך CERTIFICATE_HASH הוא גיבוב SHA256 של האישור, שאפשר להשתמש בו כדי לעקוב אחרי מחזור החיים של האישור.

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

  • יומני הנפקת זהויות ב-GKE: אפשר להשתמש בשאילתת protoPayload.metadata.credentialId כדי למצוא יומני הנפקת זהויות ספציפיים ב-GKE על סמך מזהה פרטי הכניסה מיומני שרת ה-API של Kubernetes. לאחר מכן משתמשים בשדה protoPayload.metadata.certificateFingerprint מיומן הנפקת הזהויות של GKE כדי ליצור קורלציה בין יומני הנפקת הזהויות לבין היומנים של CA Service.
  • יומנים של שירות CA: מחפשים את רשומת היומן של הנפקת האישור, שמכילה את המזהים הבאים:
    • cert_fingerprint.sha256_hash: גיבוב SHA256 של האישור החתום. אפשר להשתמש במזהה הזה כדי להתאים יומנים לאירועים ב-GKE וב-Kubernetes API.
    • tbs_certificate_digest: גיבוב של תוכן האישור שנשלח לחתימה באמצעות מפתח Cloud KMS. אפשר להשתמש במזהה הזה כדי להתאים יומנים ליומנים של Cloud KMS.
  • יומני חתימה של Cloud KMS: משתמשים בערך tbs_certificate_digest מיומן CA Service כדי לוודא שהמפתח הצפוי של Cloud KMS חתם על האישור.

אסימוני JWT (‏JSON Web Tokens)

אסימוני JWT‏ (JSON Web Tokens) חתומים משמשים כאסימוני גישה לישויות באשכול, כמו חשבונות שירות של Kubernetes, כשמאמתים בקשות ל-Kubernetes API. כשיוצרים Pod שמשתמש בחשבון שירות ספציפי, מערכת Kubernetes יוצרת JWT ומעלה אותו ב-Pod. כשמשתמשים בסמכות של מישור הבקרה של GKE כדי להריץ מפתחות ורשויות אישורים משלכם, ה-JWT הזה נחתם ומאוחר יותר מאומת באמצעות מפתח החתימה של חשבון השירות ב-Cloud KMS.

יומני שרת ה-API של Kubernetes מכילים פרטים על חתימת האסימון לכל קריאה ל-API של Kubernetes שאומתה באמצעות JWT. הרשומה של חתימת האסימון ביומן נראית כך:

"authentication.kubernetes.io/credential-id":"JTI=JWT_ID"

הערך JWT_ID הוא מחרוזת שמזהה את ה-JWT שנעשה בו שימוש בקריאה ל-Kubernetes API.

אפשר להשתמש במזהה ה-JWT מיומני שרת ה-API של Kubernetes כדי לעקוב אחרי מחזור החיים של JWT על ידי שילוב בין היומנים הבאים:

  • יומנים של הנפקת זהויות ב-GKE: אפשר להשתמש במזהה ה-JWT מיומני שרת ה-API של Kubernetes כדי למצוא רשומות ספציפיות של הנפקת JWT. כל רשומה מכילה גם את השדה toBeSignedDigest, שהערך שלו יכול להיות זהה לערך ביומני Cloud KMS.
  • יומני חתימה של Cloud KMS: משתמשים בערך של השדה toBeSignedDigest מיומני הנפקת הזהויות של GKE כדי לוודא שמפתח Cloud KMS הצפוי חתם על ה-JWT.

תמחור

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

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

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

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

  2. מפעילים את ממשקי ה-API הבאים של שירות יומני הביקורת של Cloud:

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

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

  • ביצוע כל הפעולות ב-Logging: Logging Admin (roles/logging.admin).
  • כדי לראות את היומנים: Private Logs Viewer (roles/logging.privateLogViewer).

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

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

דרישות ומגבלות

הדרישות והמגבלות הבאות חלות:

אימות אישורים

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

יומני אישורים

יומן של Kubernetes API לשימוש באישור

הפרטים של חתימת האישור נרשמים ביומן בכל פעם שהאישור משמש מול Kubernetes API.

יומן GKE לפעולות הנפקת אישורים

כל הפעולות שקשורות להנפקת אישורים מתועדות ביומן הביקורת System Event. היומנים האלה מופעלים כברירת מחדל בכל אשכול שמשתמש במפתחות או ב-CA מנוהלים על ידי המשתמש של שליטה במישור הבקרה של GKE.

יומן ביקורת של שירות CA

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

יומן ביקורת של Cloud KMS

רשומה נרשמת ביומן בכל פעם שמתבצעת חתימה על תקציר, בתגובה לבקשת חתימה מ-CA Service.

אימות השימוש באישור באמצעות יומני API של Kubernetes

כדי למצוא רשומות ביומן של קריאות ל-API שאומתו באמצעות אישורים: פועלים לפי השלבים הבאים:

  1. נכנסים לדף Logs Explorer במסוף Google Cloud :

    כניסה אל Logs Explorer

  2. מדביקים את הביטוי הבא בשדה של עורך השאילתות:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"X509SHA256="
    
  3. לוחצים על Run query.

    השאילתה הזו מחזירה את כל היומנים של שרת ה-API של Kubernetes שיש להם אישור X.509 משויך. כדי לחקור רשומות ספציפיות ביומן, אפשר להשתמש בכלי האבטחה או לבדוק את היומנים באופן ידני.

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

"authentication.k8s.io/credential-id":"CREDENTIAL_ID"

הערך CREDENTIAL_ID הוא המזהה שבו אפשר להשתמש כדי ליצור קורלציה בין יומנים מ-GKE, מ-CA Service ומ-Cloud KMS. הערך CREDENTIAL_ID הוא בפורמט "X509SHA256=CERTIFICATE_HASH".

אימות הנפקת אישורים באמצעות יומני GKE

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud :

    כניסה לדף Logs Explorer

  2. מדביקים את הביטוי הבא בשדה של עורך השאילתות:

    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
    resource.type="gke_cluster"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.metadata.credentialId="CREDENTIAL_ID"
    

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

  3. לוחצים על Run query.

אימות הנפקת אישורים באמצעות יומנים של שירות CA

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud :

    כניסה לדף Logs Explorer

  2. מדביקים את הביטוי הבא בשדה של עורך השאילתות:

    resource.type="audited_resource"
    protoPayload.serviceName="privateca.googleapis.com"
    protoPayload.methodName="google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate"
    protoPayload.response.certificate_description.cert_fingerprint.sha256_hash="CERTIFICATE_HASH"
    

    מחליפים את CERTIFICATE_HASH ב-CERTIFICATE_HASH מהקטע אימות השימוש באישור באמצעות יומני API של Kubernetes. חשוב לוודא שמשמיטים את הקידומת X509SHA256= מהגיבוב.

  3. לוחצים על Run query.

    השאילתה הזו מחזירה יומן שמכיל את השדה tbs_certificate_digest: DIGEST_VALUE בקטע התגובה של תיאור האישור.

אפשר להשתמש ב-DIGEST_VALUE כדי למצוא ביומני החתימה של Cloud KMS את האישור המתאים.

אימות הנפקת אישור באמצעות יומני חתימה של Cloud KMS

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud :

    כניסה לדף Logs Explorer

  2. מדביקים את הביטוי הבא בשדה של עורך השאילתות:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    מחליפים את DIGEST_VALUE בערך הגיבוב מהקטע אימות הנפקת האישור באמצעות יומני CA Service.

  3. לוחצים על Run query.

    השאילתה הזו מחזירה את היומנים של אירועים שקשורים להנפקת אישורים. ביומנים של Cloud KMS אין הבחנה בין אישורים לבין אסימוני JWT, ולכן רשומות היומן של שניהם זהות.

אימות טוקנים

אתם יכולים להשתמש ביומני הנפקת זהויות של שליטה במישור הבקרה של GKE וביומני חתימה של Cloud KMS כדי לוודא שאסימון JWT (‏JSON Web Token) הונפק בהצלחה.

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

יומני JWT

יומן של Kubernetes API לשימוש ב-JWT

פרטי החתימה של ה-JWT נרשמים ביומן בכל פעם שנעשה שימוש ב-JWT מול Kubernetes API.

יומן GKE לפעולות הנפקת JWT

כל הפעולות של הנפקת אסימונים מתועדות כיומן ביקורת System Event. היומנים האלה מופעלים כברירת מחדל בכל אשכול שמשתמש במפתחות או ב-CA שמנוהלים על ידי המשתמשים בסמכות של מישור הבקרה של GKE.

יומן ביקורת של Cloud KMS

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

אימות השימוש באסימון באמצעות יומנים של שרת Kubernetes API

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud :

    כניסה לדף Logs Explorer

  2. מדביקים את הביטוי הבא בשדה של עורך השאילתות:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"JTI="
    
  3. לוחצים על Run query.

    השאילתה הזו מחזירה את כל היומנים של שרת Kubernetes API שיש להם JWT משויך. כדי לחקור רשומות ספציפיות ביומן, אפשר להשתמש בכלי אבטחה או לבדוק את היומנים באופן ידני.

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

"authentication.k8s.io/credential-id": "JTI=JWT_ID"

JWT_ID הוא מזהה האסימון שבו אפשר להשתמש כדי ליצור קורלציה בין יומנים מ-GKE ומ-Cloud KMS.

אימות הנפקת האסימון באמצעות יומני GKE

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud :

    כניסה לדף Logs Explorer

  2. מדביקים את הביטוי הבא בשדה של עורך השאילתות:

    resource.type="gke_cluster"
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
    protoPayload.methodName="google.cloud.gkeauth.v1.Auth.SignServiceAccountJWT"
    protoPayload.metadata.credentialId="JTI=JWT_ID"
    

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

  3. לוחצים על Run query.

    השאילתה הזו מחזירה יומנים שמכילים את השדה toBeSignedDigest.

אפשר להשתמש בערך toBeSignedDigest כדי למצוא אירועי חתימה של Cloud KMS.

אימות הנפקת אסימונים באמצעות יומני חתימה של Cloud KMS

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud :

    כניסה אל Logs Explorer

  2. מדביקים את הביטוי הבא בשדה של עורך השאילתות:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    מחליפים את DIGEST_VALUE בערך שבשדה toBeSignedDigest, מהקטע אימות הנפקת אסימון באמצעות יומני GKE.

  3. לוחצים על Run query.

    השאילתה הזו מחזירה את היומנים של אירועים שקשורים להנפקת אישורים. ביומנים של Cloud KMS אין הבחנה בין אישורים לבין אסימוני JWT, ולכן רשומות היומן של שניהם זהות.

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