יצירת רשות אישורי בסיס

במאמר הזה מוסבר איך ליצור רשות אישורי בסיס (CA) ב-Google Distributed Cloud ‏ (GDC) עם בידוד פיזי.

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

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

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

לפני שיוצרים רשות אישורי בסיס, צריך לבקש את ההרשאות הדרושות ולהכין את הסביבה.

שליחת בקשה לתפקידים ב-IAM

כדי ליצור, לעדכן ולמחוק רשות אישורי בסיס, צריך לפנות לאדמין ה-IAM בארגון ולבקש את התפקיד אדמין של Certificate Authority Service (certificate-authority-service-admin).

הכנת הסביבה

יצירת רשות אישורי בסיס

כדי ליצור CA בסיסי, צריך להחיל משאב מותאם אישית על מופע Distributed Cloud עם בידוד פיזי.

  1. יוצרים משאב CertificateAuthority ושומרים אותו כקובץ YAML בשם root-ca.yaml:

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateAuthority
    metadata:
      name: ROOT_CA_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      caProfile:
        commonName: COMMON_NAME
        duration: DURATION
        renewBefore: RENEW_BEFORE
        organizations:
        - ORGANIZATION
        organizationalUnits:
        - ORGANIZATIONAL_UNITS
        countries:
        - COUNTRIES
        localities:
        - LOCALTIES
        provinces:
        - PROVINCES
        streetAddresses:
        - STREET_ADDRESSES
        postalCodes:
        - POSTAL_CODES
      caCertificate:
        selfSignedCA: {}
      certificateProfile:
        keyUsage:
          - digitalSignature
          - keyCertSign
          - crlSign
        extendedKeyUsage:
          - EXTENDED_KEY_USAGE
      secretConfig:
        secretName: SECRET_NAME
        privateKeyConfig:
          algorithm: KEY_ALGORITHM
          size: KEY_SIZE
      acme:
        enabled: ACME_ENABLED
    

    מחליפים את המשתנים הבאים:

    משתנה תיאור
    ROOT_CA_NAME השם של רשות האישורים הבסיסית.
    USER_PROJECT_NAMESPACE השם של מרחב השמות שבו נמצא פרויקט המשתמש.
    COMMON_NAME השם המוכר של אישור ה-CA.
    DURATION משך החיים המבוקש של אישור CA. מציינים את משך הזמן בשעות (לדוגמה, 1000h). אין תמיכה ביחידות כמו ימים (d) או שנים (y).
    SECRET_NAME השם של סוד Kubernetes שמכיל את המפתח הפרטי ואת אישור ה-CA החתום.

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

    משתנה תיאור
    RENEW_BEFORE זמן הרוטציה לפני שתוקף אישור ה-CA פג.
    ORGANIZATION הארגון שיופיע באישור.
    ORGANIZATIONAL_UNITS היחידות הארגוניות שבהן יש להשתמש באישור.
    COUNTRIES המדינות שבהן האישור ישמש.
    LOCALITIES הערים שיופיעו באישור.
    PROVINCES מדינה (State) או מחוזות שיופיעו בתעודה.
    STREET_ADDRESSES כתובות הרחוב שיופיעו באישור.
    POSTAL_CODES המיקודים שבהם יש להשתמש באישור.
    EXTENDED_KEY_USAGE השימוש המורחב במפתח של האישור. אם מציינים את המאפיין הזה, הערכים המותרים הם serverAuth ו-clientAuth.
    KEY_ALGORITHYM אלגוריתם המפתח הפרטי שמשמש לאישור הזה. הערכים המותרים הם RSA,‏ Ed25519 או ECDSA. אם לא מציינים את הגודל, ברירת המחדל היא 256 עבור ECDSA ו-2048 עבור RSA. המערכת מתעלמת מגודל המפתח עבור Ed25519.
    KEY_SIZE הגודל, בביטים, של המפתח הפרטי של האישור הזה תלוי באלגוריתם. ‫RSA מאפשר 2048,‏ 3072,‏ 4096 או 8192 (ברירת המחדל היא 2048). ‫ECDSA מאפשר 256,‏ 384 או 521 (ברירת המחדל היא 256). המערכת Ed25519 מתעלמת מהגודל.
    ACME_ENABLED אם הערך הוא true, הרשות המנפיקה פועלת במצב ACME ומציגה את כתובת ה-URL של שרת ACME. אחרי כן, תוכלו להשתמש בלקוח ובפרוטוקול ACME כדי לנהל את האישורים.

  2. מחילים את המשאב המותאם אישית על מופע Distributed Cloud:

    kubectl apply -f root-ca.yaml –kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    מחליפים את הערך MANAGEMENT_API_SERVER_KUBECONFIG בנתיב לקובץ kubeconfig של שרת Management API.

  3. מאמתים את המוּכנוּת (readiness) של רשות האישורים הבסיסית. בדרך כלל לוקח כ-40 דקות עד שהרשות המנפיקה מוכנה:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthority.pki.security.gdc.goog/ROOT_CA_NAME -ojson | jq -r ' 
    .status.conditions[] | select( .type as $id | "Ready" | index($id))
    

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

    {
      "lastTransitionTime": "2025-01-24T17:09:19Z",
      "message": "CA reconciled",
      "observedGeneration": 2,
      "reason": "Ready",
      "status": "True",
      "type": "Ready"
    }
    

הצגת רשימה של אישורי CA

כדי להציג רשימה של כל המשאבים של Certificate Authority Service במופע של Distributed Cloud שמופרד מרשת האינטרנט:

משתמשים בפרמטר certificateauthorities כדי להציג רשימה של כל המשאבים CertificateAuthority:

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthorities

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

   NAMESPACE    NAME              READY   REASON   AGE
   foo          root-ca           True    Ready    7h24m
   foo          sub-ca            True    Ready    7h24m