במאמר הזה מוסבר איך להגדיר זהויות מנוהלות של עומסי עבודה ב-Google Kubernetes Engine (GKE) באשכולות שמנוהלים על ידי GKE בצי. בנוסף, מוסבר כאן איך פורסים עומס עבודה ומאמתים את הזהות והאישור של עומס העבודה.
כדי להגדיר ולהשתמש בזהויות מנוהלות של עומסי עבודה ב-GKE, מבצעים את השלבים הבאים:
מאגר זהויות של עומסי עבודה בניהול Google
כשמוסיפים אשכולות לצי GKE, GKE יוצר באופן אוטומטי מאגר זהויות של עומסי עבודה שמנוהל על ידי Google. המאגר הזה משמש כבסיס לאמון, שנקרא גם תחום האמון של SPIFFE לעומסי העבודה. כל עומסי העבודה בדומיין המהימן מקבלים אישורים ועוגני אמון שמאפשרים אימות כברירת מחדל בדומיין המהימן. אם יש לכם כמה דומיינים מהימנים, אתם יכולים להפעיל איחוד מהימנות ביניהם כדי לאפשר תקשורת בין דומיינים מהימנים.
מאגר הזהויות של עומסי עבודה שמנוהל על ידי Google כולל את המאפיינים הבאים:
ניהול הזהויות: Google מנהלת את המאגר באופן מלא. אי אפשר ליצור משאבי משנה, כמו מרחבי שמות, זהויות או ספקי זהויות.
תמיכה בעומסי עבודה: אפשר להשתמש במאגר רק לעומסי עבודה ב-GKE. אי אפשר להוסיף למאגר סוגים אחרים של עומסי עבודה, כמו מכונות וירטואליות (VM) של Compute Engine.
שילוב של צי: כל האשכולות במאגר כפופים למודל הרגיל של שוויון מרחבי שמות ב-Kubernetes. המשמעות היא שלכל האשכולות במאגר יש הרשאות שוות, ועומסי עבודה בכל אשכול במאגר יכולים להשתמש בכל זהות במאגר הזה.
מאגר זהויות של עומסי עבודה בניהול עצמי
בסביבות עם אמון מעורב, כמו צי של דיירים מרובים, אפשר להגדיר מאגר נפרד של זהויות של עומסי עבודה בניהול עצמי עבור קבוצת משנה של עומסי העבודה והאשכולות. מאגר זהויות של עומסי עבודה בניהול עצמי כולל את המאפיינים הבאים:
ניהול זהויות: כשמגדירים מאגר זהויות של עומסי עבודה, מקבלים שליטה מלאה על ניהול הזהויות במאגר. במאגר, אפשר להגדיר היררכיית זהויות משלכם, כמו מרחבי שמות וזהויות. אתם יכולים להגדיר מדיניות אימות כדי לציין אילו עומסי עבודה יכולים לאמת זהויות במאגר או במרחבי שמות.
תמיכה בעומסי עבודה: אפשר להוסיף למאגר כל עומס עבודה (לדוגמה, מכונות וירטואליות, קונטיינרים ועומסי עבודה ללא שרת).
שילוב של Fleet: לעומסי עבודה שמנוהלים על ידי Fleet של GKE, Fleet מספק ממשק משולב לניהול זהויות. אפשר להגדיר את מאגר הזהויות של עומסי העבודה כמאגר הדיירים בהיקף ה-Fleet. ב-Fleets נוצרים באופן אוטומטי מרחבי שמות של מאגרי זהויות של עומסי עבודה שתואמים למרחבי השמות של ה-Fleet, ומוקצות זהויות לעומסי העבודה.
כדי להשתמש במאגר זהויות של עומסי עבודה בניהול עצמי, צריך להגדיר תכונות לניהול צוותים ב-Fleet כמו היקפי צוותים ומרחבי שמות ב-Fleet, ולהגדיר את המאגר בניהול עצמי כמאגר של היקף-דיירות. הוראות ליצירה ולהגדרה של מאגר בניהול עצמי מופיעות במאמר אימות ל-API של Cloud de Confiance עומסי עבודה ב-Fleet עם רמות אמון שונות.
הגדרה של כמה פרויקטים
Cloud de Confiance משאבים שבהם אתם משתמשים במסמך הזה, כמו אשכולות GKE, רשות אישורים (CA) בסיסית ורשויות אישורים משניות, יכולים להיות בפרויקטים נפרדים. כשמפנים למשאבים האלה, צריך להשתמש בדגל --project כדי לציין את הפרויקט הנכון לכל משאב.
לפני שמתחילים
יוצרים או בוחרים Cloud de Confiance פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Cloud de Confiance פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Cloud de Confiance שיוצרים. -
בוחרים את הפרויקט שיצרתם: Cloud de Confiance
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Cloud de Confiance .
מוודאים שהאשכולות פועלים בגרסה 1.33.0-gke.2248000 ואילך.
מוסיפים את האשכולות ל-GKE fleets. אם האשכול הוא אשכול Autopilot, לא צריך להשתמש בדגל
--enable-workload-identity. Fleets יוצר באופן אוטומטי מאגר זהויות של עומסי עבודה שמנוהל על ידי Google, ומשמש כדומיין אמון.מריצים את הפקודה הבאה כדי להפעיל את GKE fleets:
gcloud container clusters update CLUSTER_NAME \ --workload-pool=PROJECT_ID.s3ns.svc.id.goog \ --enable-fleet \ --fleet-project=PROJECT_ID
מחליפים את הערכים הבאים:
-
CLUSTER_NAME: השם של אשכול GKE שרוצים לרשום ב-GKE Fleet -
PROJECT_ID: מזהה פרויקט המארח של ה-Fleet ב-GKE
-
-
מפעילים את ממשקי ה-API של IAM ושל Certificate Authority Service.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים מגדירים את Google Cloud CLI כך שישתמש בפרויקט החיוב והמכסות.
gcloud config set billing/quota_project PROJECT_ID
מחליפים את PROJECT_ID במזהה של פרויקט ה-Fleet.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות ליצירה של זהויות מנוהלות של עומסי עבודה ולהקצאה של אישורים מנוהלים של זהויות של עומסי עבודה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
-
כדי ליצור ולהגדיר Workload Identity מנוהלים:
אדמין במאגר זהויות של עומסי עבודה ב-IAM (
roles/iam.workloadIdentityPoolAdmin) -
כדי ליצור ולהגדיר מאגרי CA:
אדמין של שירות CA (
roles/privateca.admin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
בחירת אפשרות של רשות אישורים
כדי לחתום על אישורי העומס, בוחרים את האפשרות של רשות האישורים (CA) שהכי מתאימה לתרחיש השימוש:
CA שמוגדר כברירת מחדל ומנוהל על ידי Google: אפשרות זו מתאימה לפתרון מנוהל לחלוטין ללא עלות. רשות האישורים שמוגדרת כברירת מחדל מספקת שורש משותף של אמון לכל המשתמשים ב-Cloud de Confiance .
CA בהתאמה אישית: משתמשים באפשרות הזו כדי להגדיר תשתית מפתח ציבורי (PKI) משלכם באמצעות Certificate Authority Service. האפשרות הזו מתאימה אם אתם צריכים שורש אמון מותאם אישית או אם אתם צריכים לאחסן מפתחות חתימה במודול אבטחה לחומרה (HSM) כדי לעמוד בדרישות התאימות. החיוב על Certificate Authority Service הוא נפרד מהחיוב על ניהול זהויות של עומסי עבודה. מידע נוסף מופיע במאמר בנושא תמחור של שירות CA.
הגדרת רשות אישורים
רשות אישורים שמוגדרת כברירת מחדל
כדי לקשר את רשות האישורים שמוגדרת כברירת מחדל למאגר הזהויות של עומס העבודה, מעדכנים את מאגר הזהויות של עומס העבודה באמצעות הדגל use-default-shared-ca.
gcloud iam workload-identity-pools update TRUST_DOMAIN_NAME \
--location="global" \
--use-default-shared-ca \
--project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
TRUST_DOMAIN_NAME:שם דומיין האמון. בהתאם לסוג המאגר, צריך לעצב את השם באופן הבא:
- מאגר בניהול Google:
PROJECT_ID.s3ns.svc.id.goog - מאגר בניהול עצמי:
POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
- מאגר בניהול Google:
-
PROJECT_ID: מזהה הפרויקט של פרויקט המארח של ה-Fleet.
רשות אישורים בהתאמה אישית
- הגדרת CA Service להנפקת אישורים לזהויות מנוהלות של עומסי עבודה.
- קישור רשויות האישורים למאגר הזהויות של עומסי העבודה.
- איך נותנים הרשאה לזהויות מנוהלות של עומסי עבודה לבקש אישורים ממאגר רשויות האישורים
הגדרת שירות CA להנפקת אישורים לזהויות מנוהלות של עומסי עבודה
כדי להגדיר זהויות מנוהלות של עומסי עבודה ב-GKE, צריך קודם להגדיר רשות אישורים (CA) ורשות אישורים משנית אחת או יותר. ההגדרה הזו נקראת היררכיית רשויות אישורים.
אפשר להשתמש במאגרי CA Service כדי להגדיר את ההיררכיה הזו. בהיררכיה הזו, מאגר CA משני מנפיק לעומסי העבודה שלכם את אישורי הזהות של עומסי העבודה מסוג X.509.
מאגרי רשויות האישורים שהוגדרו להנפקת אישורים לעומסי עבודה באמצעות זהויות מנוהלות של עומסי עבודה חייבים להיות באותו אזור כמו עומס העבודה. אם רוצים לתכנן ארכיטקטורה במספר אזורים כדי להבטיח עמידות במקרה של הפסקות אזוריות, מומלץ להגדיר מאגר משני של רשות אישורים (CA) של Certificate Authority Service לכל אזור שבו מפעילים עומסי עבודה. כך כל עומס עבודה יכול להפנות למאגר CA של Certificate Authority Service משנית באזור.
הגדרת מאגר רשויות אישורים (CA) עליונות
כדי ליצור את מאגר רשויות האישורים הבסיסיות:
יוצרים את מאגר רשויות האישורים (CA) העליונות במסלול Enterprise באמצעות gcloud privateca pools create.
המסלול הזה מיועד להנפקת אישורים לטווח ארוך בכמויות קטנות.
gcloud privateca pools create ROOT_CA_POOL_ID \
--location=REGION \
--project=CA_PROJECT_ID \
--tier=enterprise
מחליפים את מה שכתוב בשדות הבאים:
ROOT_CA_POOL_ID: מזהה ייחודי של מאגר אישורי ה-CA הבסיסיים. המזהה יכול להכיל עד 64 תווים, והוא חייב לכלול רק תווים אלפאנומריים (אותיות קטנות וגדולות), קווים תחתונים או מקפים. מזהה המאגר חייב להיות ייחודי באזור.
REGION: האזור שבו נמצא מאגר רשויות האישורים (CA) העליונות.
CA_PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את רשות האישורים הבסיסית.
מידע נוסף על מאגרי CA, רמות ואזורים זמין במאמר יצירת מאגרי CA.
הגדרת רשות האישורים (CA) העליונה
יוצרים רשות אישורים (CA) עליונה במאגר רשויות אישורים עליונות באמצעות gcloud privateca roots create.
יכול להיות שתתבקשו להפעיל את רשות האישורים הבסיסית אם זו רשות האישורים היחידה במאגר רשויות האישורים הבסיסיות.
כדי ליצור רשות אישורים (CA) בסיסית, מריצים את הפקודה הבאה:
gcloud privateca roots create ROOT_CA_ID \
--pool=ROOT_CA_POOL_ID \
--subject="CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
--key-algorithm="KEY_ALGORITHM" \
--max-chain-length=1 \
--location=REGION \
--project=CA_PROJECT_ID \
--auto-enable
מחליפים את מה שכתוב בשדות הבאים:
-
ROOT_CA_ID: שם ייחודי של רשות האישורים הבסיסית. השם של רשות האישורים יכול להיות באורך של עד 64 תווים, והוא חייב להכיל רק תווים אלפאנומריים באותיות קטנות וגדולות, קווים תחתונים או מקפים. השם של ה-CA חייב להיות ייחודי באזור. -
ROOT_CA_POOL_ID: המזהה של מאגר אישורי ה-CA הבסיסי. -
ROOT_CA_CN: השם הנפוץ של רשות האישורים הבסיסית. -
ROOT_CA_ORGANIZATION: הארגון של רשות האישורים הבסיסית. -
KEY_ALGORITHM: אלגוריתם המפתח, לדוגמהec-p256-sha256. -
REGION: האזור שבו נמצא מאגר רשויות האישורים (CA) העליונות. -
CA_PROJECT_ID: מזהה הפרויקט שבו יצרתם את רשות האישורים הבסיסית.
מידע נוסף על השדות subject של רשות האישורים זמין במאמר בנושא נושא.
אופציונלי: אפשר ליצור רשויות אישורי בסיס נוספות במאגר רשויות אישורי הבסיס. הפעולה הזו יכולה להיות שימושית לרוטציה של רשות אישורים (CA) בסיסית.
הגדרת רשויות אישורים משניות
אפשר גם להגדיר רשויות אישורים משניות. הגדרת רשויות אישורים משניות יכולה לעזור במקרים הבאים:
תרחישים שונים להנפקת אישורים: אם יש לכם תרחישים שונים להנפקת אישורים, אתם יכולים ליצור CA משני לכל תרחיש.
איזון עומסים טוב יותר: הוספה של כמה רשויות אישורים משניות למאגר רשויות אישורים עוזרת להשיג איזון עומסים טוב יותר של בקשות לאישורים.
כדי ליצור מאגר של רשויות אישורים משניות ורשות אישורים משנית:
יוצרים את מאגר ה-CA המשני ברמת DevOps, שמתאימה להנפקת אישורים לטווח קצר בכמויות גדולות.
gcloud privateca pools create SUBORDINATE_CA_POOL_ID \ --location=REGION \ --project=CA_PROJECT_ID \ --tier=devopsמחליפים את מה שכתוב בשדות הבאים:
-
SUBORDINATE_CA_POOL_ID: מזהה ייחודי של מאגר ה-CA המשני. המזהה יכול להכיל עד 64 תווים, והוא חייב לכלול רק תווים אלפאנומריים באותיות קטנות וגדולות, קווים תחתונים או מקפים. מזהה המאגר חייב להיות ייחודי באזור. -
REGION: האזור שבו ייצור המאגר המשני של רשויות אישורים. -
CA_PROJECT_ID: מזהה הפרויקט שבו יצרתם את רשות האישורים המשנית.
מידע נוסף זמין במאמר בנושא יצירת מאגרי CA.
-
יוצרים רשות אישורים משנית במאגר רשויות אישורים משניות. לא לשנות את מצב ההנפקה מבוסס-ההגדרות שמוגדר כברירת מחדל.
gcloud privateca subordinates create SUBORDINATE_CA_ID \ --pool=SUBORDINATE_CA_POOL_ID \ --location=REGION \ --issuer-pool=ROOT_CA_POOL_ID \ --issuer-location=REGION \ --subject="CN=SUBORDINATE_CA_CN, O=SUBORDINATE_CA_ORGANIZATION" \ --key-algorithm="KEY_ALGORITHM" \ --use-preset-profile=subordinate_mtls_pathlen_0 \ --project=CA_PROJECT_ID \ --auto-enableמחליפים את מה שכתוב בשדות הבאים:
-
SUBORDINATE_CA_ID: שם ייחודי של רשות אישורים משנית. השם יכול להיות באורך של עד 64 תווים והוא חייב להכיל רק תווים אלפאנומריים באותיות קטנות וגדולות, קווים תחתונים או מקפים. השם של מאגר כתובות ה-IP צריך להיות ייחודי באזור. SUBORDINATE_CA_POOL_ID: השם של מאגר רשויות האישורים המשניות.-
REGION: האזור שבו נמצא מאגר ה-CA המשני. -
ROOT_CA_POOL_ID: המזהה של מאגר אישורי ה-CA הבסיסי. -
REGION: האזור של מאגר רשויות האישורים הבסיסיות. -
SUBORDINATE_CA_CN: השם הנפוץ של רשות האישורים המשנית. -
SUBORDINATE_CA_ORGANIZATION: השם של הארגון המנפיק של רשות האישורים המשנית. -
KEY_ALGORITHM: אלגוריתם המפתח, לדוגמהec-p256-sha256. -
CA_PROJECT_ID: מזהה הפרויקט שבו יצרתם את רשות האישורים המשנית.
מידע נוסף על השדות
subjectשל רשות האישורים זמין במאמר בנושא נושא.-
יצירת קובץ תצורה להנפקת אישורים
כדי לקשר רשויות אישורים למאגרי זהויות של עומסי עבודה, צריך הגדרת הנפקת אישורים. אם אתם צריכים שעומסי העבודה שלכם יאומתו בכמה דומיינים מהימנים, כדאי לעיין במאמר הפעלת איחוד מהימן בין מאגרי זהויות של עומסי עבודה (אופציונלי).
כדי להגדיר את הגדרות הנפקת האישורים, יוצרים קובץ הגדרות הנפקת אישורים בשם cic.json. הפורמט של הקובץ דומה לזה:
{
"inlineCertificateIssuanceConfig": {
"caPools": {
"REGION1": "projects/CA_PROJECT_NUMBER1/locations/REGION1/caPools/SUBORDINATE_CA_POOL_ID1",
"REGION2": "projects/CA_PROJECT_NUMBER2/locations/REGION2/caPools/SUBORDINATE_CA_POOL_ID2"
},
"lifetime": "DURATION",
"rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE,
"keyAlgorithm": "ALGORITHM"
}
}
מחליפים את מה שכתוב בשדות הבאים:
REGION: האזורים שבהם נמצאים רשויות האישורים.
CA_PROJECT_NUMBER: מספר הפרויקט שבו יצרתם את מאגר ה-CA המשני. כדי לקבל את מספר הפרויקט של פרויקט CA_PROJECT_ID, מריצים את הפקודה הבאה:gcloud projects describe CA_PROJECT_ID --format="value(projectNumber)"
SUBORDINATE_CA_POOL_ID: השם של מאגר רשויות האישורים המשניות.
ALGORITHM: אופציונלי. אלגוריתם ההצפנה ששימש ליצירת המפתח הפרטי. הערכים התקפים הםECDSA_P256, ECDSA_P384,RSA_2048, RSA_3072, RSA_4096. אם לא מציינים אלגוריתם,ECDSA_P256משמש כאלגוריתם ברירת המחדל.
DURATION: אופציונלי. משך התוקף של אישור הקצה, בשניות. הערך צריך להיות בין 86,400 (יום אחד) לבין 2,592,000 (30 ימים). אם לא מציינים ערך, המערכת משתמשת בערך ברירת המחדל 86,400 (יום אחד). תוקף האישור בפועל תלוי גם ב-CA שהנפיק אותו, כי הוא יכול להגביל את משך החיים של האישור שהונפק.ROTATION_WINDOW_PERCENTAGE: אופציונלי: אחוז משך החיים של האישור שבו מופעל חידוש. הערך צריך להיות בין 50 ל-80. אם לא מציינים ערך, נעשה שימוש בערך ברירת המחדל 50.
קישור רשויות האישורים למאגר הזהויות של עומסי העבודה
אחרי שיוצרים את היררכיית ה-CA ויוצרים הגדרות להנפקת אישורים לכל CA, מקשרים את ה-CA למאגר הזהויות של עומס העבודה. כדי לקשר רשות אישורים למאגר הזהויות של עומסי העבודה, מעדכנים את מאגר הזהויות של עומסי העבודה עם הגדרת הנפקת האישורים של רשות האישורים. אחר כך תוכלו לוודא שהמאגר עודכן.
עדכון מאגר הזהויות של עומסי העבודה
כדי לעדכן את המאגר, מריצים את הפקודה הבאה:
gcloud iam workload-identity-pools update TRUST_DOMAIN_NAME \
--location="global" \
--inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \
--project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
TRUST_DOMAIN_NAME: השם של דומיין האמון. בהתאם לסוג המאגר, צריך לעצב את השם באופן הבא:- מאגר בניהול Google:
PROJECT_ID.s3ns.svc.id.goog - מאגר בניהול עצמי:
POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
- מאגר בניהול Google:
CIC_JSON_FILE_PATH: הנתיב לקובץ ההגדרות להנפקת אישורים בפורמט JSON (cic.json) שיצרתם קודם.
אימות העדכון של מאגר הזהויות של עומסי העבודה
כדי לוודא שמאגר הזהויות של עומס העבודה עודכן עם הגדרת הנפקת האישורים, מריצים את הפקודה הבאה:
gcloud iam workload-identity-pools describe TRUST_DOMAIN_NAME \
--location="global" \
--project=PROJECT_ID
מחליפים את TRUST_DOMAIN_NAME בשם דומיין האמון שבו השתמשתם לעדכון מאגר הזהויות של עומסי עבודה בשלב מוקדם יותר במסמך הזה.
הפלט של הפקודה אמור להיראות כך:
inlineCertificateIssuanceConfig:
caPools:
REGION1: projects/PROJECT_NUMBER1/locations/REGION1/caPools/SUBORDINATE_CA_POOL_ID1,
REGION2: projects/PROJECT_NUMBER2/locations/REGION2/caPools/SUBORDINATE_CA_POOL_ID2
keyAlgorithm: ALGORITHM
lifetime: DURATION
rotationWindowPercentage: ROTATION_WINDOW_PERCENTAGE
mode: TRUST_DOMAIN
name: TRUST_DOMAIN_NAME
state: ACTIVE
אם inlineCertificateIssuanceConfig לא מופיע בפלט פקודה, ודאו שהגדרתם את ה-CLI של gcloud בצורה נכונה כך שישתמש בפרויקט הנכון לחיוב ולמכסה. יכול להיות שתצטרכו לעדכן לגרסה חדשה יותר של ה-CLI של gcloud.
איך מאשרים לזהויות מנוהלות של עומסי עבודה לבקש אישורים ממאגר ה-CA
אחרי שמקשרים את רשויות האישורים למאגר הזהויות של עומסי העבודה, מאשרים לזהויות מנוהלות של עומסי עבודה לבקש אישורים ממאגר רשויות האישורים. כדי לאשר את הזהויות האלה:
נותנים את תפקיד ה-IAM CA Service Workload Certificate Requester (
roles/privateca.workloadCertificateRequester) לכל מאגר CA משני בדומיין המהימן. הפקודהgcloud privateca pools add-iam-policy-bindingהבאה מאשרת לדומיין המהימן לבקש אישורים משרשראות האישורים של שירות רשות האישורים.gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \ --location=REGION \ --role=roles/privateca.workloadCertificateRequester \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/TRUST_DOMAIN_NAME" \ --project=CA_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
SUBORDINATE_CA_POOL_ID: המזהה של מאגר רשויות האישורים המשניות. -
REGION: האזור של מאגר רשויות האישורים המשניות.
PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה ב-GKE.כדי לקבל את
PROJECT_NUMBERמהפרויקט של מאגר זהויות של עומסי עבודה, מריצים את הפקודה הבאה.gcloud projects describe WORKLOAD_IDENTITY_POOL_PROJECT_ID --format="value(projectNumber)"
WORKLOAD_IDENTITY_POOL_PROJECT_ID: מזהה הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה.
TRUST_DOMAIN_NAME: השם של דומיין האמון. בהתאם לסוג המאגר, צריך לעצב את השם באופן הבא:- מאגר בניהול Google:
PROJECT_ID.s3ns.svc.id.goog - מאגר בניהול עצמי:
POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
- מאגר בניהול Google:
CA_PROJECT_ID: מזהה הפרויקט שבו יצרתם את רשות האישורים המשנית.
-
מקצים את התפקיד CA Service Pool Reader (
roles/privateca.poolReader) במאגרי CA משניים לזהות המנוהלת של עומס העבודה. כך מאשרים לזהות המנוהלת של עומס העבודה לקבל את אישורי X.509 החתומים משרשרות האישורים של רשות האישורים.gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \ --location=REGION \ --role=roles/privateca.poolReader \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/TRUST_DOMAIN_NAME" \ --project=CA_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
SUBORDINATE_CA_POOL_ID: המזהה של מאגר רשויות האישורים המשניות. -
REGION: האזור של מאגר רשויות האישורים המשניות. -
PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה ב-GKE. -
TRUST_DOMAIN_NAME: השם של דומיין האמון. בהתאם לסוג המאגר, הפורמט של השם הוא:- מאגר בניהול Google:
PROJECT_ID.s3ns.svc.id.goog - מאגר בניהול עצמי:
POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog
- מאגר בניהול Google:
-
CA_PROJECT_ID: מזהה הפרויקט שבו יצרתם את רשות האישורים המשנית.
-
פריסת עומסי עבודה עם זהויות מנוהלות של עומסי עבודה
אחרי שמגדירים את מאגרי ה-CA להנפקת אישורים לזהויות מנוהלות של עומסי עבודה, אפשר לפרוס עומסי עבודה עם זהויות מנוהלות של עומסי עבודה.
בקטע הזה מוסבר איך לפרוס עומס עבודה לבדיקה עם זהות מנוהלת של עומס עבודה. כדי לעשות את זה, פורסים Pod, מוודאים שנוצרו פרטי כניסה, וצופים באישור ובמזהה SPIFFE.
פריסת Pod
אפשר לפרוס Pod שמקבל את הזהות המנוהלת של עומסי עבודה ממאגר זהויות של עומסי עבודה שמנוהל על ידי Google או ממאגר זהויות של עומסי עבודה שמנוהל עצמאית.
מאגר בניהול Google
כדי לפרוס Pod לבדיקה באשכול:
מקבלים את פרטי הכניסה לאשכול.
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CLUSTER_ZONE \ --project=CLUSTER_PROJECT_IDיוצרים את מרחב השמות של Kubernetes.
kubectl create namespace KUBERNETES_NAMESPACEפריסת PodSpec לבדיקה.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: namespace: KUBERNETES_NAMESPACE name: example-pod spec: containers: - name: main image: debian command: ['sleep', 'infinity'] volumeMounts: - name: fleet-spiffe-credentials mountPath: /var/run/secrets/workload-spiffe-credentials readOnly: true nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true" volumes: - name: fleet-spiffe-credentials csi: driver: podcertificate.gke.io volumeAttributes: signerName: spiffe.gke.io/fleet-svid trustDomain: fleet-project/s3ns.svc.id.goog EOF
מאגר בניהול עצמי
כדי לפרוס Pod לבדיקה באשכול באמצעות מאגר זהויות של כוח עבודה בניהול עצמי:
מגדירים מאגר זהויות של עומסי עבודה בניהול עצמי ומגדירים את אשכולות ה-Fleet כך שישתמשו במאגר הזה.
מקבלים את פרטי הכניסה לאשכול.
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CLUSTER_ZONE \ --project=CLUSTER_PROJECT_IDיוצרים את מרחב השמות של Kubernetes.
kubectl create namespace KUBERNETES_NAMESPACEפריסת PodSpec לבדיקה.
ההגדרה הבאה של PodSpec מגדירה את מאפיין עוצמת הקול
trustDomainלמאגר זהויות של כוח עבודה בניהול עצמי:cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: namespace: KUBERNETES_NAMESPACE name: example-pod spec: containers: - name: main image: debian command: ['sleep', 'infinity'] volumeMounts: - name: fleet-spiffe-credentials mountPath: /var/run/secrets/workload-spiffe-credentials readOnly: true nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true" volumes: - name: fleet-spiffe-credentials csi: driver: podcertificate.gke.io volumeAttributes: signerName: spiffe.gke.io/fleet-svid trustDomain: fleet-project/tenancy-scope EOF
הצגת רשימה של פרטי הכניסה של עומס העבודה
כדי להציג את פרטי הכניסה של עומס העבודה, מריצים את הפקודה הבאה. יכול להיות שיחלפו כמה דקות עד ליצירת פרטי הכניסה.
kubectl exec -it example-pod -n KUBERNETES_NAMESPACE -- ls /var/run/secrets/workload-spiffe-credentials
פלט הפקודה מציג את הקבצים הבאים:
-
ca_certificates.pem: מכיל את אישור ה-CA הבסיסי שחותם על אישור עומס העבודה. -
certificates.pem: מכיל את אישור X.509 של עומס העבודה. -
private_key.pem: מכיל את המפתח הפרטי של עומס העבודה. -
trust_bundles.json: מכיל מפה של דומיינים מהימנים ואישורי CA שצריך לסמוך עליהם עבור עומס העבודה הנתון. כל רשומה מכילה את מחרוזת הדומיין המהימן כמפתח, ואת אישורי ה-CA שמתאימים לדומיין המהימן הזה. -
credential-bundle.pem: מכיל את המפתח הפרטי ואת האישור ששורשרו יחד, ומספק קובץ יחיד לפרטי הכניסה של mTLS. הקובץ הזה זמין רק בגרסאות GKE אחרי 1.35.2-gke.1291000.
צפייה באישור
כדי לראות את האישור:
מייצאים את האישור לקובץ אישור.
kubectl exec -it example-pod --namespace=KUBERNETES_NAMESPACE -- cat /var/run/secrets/workload-spiffe-credentials/certificates.pem | openssl x509 -noout -text > certfileצופים בקובץ האישור.
cat certfileבתעודה, במאפיין
X509v3 Subject Alternative Name, מופיע מזהה SPIFFE בפורמט שדומה לפורמט הבא, בהתאם לסוג מאגר הזהויות של עומסי עבודה:- מאגר בניהול Google:
spiffe://PROJECT_ID.s3ns.svc.id.goog/ns/KUBERNETES_NAMESPACE/sa/default - מאגר בניהול עצמי:
spiffe://POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog/ns/KUBERNETES_NAMESPACE/sa/default
defaultמתייחס לחשבון השירות של Kubernetes שמוגדר כברירת מחדל.- מאגר בניהול Google:
בדיקת אימות מעומס עבודה לעומס עבודה
כדי לבדוק אימות מעומס עבודה לעומס עבודה, אפשר לעיין במאמר בנושא בדיקת אימות mTLS באמצעות Go.
קוד הדוגמה במאגר יוצר עומסי עבודה של לקוח ושרת. אפשר לבדוק אימות הדדי בין עומסי העבודה באמצעות האישורים שיצרתם קודם במסמך הזה.
הפעלת איחוד שירותי אימות הזהות בין מאגרי זהויות של עומסי עבודה (אופציונלי)
כדי להפעיל אימות הדדי של עומסי עבודה בדומיינים שונים של אמון, צריך להגדיר איחוד אמון בין מאגרי הזהויות של עומסי העבודה. השלב הזה נדרש רק אם עומסי העבודה צריכים לעבור אימות באמצעות עומסי עבודה במאגר זהויות של עומסי עבודה אחר.
כדי להפעיל את איחוד הזהויות:
יצירת קובץ התצורה של הרשאות השיתוף
יוצרים את קובץ הגדרות האמון עם קטע inlineTrustConfig שמציין את האישורים לכל דומיין.
קובץ הגדרות האמון מכיל קבוצה של ישויות עוגן אמינות ששירותי אימות הזהות של עומסי עבודה מנוהלים משתמשים בהן כדי לאמת אישורי עמיתים. קובץ הגדרות האמון ממפה את דומיין האמון של SPIFFE לאישורי CA.
עבור CA מותאם אישית, מורידים את האישורים לדומיין מהימן שמשתמש ב-CA מותאם אישית.
gcloud privateca pools get-ca-certs ROOT_CA_POOL_ID \ --output-file=CERTIFICATE_PATH \ --location=REGIONמחליפים את מה שכתוב בשדות הבאים:
-
ROOT_CA_POOL_ID: המזהה של מאגר אישורי ה-CA הבסיסי. -
CERTIFICATE_PATH: נתיב הפלט של האישור בקידוד PEM. -
REGION: האזור של מאגר רשויות האישורים הבסיסיות.
-
יוצרים קובץ בשם
tc.jsonשמכיל את הגדרות האמון המוטמעות. אם בדומיין נעשה שימוש ב-CA שמוגדר כברירת מחדל ומנוהל על ידי Google, צריך להשתמש בשדהtrustDefaultSharedCa. אם בדומיין נעשה שימוש ב-CA מותאם אישית, צריך להשתמש באישורים שעברו קידוד PEM שהורדתם קודם.הקובץ אמור להיראות כך:
בדוגמה הזו, TRUST_DOMAIN_A משתמש ברשות האישורים שמוגדרת כברירת מחדל ומנוהלת על ידי Google, ו-TRUSTED_DOMAIN_B משתמש ברשות אישורים בהתאמה אישית עם אישורי הבסיס שהורדו.
{ "inlineTrustConfig": { "additionalTrustBundles": { "TRUST_DOMAIN_A": { "trustDefaultSharedCa": true }, "TRUSTED_DOMAIN_B": { "trustAnchors": [ { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----" }, { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----" } ] } } } }מחליפים את מה שכתוב בשדות הבאים:
- TRUST_DOMAIN_A: השם של דומיין האמון שמשתמש ב-CA שמוגדר כברירת מחדל ומנוהל על ידי Google.
- TRUST_DOMAIN_B: השם של דומיין האמון שמשתמש ב-CA מותאם אישית.
- CERTIFICATE_MATERIAL: קבוצה של אישורי CA בפורמט PEM, שמהימנים להנפקת אישורים בדומיין המהימן.
עדכון מאגר הזהויות של עומסי העבודה בהגדרות של אמון
gcloud iam workload-identity-pools update TRUST_DOMAIN_NAME \
--location="global" \
--inline-trust-config-file=TC_JSON_FILE_PATH \
--project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
- TRUST_DOMAIN_NAME: השם של דומיין האמון.
- TC_JSON_FILE_PATH: הנתיב לקובץ התצורה של אמון בפורמט JSON (
tc.json) שיצרתם. - PROJECT_ID: מזהה הפרויקט.