בדף הזה מוסבר איך להשתמש ביומנים כדי לבדוק את ההנפקה והשימוש בזהויות של 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, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
הגדרה של מישור הבקרה של אשכול GKE עם רשויות אישורים או מפתחות בניהול עצמי.
מפעילים את ממשקי ה-API הבאים של שירות יומני הביקורת של Cloud:
- ב-Cloud KMS, מפעילים יומני ביקורת של Data Access מהסוג Data Read.
- בשביל CA Service, מפעילים יומני ביקורת של גישה לנתונים מסוגים Admin Read ו-Data Write.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לגישה ליומני הנפקת זהויות, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
-
ביצוע כל הפעולות ב-Logging:
Logging Admin (
roles/logging.admin). -
כדי לראות את היומנים:
Private Logs Viewer (
roles/logging.privateLogViewer).
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
דרישות ומגבלות
הדרישות והמגבלות הבאות חלות:
- צריך להשתמש ב-GKE מגרסה 1.31.1-gke.1846000 ואילך.
- יומנים של הנפקת זהויות נרשמים כיומנים של Cloud Audit Logs, ומוגדר להם תקופת שמירה של 400 ימים. אי אפשר להגדיר את תקופת השמירה, אבל אפשר להעביר את יומני הביקורת של אירועי המערכת ליעדים אחרים כדי להאריך את תקופת השמירה.
אימות אישורים
אתם יכולים להשתמש ביומני הנפקת הזהויות של שליטה במישור הבקרה של GKE כדי לוודא שהונפק אישור או שהיה בו שימוש. אפשר להשתמש בכל אחד מהיומנים הבאים, או בשילוב של יומנים, כדי לאשר מידע על הנפקת אישורים ושימוש בהם:
יומני אישורים |
|
|---|---|
יומן של Kubernetes API לשימוש באישור |
הפרטים של חתימת האישור נרשמים ביומן בכל פעם שהאישור משמש מול Kubernetes API. |
יומן GKE לפעולות הנפקת אישורים |
כל הפעולות שקשורות להנפקת אישורים מתועדות ביומן הביקורת System Event. היומנים האלה מופעלים כברירת מחדל בכל אשכול שמשתמש במפתחות או ב-CA מנוהלים על ידי המשתמש של שליטה במישור הבקרה של GKE. |
יומן ביקורת של שירות CA |
מתעד רשומה בכל פעם שמונפק אישור. |
יומן ביקורת של Cloud KMS |
רשומה נרשמת ביומן בכל פעם שמתבצעת חתימה על תקציר, בתגובה לבקשת חתימה מ-CA Service. |
אימות השימוש באישור באמצעות יומני API של Kubernetes
כדי למצוא רשומות ביומן של קריאות ל-API שאומתו באמצעות אישורים: פועלים לפי השלבים הבאים:
נכנסים לדף Logs Explorer במסוף Google Cloud :
מדביקים את הביטוי הבא בשדה של עורך השאילתות:
log_id("cloudaudit.googleapis.com/activity") resource.type="k8s_cluster" labels."authentication.kubernetes.io/credential-id":"X509SHA256="לוחצים על 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 לגבי אירועים של הנפקת אישורים, פועלים לפי השלבים הבאים:
נכנסים לדף Logs Explorer במסוף Google Cloud :
מדביקים את הביטוי הבא בשדה של עורך השאילתות:
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event" resource.type="gke_cluster" protoPayload.serviceName="container.googleapis.com" protoPayload.metadata.credentialId="CREDENTIAL_ID"מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט.-
CREDENTIAL_ID: ה-CREDENTIAL_IDמהקטע אימות השימוש באישור באמצעות יומני API של Kubernetes.
לוחצים על Run query.
אימות הנפקת אישורים באמצעות יומנים של שירות CA
כדי למצוא יומנים של שירות CA שתואמים לאירועים של הנפקת אישורים ב-GKE, פועלים לפי השלבים הבאים:
נכנסים לדף Logs Explorer במסוף Google Cloud :
מדביקים את הביטוי הבא בשדה של עורך השאילתות:
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=מהגיבוב.לוחצים על Run query.
השאילתה הזו מחזירה יומן שמכיל את השדה
tbs_certificate_digest: DIGEST_VALUEבקטע התגובה של תיאור האישור.
אפשר להשתמש ב-DIGEST_VALUE כדי למצוא ביומני החתימה של Cloud KMS את האישור המתאים.
אימות הנפקת אישור באמצעות יומני חתימה של Cloud KMS
כדי למצוא אירועי חתימה של Cloud KMS לאירועים של הנפקת אישורים של CA Service, פועלים לפי השלבים הבאים:
נכנסים לדף Logs Explorer במסוף Google Cloud :
מדביקים את הביטוי הבא בשדה של עורך השאילתות:
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.לוחצים על 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
כדי למצוא רשומות ביומן של אירועי שימוש באסימונים, פועלים לפי השלבים הבאים:
נכנסים לדף Logs Explorer במסוף Google Cloud :
מדביקים את הביטוי הבא בשדה של עורך השאילתות:
log_id("cloudaudit.googleapis.com/activity") resource.type="k8s_cluster" labels."authentication.kubernetes.io/credential-id":"JTI="לוחצים על Run query.
השאילתה הזו מחזירה את כל היומנים של שרת Kubernetes API שיש להם JWT משויך. כדי לחקור רשומות ספציפיות ביומן, אפשר להשתמש בכלי אבטחה או לבדוק את היומנים באופן ידני.
כדי ליצור קורלציה בין היומנים האלה לבין סוגים אחרים של יומנים, מחפשים את השדה הבא:
"authentication.k8s.io/credential-id": "JTI=JWT_ID"
JWT_ID הוא מזהה האסימון שבו אפשר להשתמש כדי ליצור קורלציה בין יומנים מ-GKE ומ-Cloud KMS.
אימות הנפקת האסימון באמצעות יומני GKE
כדי למצוא רשומות ביומן של אירועים שקשורים להנפקת טוקנים, פועלים לפי השלבים הבאים:
נכנסים לדף Logs Explorer במסוף Google Cloud :
מדביקים את הביטוי הבא בשדה של עורך השאילתות:
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"מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט.-
JWT_ID: מזהה ה-JWT מהקטע אימות השימוש בטוקן באמצעות יומני שרת ה-API של Kubernetes.
לוחצים על Run query.
השאילתה הזו מחזירה יומנים שמכילים את השדה
toBeSignedDigest.
אפשר להשתמש בערך toBeSignedDigest כדי למצוא אירועי חתימה של Cloud KMS.
אימות הנפקת אסימונים באמצעות יומני חתימה של Cloud KMS
כדי למצוא רשומות ביומן עבור תקצירים חתומים, פועלים לפי השלבים הבאים:
נכנסים לדף Logs Explorer במסוף Google Cloud :
מדביקים את הביטוי הבא בשדה של עורך השאילתות:
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.לוחצים על Run query.
השאילתה הזו מחזירה את היומנים של אירועים שקשורים להנפקת אישורים. ביומנים של Cloud KMS אין הבחנה בין אישורים לבין אסימוני JWT, ולכן רשומות היומן של שניהם זהות.
המאמרים הבאים
- מידע על אבטחת מישור הבקרה
- מידע נוסף על הרשאת אדמין לעובדי Google
- איך מגדירים רישום ביומן ומעקב ב-GKE
- איך מגדירים גישה ליומנים ברמת השדה
- מידע נוסף על מגבלות השימוש ביומנים