בדף הזה מוסבר איך לבצע רוטציה של מפתחות ההצפנה של דיסק האתחול של etcd ושל מישור הבקרה שהגדרתם עבור הרשאות מישור הבקרה של GKE. המסמך הזה מיועד לאדמינים של אשכולות ולמהנדסי אבטחה.
לפני שקוראים את המסמך הזה, כדאי להכיר את המושגים הבאים שקשורים לשליטה במישור הבקרה של GKE:
תכנון רוטציית מפתחות
במאמר הזה מוסבר איך להחליף את הרכיבים הבאים של פרטי הכניסה במישור הבקרה:
- מפתח ההצפנה של etcd ושל דיסקי האתחול של מישור הבקרה.
- מפתח ההצפנה לגיבוי הפנימי של etcd שמשמש לתוכנית התאוששות מאסון (DR). Google Cloud
אפשר גם לבצע רוטציה של רשויות האישורים (CA) בניהול הלקוח ושל מפתחות החתימה של חשבון השירות שהגדרתם באמצעות הרשאה של מישור הבקרה של GKE. מידע נוסף מופיע במאמר בנושא רוטציה של רשויות אישורים (CA) ומפתחות חתימה במישור הבקרה בניהול הלקוח.
תוקף המפתחות ב-Cloud Key Management Service (Cloud KMS) לא פג. אם בארגון שלכם יש דרישת אבטחה לסיבוב חתימות, צריך לסובב את המפתחות באופן ידני. כדי למזער את השיבושים בעומסי העבודה הפעילים, לא מומלץ להגדיר רוטציה אוטומטית של מפתחות עבור המפתחות האלה.
כשמבצעים רוטציה למפתחות ההצפנה של דיסקי האתחול של מישור הבקרה ושל etcd, GKE יוצר דיסק חדש שמוצפן באמצעות המפתח החדש. במקרה של אשכולות אזוריים, הפעולה הזו לא גורמת להשבתה כי מישור הבקרה משוכפל. במקרה של אשכולות אזוריים, מישור הבקרה לא יהיה זמין עד שהדיסק החדש יהיה זמין.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
יש לכם אשכול קיים שמשתמש בדיסק אתחול של רמת הבקרה והצפנת etcd ומריץ את GKE בגרסה 1.35.2-gke.1842000 ואילך.
מזהים את מזהי הפרויקטים הבאים Google Cloud :
- פרויקט המפתח: הפרויקט שמכיל את משאבי Cloud KMS.
- Cluster project: הפרויקט שמכיל את אשכול GKE.
כדי לבצע את משימות האימות שמתוארות במסמך הזה, צריך לוודא שיומן הביקורת
DATA_READData Access מופעל עבור Cloud Key Management Service (KMS) API. מידע נוסף זמין במאמר הפעלת יומני הביקורת Data Access.
תפקידים והרשאות נדרשים
כדי לקבל את ההרשאות שדרושות לרוטציה של רשויות אישורים ומפתחות שמנוהלים על ידי הלקוח, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
ניהול מפתחות או גרסאות מפתח: Cloud KMS Admin (
roles/cloudkms.admin) בפרויקט המפתח -
הגדרת אשכולות לשימוש במפתחות חדשים:
אדמין אשכולות של Kubernetes Engine (
roles/container.clusterAdmin) בפרויקט של האשכול
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
מגבלות
אפשר לעדכן את האשכולות לגרסאות חדשות של מפתחות קיימים, אבל אי אפשר לעדכן את האשכולות כך שישתמשו במפתחות חדשים לגמרי לפעולות ההצפנה האלה.
איך נותנים תפקידים ב-IAM לסוכן השירות של GKE
כדי להחליף את מפתחות ההצפנה של דיסקים לאתחול ושל etcd, צריך להעניק את התפקיד Kubernetes Engine KMS Crypto Key User (roles/container.cloudKmsKeyUser) למפתחות ההצפנה בפרויקט המפתחות לסוכן השירות של GKE בפרויקט האשכול:
gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
--keyring=KEYRING_NAME \
--location=LOCATION \
--member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
--role=roles/container.cloudKmsKeyUser \
--project=KEY_PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
-
KCP_DISK_KEY_NAME: השם של מפתח ההצפנה של דיסקי האתחול של מישור הבקרה ודיסקי ה-etcd. -
KEYRING_NAME: השם של אוסף המפתחות שמכיל את המפתח. -
LOCATION: Google Cloud המיקום של אוסף המפתחות. המיקום הזה צריך להיות זהה למיקום של האשכול. כדי לראות רשימה של אזורים, מסננים לפי 'אזור' בטבלת המיקומים של Cloud KMS. -
CLUSTER_PROJECT_NUMBER: מספר הפרויקט של האשכול. -
KEY_PROJECT_ID: מזהה הפרויקט של פרויקט המפתח.
רוטציה של המפתח לדיסקים של אתחול etcd ומישור הבקרה
יוצרים גרסה חדשה של המפתח הראשי לדיסק האתחול ולמפתח ההצפנה של etcd:
gcloud kms keys versions create \ --key=KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --primaryיכול להיות שיחלפו עד 10 דקות עד שהשינויים יופצו בפרויקט.
מציאת גרסת הטלאי הנוכחית של מישור הבקרה של האשכול:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format='value(currentMasterVersion)'מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של אשכול GKE. -
LOCATION: המיקום של מישור הבקרה של אשכול GKE, למשלus-central1.
-
משדרגים את רמת הבקרה של האשכול לאותה גרסה שכבר נמצאת בשימוש.
gcloud container clusters upgrade CLUSTER_NAME \ --master \ --location=LOCATION \ --cluster-version=CONTROL_PLANE_VERSION \ --project=CLUSTER_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
CONTROL_PLANE_VERSION: הגרסה של מישור הבקרה של האשכול מתוך הפלט של השלב הקודם. -
CLUSTER_PROJECT_ID: מזהה הפרויקט של פרויקט האשכול.
-
אחרי שפעולת השדרוג של רמת הבקרה מסתיימת, האשכול משתמש בגרסת המפתח החדשה כדי להצפין את דיסקי האתחול של רמת הבקרה ואת כל דיסקי ה-etcd.
רוטציה של מפתח ההצפנה הפנימי של הגיבוי ב-etcd
בקטע הזה נסביר איך לבצע רוטציה של מפתח ההצפנה לגיבוי הפנימי של etcd, Google Cloud שמשמש למטרות התאוששות מאסון. אפשר להגדיר רוטציה אוטומטית למפתח הזה, אבל מומלץ לבצע רוטציה ידנית במקום זאת. אחרי שמבצעים רוטציה למפתח, האשכול משתמש בגרסה החדשה של המפתח כדי להצפין גיבויים פנימיים חדשים של etcd.
גיבויים פנימיים של etcd משתמשים בגרסה של המפתח הראשי ומתרחשים במרווחי הזמן הבאים:
- כל 30 דקות לאשכולות אזוריים.
- כל 10 דקות לאשכולות במצב Autopilot ולאשכולות סטנדרטיים אזוריים.
אחרי שמבצעים רוטציה של המפתח, לא משביתים או משמידים מיד את הגרסה הקודמת של המפתח. מחכים מספיק זמן עד ש-GKE יוצר גיבויים פנימיים חדשים של etcd שמשתמשים בגרסת המפתח החדשה.
יוצרים גרסה חדשה של המפתח הראשי למפתח ההצפנה של הגיבוי הפנימי של etcd:
gcloud kms keys versions create \ --key=ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --primaryמחליפים את מה שכתוב בשדות הבאים:
-
ETCD_BACKUP_KEY_NAME: השם של מפתח ההצפנה של הגיבוי הפנימי של etcd. -
KEYRING_NAME: השם של אוסף המפתחות שמכיל את המפתח. -
LOCATION: Google Cloud המיקום של אוסף המפתחות. המיקום הזה צריך להיות זהה למיקום של האשכול. כדי לראות רשימה של אזורים, מסננים לפי 'אזור' בטבלת המיקומים של Cloud KMS. -
KEY_PROJECT_ID: מזהה הפרויקט של פרויקט המפתח.
-