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

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

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

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

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

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

בקשת תפקידים ב-IAM

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

הכנת הסביבה

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

כדי ליצור רשות אישורים בסיסית, צריך להחיל משאב בהתאמה אישית על המכונה של Distributed Cloud air-gapped.

  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 השם של רשות האישורים ברמה הבסיסית (root CA).
    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. מוודאים שה-CA הבסיסי מוכן. בדרך כלל לוקח כ-40 דקות עד שהרשות לאישורי CA מוכנה:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
        -n USER_PROJECT_NAMESPACE \
        get certificateauthority.pki.security.gdc.goog/ROOT_CA_NAME \
        -o json | 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 עם air gap:

משתמשים בפרמטר 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