שליטה בהשמדה של גרסת מפתח

‫Cloud de Confiance by S3NS מציע שתי מגבלות של מדיניות הארגון להגדרת מדיניות השמדה של גרסת מפתח בארגון:

  • המאפיין constraints/cloudkms.minimumDestroyScheduledDuration משמש להגדרת אורך מינימלי של משך הזמן scheduled for destruction למפתחות חדשים בארגון.
  • התג constraints/cloudkms.disableBeforeDestroy משמש כדי לדרוש השבתה של גרסת מפתח לפני שאפשר לתזמן את ההשמדה שלה.

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

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

משאבים נדרשים

כדי להשלים את השלבים שבדף הזה, צריך את המשאבים הבאים:

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

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

כדי לקבל את ההרשאות שדרושות לניהול מדיניות הארגון, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM‏ Organization policy administrator (אדמין של מדיניות הארגון) ‏(roles/orgpolicy.policyAdmin) בארגון. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

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

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

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

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

נדרש משך מינימלי של השמדה מתוזמנת

האילוץ Minimum destroy scheduled duration per key (constraints/cloudkms.minimumDestroyScheduledDuration) משמש להגדרת משך מינימלי לתזמון ההשמדה של מפתחות חדשים. האילוץ הזה מבטל את משך הזמן המינימלי שנקבע להשמדה ברמת הפרויקט, התיקייה או הארגון. המגבלה הזו מפחיתה את הסיכוי להשמיד בטעות מפתח שעדיין נחוץ. אתם יכולים להגדיר את ההגבלה הזו לערך גבוה יותר כדי לוודא שיש לכם מספיק זמן למנוע את ההרס של המפתח לפני שהוא הופך לבלתי הפיך.

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

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

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

    gcloud org-policies describe \
      constraints/cloudkms.minimumDestroyScheduledDuration \
      --organization=ORGANIZATION_ID
    

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

    אפשר גם להציג את מדיניות הארגון עבור תיקייה או פרויקט באמצעות הדגלים --folder או --project, ומזהה התיקייה או מזהה הפרויקט, בהתאמה.

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

    name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
    spec:
      etag: COTP+KYGELiCmsoB
      inheritFromParent: true
      rules:
      - values:
          allowedValues:
          - in:7d
      updateTime: '2023-08-17T14:00:04.424051Z'
    

    אם לא מוגדרת מדיניות, הפקודה describe מחזירה את השגיאה NOT_FOUND:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. מגדירים את המדיניות בארגון באמצעות הפקודה set-policy. הפקודה הזו מחליפה כל מדיניות שמצורפת כרגע למשאב.

    1. יוצרים קובץ זמני /tmp/policy.yaml לאחסון המדיניות:

      name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
      spec:
        rules:
        - values:
            allowedValues:
            - in:MINIMUM_DURATION
      

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

      • ORGANIZATION_ID: המזהה המספרי של הארגון.
      • MINIMUM_DURATION: משך הזמן המינימלי במצב מתוזמן להשמדה של מפתחות בארגון הזה, בימים. הערך צריך להיות אחד מהערכים הבאים: 7d,‏ 15d,‏ 30d,‏ 60d,‏ 90d או 120d.
    2. מריצים את הפקודה set-policy:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. כדי לראות את המדיניות האפקטיבית הנוכחית, משתמשים בפקודה describe --effective. הפקודה הזו מחזירה את מדיניות הארגון כפי שהיא מוערכת בשלב הזה בהיררכיית המשאבים, כולל ההורשה.

    gcloud org-policies describe \
      constraints/cloudkms.minimumDestroyScheduledDuration --effective \
      --organization=ORGANIZATION_ID
    

    הפלט אמור להיראות כך:

    name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
    spec:
      rules:
        - values:
            allowedValues:
            - 30d
            - 15d
            - 90d
            - 60d
            - 7d
            - 120d
    

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

דרישה להשבית את המפתחות לפני ההשמדה

האילוץ Restrict key destruction to disabled keys (הגבלת השמדת מפתחות למפתחות מושבתים) (constraints/cloudkms.disableBeforeDestroy) מאפשר לדרוש שהמפתח יושבת לפני שניתן יהיה לתזמן את השמדתו. השבתת מפתח לפני השמדה שלו היא שיטה מומלצת כי היא עוזרת לוודא שהמפתח לא נמצא בשימוש. אפשר לשלב את האילוץ הזה עם מדיניות ניהול זהויות והרשאות גישה (IAM) מחושבת היטב כדי ליצור תהליך השמדה רב-שלבי שדורש שיתוף פעולה מכמה תפקידים.

כדי להשתמש באילוץ הזה ליצירת תהליך השמדה רב-שלבי, צריך לוודא שלמשתמשים אין את ההרשאות cloudkms.cryptoKeyVersions.update ו-cloudkms.cryptoKeyVersions.destroy. בתרחיש השימוש הזה נדרש שימוש בתפקידים בהתאמה אישית.

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

gcloud

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

    gcloud org-policies describe \
      constraints/cloudkms.disableBeforeDestroy \
      --organization=ORGANIZATION_ID
    

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

    אפשר גם להציג את מדיניות הארגון עבור תיקייה או פרויקט באמצעות הדגלים --folder או --project, ומזהה התיקייה או מזהה הפרויקט, בהתאמה.

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

    name: organizations/ORGANIZATION_ID/policies/cloudkms.disableBeforeDestroy
    spec:
      etag: CPvY+KYGENDwgxA=
      rules:
      - enforce: true
      updateTime: '2023-08-17T14:19:39.033618Z'
    

    אם לא מוגדרת מדיניות, הפקודה describe מחזירה את השגיאה NOT_FOUND:

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. מגדירים את המדיניות בארגון באמצעות הפקודה set-policy. הפקודה הזו מחליפה כל מדיניות שכבר מצורפת למשאב.

    1. יוצרים קובץ זמני /tmp/policy.yaml לאחסון המדיניות:

      name: organizations/ORGANIZATION_ID/policies/cloudkms.disableBeforeDestroy
      spec:
        rules:
        - enforce: true
      

      מחליפים את ORGANIZATION_ID במזהה הייחודי של משאב הארגון.

    2. מריצים את הפקודה set-policy:

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. כדי לראות את המדיניות האפקטיבית הנוכחית, משתמשים בפקודה describe --effective. הפקודה הזו מחזירה את מדיניות הארגון כפי שהיא מוערכת בשלב הזה בהיררכיית המשאבים, כולל ההורשה.

    gcloud org-policies describe \
      constraints/cloudkms.disableBeforeDestroy --effective \
      --organization=ORGANIZATION_ID
    

    הפלט אמור להיראות כך:

    name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
    spec:
      rules:
      - enforce: true
    

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

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