במאמר הזה מוסבר איך ליצור רשות אישורי בסיס (CA) ב-Google Distributed Cloud (GDC) עם בידוד פיזי.
רשות אישורים בסיסית, שנמצאת בראש ההיררכיה של תשתית של מפתח ציבורי (PKI), קובעת את ישות עוגן אמינה של ה-PKI. כדי להשתמש באישורים במסגרת PKI, מכשירים, תוכנות ורכיבים צריכים להיות מהימנים על ידי רשות אישורי הבסיס (CA). ההגדרה הזו מבטיחה מהימנות בכל האישורים שהונפקו על ידי ה-CA הבסיסי, וכך מאפשרת מהימנות ב-PKI עצמו.
המסמך הזה מיועד לקהלים בקבוצת מפעילים של אפליקציות, כמו מפתחי אפליקציות או מדעני נתונים, שמנהלים את מחזורי החיים של האישורים בפרויקט שלהם. מידע נוסף מופיע במאמרי העזרה בנושא קהלים ב-GDC עם פער אבטחה.
לפני שמתחילים
לפני שיוצרים רשות אישורי בסיס, צריך לבקש את ההרשאות הדרושות ולהכין את הסביבה.
שליחת בקשה לתפקידים ב-IAM
כדי ליצור, לעדכן ולמחוק רשות אישורי בסיס, צריך לפנות לאדמין ה-IAM בארגון ולבקש את התפקיד אדמין של Certificate Authority Service (certificate-authority-service-admin).
הכנת הסביבה
יוצרים קובץ kubeconfig כדי להגדיר גישה ל-
kubectl.
יצירת רשות אישורי בסיס
כדי ליצור CA בסיסי, צריך להחיל משאב מותאם אישית על מופע Distributed Cloud עם בידוד פיזי.
יוצרים משאב
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 כדי לנהל את האישורים.מחילים את המשאב המותאם אישית על מופע Distributed Cloud:
kubectl apply -f root-ca.yaml –kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGמחליפים את הערך
MANAGEMENT_API_SERVER_KUBECONFIGבנתיב לקובץ kubeconfig של שרת Management API.מאמתים את המוּכנוּת (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