איך מבצעים רוטציה של מפתחות האבטחה של האשכול

רוטציית מפתחות

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

רוטציית מפתחות אוטומטית

‫AWS Key Management Service ‏ (KMS) תומך ברוטציה אוטומטית של מפתחות KMS. אם האפשרות הזו מופעלת, מערכת AWS יוצרת באופן אוטומטי חומר מפתח קריפטוגרפי חדש למפתח שלכם פעם בשנה. לא נדרשות פעולות ידניות.

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

כדי לראות אם מפתח KMS כולל רוטציה אוטומטית, מריצים את הפקודה הבאה:

aws kms get-key-rotation --key-id KMS_KEY_ID

מחליפים את KMS_KEY_ID במזהה המפתח שלכם ב-AWS KMS.

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

aws kms enable-key-rotation --key-id KMS_KEY_ID

רוטציית מפתחות ידנית

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

מפתח להגדרת מישור הבקרה

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

  1. איך יוצרים מפתח חדש ב-Cloud Key Management Service שומרים את הערך של ה-ARN של מפתח ה-KMS. תצטרכו אותו בהמשך.

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

  3. משתמשים בפקודה gcloud container aws clusters update כדי לעדכן את מפתח ההצפנה.

     gcloud container aws clusters update CLUSTER_NAME \
        --location=GOOGLE_CLOUD_LOCATION \
        --config-encryption-kms-key-arn=CONFIG_ENCRYPTION_KMS_KEY_ARN
    

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

    • CLUSTER_NAME: השם של האשכול
    • GOOGLE_CLOUD_LOCATION: האזור הנתמך Google Cloud שמנהל את האשכול. לדוגמה, us-west1
    • CONFIG_ENCRYPTION_KMS_KEY_ARN: שם ה-ARN של מפתח ה-KMS החדש

נפח הבסיס של מישור הבקרה

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

  1. איך יוצרים מפתח חדש ב-Cloud Key Management Service שומרים את הערך של ה-ARN של מפתח ה-KMS. תצטרכו אותו בהמשך.

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

  3. משתמשים בפקודה gcloud container aws clusters update כדי לעדכן את מפתח ההצפנה.

     gcloud container aws clusters update CLUSTER_NAME \
        --location=GOOGLE_CLOUD_LOCATION \
        --root-volume-kms-key-arn=ROOT_VOLUME_KMS_KEY_ARN
    

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

    • CLUSTER_NAME: השם של האשכול
    • GOOGLE_CLOUD_LOCATION: האזור הנתמך Google Cloud שמנהל את האשכול. לדוגמה, us-west1
    • ROOT_VOLUME_KMS_KEY_ARN: שם משאב Amazon‏ (ARN) של מפתח AWS KMS להצפנת נפח הבסיס

מפתח ההגדרות האישיות של מאגר הצמתים

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

  1. איך יוצרים מפתח חדש ב-Cloud Key Management Service

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

  3. מעדכנים את הכינוי של KMS שנמצא בשימוש:

     aws kms update-alias --alias-name KEY_ALIAS \
         --target-key-id CONFIG_ENCRYPTION_KMS_KEY_ARN
    

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

    • KEY_ALIAS: הכינוי של המפתח הקיים
    • CONFIG_ENCRYPTION_KMS_KEY_ARN: שם ה-ARN של מפתח ה-KMS החדש
  4. כדי לאלץ את האשכול להצפין מחדש את כל הסודות באשכול באמצעות מפתח ההצפנה החדש:

     kubectl get secrets --all-namespaces -o json | \
     kubectl annotate --overwrite -f - encryption-key-rotation-time=`date +"%Y%m%d-%H%M%S"`
    
  5. משביתים את מפתח AWS KMS הישן. מידע נוסף זמין במאמר הפעלה והשבתה של מפתחות.

נפחי הבסיס של מאגר הצמתים

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

  1. איך יוצרים מפתח חדש ב-Cloud Key Management Service

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

  3. מעדכנים את הכינוי של KMS שנמצא בשימוש:

     aws kms update-alias --alias-name KEY_ALIAS \
         --target-key-id ROOT_VOLUME_KMS_KEY_ARN
    

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

    • KEY_ALIAS: הכינוי של המפתח הקיים
    • ROOT_ENCRYPTION_KMS_KEY_ARN: שם ה-ARN של מפתח ה-KMS החדש
  4. מעדכנים את מאגר הצמתים:

     gcloud container aws node-pools update NODE_POOL_NAME \
         --root-volume-kms-key-arn=ROOT_VOLUME_KMS_KEY_ARN
    

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

    • NODE_POOL_NAME: שם מאגר הצמתים
    • ROOT_VOLUME_KMS_KEY_ARN: שם משאב Amazon‏ (ARN) של מפתח AWS KMS להצפנת נפח הבסיס
  5. משביתים את מפתח AWS KMS הישן. מידע נוסף זמין במאמר הפעלה והשבתה של מפתחות.