הגדרה של mTLS בבק-אנד באמצעות זהות מנוהלת של עומס עבודה

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

כדי להגדיר mTLS בבקשות מהקצה העורפי באמצעות זהות מנוהלת של עומס עבודה, צריך לבצע את הפעולות הבאות:

  1. מגדירים מאגר של רשויות אישורים (CA) של Certificate Authority Service כדי להנפיק אישורי X.509 לזהויות מנוהלות של עומסי עבודה.
  2. מגדירים תחום מהימן על ידי יצירת מאגר זהויות של עומסי עבודה עם מרחב שמות, זהות מנוהלת, מדיניות אימות, משאב של הגדרת הנפקת אישורים מוטמעת ומשאב של הגדרת אמון מוטמעת.1
  3. מקשרים את רשות האישורים למאגר הזהויות של עומסי העבודה באמצעות הגדרת הנפקת האישורים בשורה.
  4. נותנים הרשאה לזהויות מנוהלות של עומסי עבודה לבקש אישורים ממאגר רשויות האישורים.
  5. יוצרים את מאזן העומסים ומצרפים את הזהות המנוהלת לשירות הקצה העורפי שלו.

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

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

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

  1. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  2. קוראים את המסמך סקירה כללית על mTLS בשרת העורפי עם זהויות מנוהלות של עומסי עבודה.

  3. מידע על הנפקת אישורים באמצעות Certificate Authority Service

  4. Enable the IAM, Certificate Authority Service, Compute Engine, Certificate Manager, and Network Security APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable iam.googleapis.com privateca.googleapis.com compute.googleapis.com certificatemanager.googleapis.com  networksecurity.googleapis.com

  5. מגדירים את Google Cloud CLI לשימוש בפרויקט שהוסף לרשימת ההיתרים לחיוב ולמכסות.

    gcloud config set billing/quota_project PROJECT_ID
    

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

  6. יוצרים זהות מנוהלת עבור ה-Backend. מידע נוסף זמין במאמר סקירה כללית על זהויות מנוהלות של עומסי עבודה.

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

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

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

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

הגדרת שירות CA להנפקת אישורים לזהויות מנוהלות של עומסי עבודה

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

יצירת מאגר של רשויות אישורים (CA) עליונות

יוצרים את מאגר ה-CA הבסיסי ברמת Enterprise באמצעות הפקודה gcloud privateca pools create. השכבה הזו מיועדת להנפקת אישורים לטווח ארוך בכמויות קטנות.

gcloud privateca pools create ROOT_CA_POOL_ID \
    --location=REGION \
    --project=PROJECT_ID \
    --tier=enterprise

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

  • ROOT_CA_POOL_ID: מזהה ייחודי של מאגר אישורי ה-CA הבסיסיים

  • REGION: האזור שבו נמצא מאגר 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=PROJECT_ID \
    --auto-enable

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

  • ROOT_CA_ID: שם ייחודי לרשות המאשרת הבסיסית. שם הרשות שמנפיקה את האישורים (CA) יכול להיות באורך של עד 64 תווים, והוא חייב להכיל רק תווים אלפאנומריים באותיות קטנות וגדולות, קווים תחתונים או מקפים. השם של ה-CA צריך להיות ייחודי באזור.
  • ROOT_CA_POOL_ID: המזהה של מאגר רשויות האישורים הבסיסיות.
  • ROOT_CA_CN: השם הנפוץ של רשות האישורים הבסיסית.
  • ROOT_CA_ORGANIZATION: הארגון של רשות האישורים הבסיסית.
  • KEY_ALGORITHM: האלגוריתם שבו משתמשים כדי ליצור מפתח Cloud KMS. הדגל הזה הוא אופציונלי. אם לא תכללו את הדגל הזה, אלגוריתם המפתח יהיה rsa-pkcs1-4096-sha256 כברירת מחדל.
  • REGION: האזור שבו נמצא מאגר רשויות האישורים הבסיסיות.
  • PROJECT_ID: מזהה הפרויקט.

מידע נוסף על רשות אישורים (CA) בסיסית זמין במאמר יצירת רשות אישורים בסיסית.

יצירת זהויות מנוהלות של עומסי עבודה

כשמשתמשים בזהויות מנוהלות של עומסי עבודה,אפשר להקצות ולנהל באופן אוטומטי אישורי X.509 מCertificate Authority Service. Google Cloud זהויות של עומסי עבודה מוגדרות במאגר זהויות של עומסי עבודה, ומאורגנות בגבולות אדמיניסטרטיביים שנקראים מרחבי שמות.

יצירת מאגר זהויות של עומסי עבודה

כדי ליצור זהויות מנוהלות של עומסי עבודה, צריך ליצור מאגר במצב TRUST_DOMAIN. כדי ליצור מאגר זהויות של עומסי עבודה לזהויות מנוהלות של עומסי עבודה, משתמשים בפקודה gcloud iam workload-identity-pools create.

gcloud iam workload-identity-pools create WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --mode="TRUST_DOMAIN"

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

כדי לוודא שמאגר הזהויות של עומסי העבודה נוצר במצב TRUST_DOMAIN, משתמשים בפקודה gcloud iam workload-identity-pools describe.

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global"

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

mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

הפלט הזה כולל את הערכים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט שלGoogle Cloud הפרויקט
  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה

יצירת מרחב שמות

הפקודה gcloud iam workload-identity-pools namespaces create מאפשרת ליצור מרחב שמות במאגר זהויות של עומסי עבודה.

gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

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

  • NAMESPACE_ID: המזהה הייחודי של מרחב השמות. המזהה צריך לכלול בין 2 ל-63 תווים, רק תווים אלפאנומריים באותיות קטנות ומקפים, ולהתחיל ולהסתיים בתו אלפאנומרי. אחרי שיוצרים מרחב שמות, אי אפשר לשנות את המזהה שלו.
  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי עבודה שיצרתם קודם.

יצירת זהות מנוהלת של עומס עבודה

הפקודה gloud iam workload-identity-pools managed-identities create מאפשרת ליצור זהות מנוהלת של עומס עבודה במרחב שמות של מאגר זהויות של עומס עבודה.

gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
    --namespace="NAMESPACE_ID" \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

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

  • MANAGED_IDENTITY_ID: המזהה הייחודי של הזהות המנוהלת. המזהה צריך להכיל בין 2 ל-63 תווים, לכלול רק תווים אלפאנומריים קטנים ומקפים, ולהתחיל ולהסתיים בתו אלפאנומרי. אחרי שיוצרים זהות מנוהלת של עומס עבודה, אי אפשר לשנות את המזהה שלה.
  • NAMESPACE_ID: מזהה מרחב השמות שיצרתם קודם.
  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של כוח העבודה שיצרתם קודם.

המזהה של הזהות המנוהלת של עומס העבודה הוא מזהה SPIFFE, והוא מעוצב באופן הבא:

spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

יצירת מדיניות אימות

בדוגמה הזו, מדיניות האימות מכילה כלל אימות שבודק אם שירות לקצה העורפי הוא חלק מפרויקט ספציפי. אם האימות של מדיניות האימות עובר בהצלחה, IAM מבקש אישור X.509 עבור הזהות המנוהלת מ-Certificate Authority Service.

כדי ליצור מדיניות אימות, מריצים את הפקודה הבאה כדי להוסיף כלל אימות.

gcloud iam workload-identity-pools managed-identities add-attestation-rule MANAGED_IDENTITY_ID \
    --namespace=NAMESPACE_ID \
    --workload-identity-pool=WORKLOAD_IDENTITY_POOL_ID \
    --google-cloud-resource='//compute.googleapis.com/projects/PROJECT_NUMBER/type/BackendService/*' \
    --location=global

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

  • MANAGED_IDENTITY_ID: המזהה הייחודי של הזהות המנוהלת. המזהה צריך לכלול בין 2 ל-63 תווים, להכיל רק תווים אלפאנומריים באותיות קטנות ומקפים, ולהתחיל ולהסתיים בתו אלפאנומרי. אחרי שיוצרים זהות מנוהלת של עומס עבודה, אי אפשר לשנות את המזהה שלה.
  • NAMESPACE_ID: המזהה של מרחב השמות שיצרתם קודם.
  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה שיצרתם קודם.
  • PROJECT_NUMBER: מספר הפרויקט של Google Cloud הפרויקט.

יצירת הגדרה להנפקת אישורים מוטבעים

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

כדי להגדיר תצורת הנפקת אישורים מוטמעת, יוצרים קובץ תצורה בפורמט JSON‏ (cic.json). הפורמט של הקובץ דומה לפורמט הבא:

{
  "inlineCertificateIssuanceConfig": {
      "caPools": {
        "REGION": "projects/PROJECT_NUMBER/locations/REGION/caPools/ROOT_CA_POOL_ID",
      },
      ["lifetime": "CERTIFICATE_LIFETIME"],
      ["rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE],
      ["keyAlgorithm": "ALGORITHM"]
  }
}

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

  • REGION: האזור שבו נמצא רשות האישורים.

  • PROJECT_NUMBER: מספר הפרויקט. כדי לקבל את מספר הפרויקט מהפרויקט שצוין על ידי המשתנה PROJECT_ID, מריצים את הפקודה הבאה:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  • ROOT_CA_POOL_ID: המזהה של מאגר רשויות האישורים הבסיסיות.

  • CERTIFICATE_LIFETIME: משך החיים של האישורים של עומס העבודה שהונפקו על ידי מאגר ה-CA בשניות – לדוגמה: ‎86400s (ל-24 שעות). הערך של CERTIFICATE_LIFETIME צריך להיות בין 24 שעות ל-30 ימים. אם לא מציינים את CERTIFICATE_LIFETIME, משך החיים של האישור הוא 24 שעות כברירת מחדל. הערך CERTIFICATE_LIFETIME הוא אופציונלי.

  • ROTATION_WINDOW_PERCENTAGE: אחוז משך החיים של האישור שבו מופעלת חידוש. הערך של ROTATION_WINDOW_PERCENTAGE חייב להיות בין 50 ל-80. ערך ברירת המחדל הוא 50. הערך ROTATION_WINDOW_PERCENTAGE הוא אופציונלי.

  • ALGORITHM: אלגוריתם ההצפנה ששימש ליצירת המפתח הפרטי. הערכים התקפים של ALGORITHM הם ECDSA_P256 (ברירת מחדל), ECDSA_P384,‏ RSA_2048,‏ RSA_3072 ו-RSA_4096. ALGORITHM הוא אופציונלי.

יצירת הגדרת אמון מוטמעת

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

היררכיית משאבים מנוהלת של זהויות של עומסי עבודה.
היררכיית משאבים מנוהלת של Workload Identity (לוחצים כדי להגדיל).

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

כדי ליצור הגדרת אמון מוטמעת:

  1. מורידים את האישורים.

    gcloud privateca pools get-ca-certs ROOT_CA_POOL_ID \
        --output-file=CERTIFICATE_PATH \
        --location=REGION
    

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

    • ROOT_CA_POOL_ID: המזהה של מאגר רשויות האישורים הבסיסיות
    • CERTIFICATE_PATH: הנתיב שבו יישמר האישור בקידוד PEM
    • REGION: האזור של מאגר רשויות האישורים (CA) העליונות
  2. יוצרים קובץ תצורה בפורמט JSON‏ (tc.json) שמכיל את הגדרות האמון המוטמעות, עם אישורים בפורמט PEM.

    הקובץ אמור להיראות כך:

    {
      "inlineTrustConfig": {
        "additionalTrustBundles": {
          "TRUST_DOMAIN_NAME1": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----"
              }
            ]
          },
          "TRUST_DOMAIN_NAME2": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL3\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL4\n-----END CERTIFICATE-----"
              }
            ]
          }
        }
      }
    }
    

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

    • TRUST_DOMAIN_NAME: דומיין מהימן יכול להיות כל דומיין מהימן (כמו example.com), כולל דומיין מהימן של מאגר זהויות של עומסי עבודה אחר (או אפילו אותו מאגר).

      עבור דומיין אמון של מאגר זהויות של עומסי עבודה, שם דומיין האמון מעוצב באופן הבא:

      WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      

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

      • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
      • PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה
    • CERTIFICATE_MATERIAL: אישור ה-CA בפורמט PEM שמהימן להנפקת אישורים בדומיין המהימן. אפשר להשתמש בפקודה הבאה כדי לקודד קובץ אישור בפורמט PEM למחרוזת בשורה אחת:

      cat trust-anchor.pem | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g'
      

קישור רשות האישורים למאגר הזהויות של עומסי העבודה

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

עדכון מאגר הזהויות של עומסי העבודה

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

כדי לעדכן את המאגר, מריצים את הפקודה הבאה:

gcloud iam workload-identity-pools update WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \
    [--inline-trust-config-file=TC_JSON_FILE_PATH] \
    --project=PROJECT_ID

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

  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה.

  • CIC_JSON_FILE_PATH: הנתיב לקובץ התצורה בפורמט JSON‏ (cic.json) של הגדרת הנפקת האישורים בשורה שיצרתם קודם.

  • TC_JSON_FILE_PATH: הנתיב לקובץ התצורה בפורמט JSON ‏ (tc.json) של הגדרת האמון בתוך השורה שיצרתם קודם. אם עומסי העבודה שלכם עוברים אימות בדומיינים שונים של אמון, אתם צריכים לציין את הקובץ הזה. אחרת, אפשר להשמיט את --inline-trust-config.

אימות העדכון של מאגר הזהויות של עומסי העבודה

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

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --project=PROJECT_ID

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

  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה.

  • PROJECT_ID: מזהה הפרויקט

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

inlineCertificateIssuanceConfig:
    caPools:
      REGION: projects/PROJECT_NUMBER/locations/REGION1/caPools/ROOT_CA_POOL_ID
    keyAlgorithm: ALGORITHM
    lifetime: CERTIFICATE_LIFETIME
    rotationWindowPercentage: ROTATION_WINDOW_PERCENTAGE
inlineTrustConfig:
    additionalTrustBundles:
      TRUST_DOMAIN_NAME1:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL1
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL2
            -----END CERTIFICATE-----
      TRUST_DOMAIN_NAME2:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL3
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL4
            -----END CERTIFICATE-----
mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

הפלט הזה כולל את הערכים הבאים:

  • PROJECT_NUMBER: מספר הפרויקט
  • REGION: האזור שבו נמצא מאגר CA הבסיסי
  • ROOT_CA_POOL_ID: המזהה של מאגר רשויות האישורים הבסיסיות
  • ALGORITHM: אלגוריתם ההצפנה ששימש ליצירת המפתח הפרטי
  • CERTIFICATE_LIFETIME: משך החיים של האישורים של עומסי העבודה שהונפקו על ידי מאגר רשויות האישורים, בשניות
  • ROTATION_WINDOW_PERCENTAGE: אחוז משך החיים של האישור שבו מתבצעת ההפעלה של החידוש.
  • TRUST_DOMAIN_NAME: דומיין מהימן יכול להיות כל דומיין מהימן (כמו example.com), כולל דומיין מהימן של מאגר זהויות של עומסי עבודה אחר (או אפילו אותו מאגר).
  • CERTIFICATE_MATERIAL: אישור CA בפורמט PEM שמהימן להנפקת אישורים בדומיין המהימן
  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה

אם inlineCertificateIssuanceConfig או inlineTrustConfig לא מופיעים בפלט, צריך לוודא שהגדרתם את ה-CLI של gcloud בצורה נכונה כך שישתמש בפרויקט הנכון לחיוב ולמכסה. יכול להיות שתצטרכו לעדכן לגרסה חדשה יותר של ה-CLI של gcloud.

איך מאשרים לזהויות מנוהלות של עומסי עבודה לבקש אישורים ממאגר אישורי ה-CA

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

  1. מקצים לדומיין המהימן את התפקיד 'שליחת בקשות לאישורי עומס עבודה של שירות CA' (roles/privateca.workloadCertificateRequester). תפקיד זה מאשר לדומיין האמון לבקש אישורים משרשרות האישורים של שירות הרשות המאשרת.

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.workloadCertificateRequester \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

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

    • ROOT_CA_POOL_ID: המזהה של מאגר רשויות האישורים הבסיסיות
    • REGION: האזור של מאגר רשויות האישורים (CA) העליונות
    • PROJECT_NUMBER: מספר הפרויקט

      כדי לקבל את PROJECT_NUMBER מ-PROJECT_ID, מריצים את הפקודה הבאה:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
      
    • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של כוח העבודה

    • PROJECT_ID: מזהה הפרויקט

  2. מקצים לדומיין המהימן את התפקיד CA Service Pool Reader (roles/privateca.poolReader). התפקיד הזה מאשר לדומיין המהימן לקבל את אישורי X.509 החתומים משרשראות האישורים של רשות האישורים.

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.poolReader \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

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

    • ROOT_CA_POOL_ID: המזהה של מאגר רשויות האישורים הבסיסיות
    • REGION: האזור של מאגר רשויות האישורים (CA) העליונות
    • PROJECT_NUMBER: מספר הפרויקט
    • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של כוח העבודה
    • PROJECT_ID: מזהה הפרויקט

יצירת מאזן העומסים והקצאת הזהות המנוהלת לשירות הקצה העורפי

אפשר להקצות זהות מנוהלת רק כשיוצרים את שירות ה-Backend.

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

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

המסוף

  1. נכנסים לדף Load balancing במסוף Google Cloud .

    כניסה לדף איזון עומסים

  2. בקטע Backend configuration, מוסיפים את הפרטים הרלוונטיים ליצירת שירות לקצה העורפי.

  3. מרחיבים את הקטע הגדרות מתקדמות.

  4. בקטע Backend authentication (אימות בקצה העורפי), בוחרים באפשרות Managed Identity (זהות מנוהלת).

  5. כדי להקצות זהות מנוהלת לשירות העורפי, בשדה Managed Identity, מזינים את הזהות המנוהלת של עומס העבודה שיצרתם קודם.

  6. לוחצים על יצירה.

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

gcloud

  1. כדי להקצות זהות מנוהלת לשירות לקצה העורפי, מוסיפים את הדגל --identity בזמן השימוש בפקודה gcloud beta compute backend-services create.

    gcloud beta compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --health-checks=HEALTH_CHECK_NAME \
        --identity='//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID' \
        --global
    

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

    • BACKEND_SERVICE_NAME: השם של שירות לקצה העורפי
    • HEALTH_CHECK_NAME: השם של בדיקת התקינות
    • WORKLOAD_IDENTITY_POOL_ID: מזהה מאגר הזהויות של עומסי העבודה
    • PROJECT_NUMBER: מספר הפרויקט
    • NAMESPACE_ID: מזהה מרחב השמות
    • MANAGED_IDENTITY_ID: המזהה של הזהות המנוהלת

משאבים שנוצרו באופן אוטומטי

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

  • הגדרת אימות לקצה העורפי: מצורפת לשירות הקצה העורפי של מאזן העומסים
  • אישור זהות שמנוהל על ידי Certificate Manager: מצורף להגדרת האימות של ה-Backend
  • הגדרת האמון של Certificate Manager: מצורפת להגדרת האימות של ה-Backend

בקטעים הבאים מוסבר איך לוודא שהמשאבים שנוצרו באופן אוטומטי הוגדרו.

אימות ההגדרות את ההגדרות

בודקים את ההגדרות כדי לראות אם המשאבים שנוצרו באופן אוטומטי הוגדרו.

למשאבים שנוצרו באופן אוטומטי יש קידומת mi, שמציינת שהמשאב נוצר על ידי זהות מנוהלת של עומס עבודה.

אימות היצירה של הגדרת האימות בעורף המערכת והזהות המנוהלת

כדי לוודא שיצרתם את הגדרת האימות של ה-backend ואת הזהות המנוהלת, משתמשים בפקודה gcloud beta compute backend-services describe כדי לתאר את שירות לקצה העורפי.

gcloud beta compute backend-services describe BACKEND_SERVICE_NAME --global

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

affinityCookieTtlSec: 0
connectionDraining:
  drainingTimeoutSec: 0
creationTimestamp: '2025-11-06T02:15:43.680-08:00'
description: ''
enableCDN: false
fingerprint: lTZwas8aylg=
healthChecks:
- https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/healthChecks/HEALTH_CHECK_NAME
id: '719352032'
kind: compute#backendService
loadBalancingScheme: EXTERNAL_MANAGED
name: BACKEND_SERVICE_NAME
port: 80
portName: PORT_NAME
protocol: HTTPS
selfLink: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
sessionAffinity: NONE
timeoutSec: 30
tlsSettings:
  authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/mi-bac-423b651f-d549-4a9f-a4f2-g2bcaa7108bd
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

הפלט הזה כולל את הערכים הבאים:

  • PROJECT_ID: מזהה הפרויקט
  • HEALTH_CHECK_NAME: השם של בדיקת התקינות
  • BACKEND_SERVICE_NAME: השם של שירות הקצה העורפי
  • PORT_NAME: שם היציאה
  • REGION: האזור שבו נמצא מאגר CA הבסיסי
  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
  • PROJECT_NUMBER: מספר הפרויקט
  • NAMESPACE_ID: מזהה מרחב השמות
  • MANAGED_IDENTITY_ID: המזהה של הזהות המנוהלת

ההגדרה של אימות ה-Backend נוצרת באופן אוטומטי ומצורפת לשדה backendService.tlsSettings.authenticationConfig. הגדרת האימות של ה-backend שמתחילה בקידומת mi נקראת MI_BACKEND_AUTHENTICATION_CONFIG_ID בקטע הבא.

זהות מנוהלת של עומס עבודה מצורפת גם לשדה backendService.tlsSettings.identity. הפורמט הוא:

//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

אימות היצירה של אישור הזהות המנוהל של Certificate Manager והגדרת האמון של Certificate Manager

כדי לוודא שאישור הזהות המנוהלת של Certificate Manager והגדרת האמון של Certificate Manager מצורפים למשאב של הגדרת האימות של השרת העורפי, משתמשים בפקודה gcloud network-security backend-authentication-configs describe.

gcloud network-security backend-authentication-configs describe MI_BACKEND_AUTHENTICATION_CONFIG_ID \
    --location=global

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

clientCertificate: projects/PROJECT_NUMBER/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
createTime: '2025-11-06T10:15:56.237734973Z'
etag: xwyxl1VYVoh4QIwf3nhKhAVXgcuOqoN7xdqAiS8Esvs
name: projects//locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd
trustConfig: projects/PROJECT_NUMBER/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
updateTime: '2025-11-06T10:16:01.964275141Z'

המשאבים clientCertificate ו-trustConfig נוצרים באופן אוטומטי על ידי זהות מנוהלת של עומס עבודה ומצורפים למשאב ההגדרה של אימות ה-Backend.

המאפיין clientCertificate שמתחיל בתחילית mi נקרא MI_CLIENT_CERTIFICATE_ID בקטע הבא.

המאפיין trustConfig שמתחיל בתחילית mi נקרא MI_TRUST_CONFIG_ID בקטע הבא.

אימות האישור ב-Certificate Manager כאישור זהות מנוהל

כדי לראות את הפרטים של אישור הזהות המנוהלת של Certificate Manager, משתמשים בפקודה gcloud certificate-manager certificates describe.

gcloud certificate-manager certificates describe MI_CLIENT_CERTIFICATE_ID

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

createTime: '2025-11-06T10:15:46.187892797Z'
expireTime: '2025-11-07T22:55:47Z'
extendedKeyUsage:
  clientAuth: true
managedIdentity:
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
  state: ACTIVE
name: projects/PROJECT_ID/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----
scope: CLIENT_AUTH
updateTime: '2025-11-06T10:15:49.427339950Z'
usedBy:
- name: //networksecurity.googleapis.com/projects/PROJECT_NUMBER/locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd

הפלט הזה כולל את הערכים הבאים:

  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
  • PROJECT_NUMBER: מספר הפרויקט
  • NAMESPACE_ID: מזהה מרחב השמות
  • MANAGED_IDENTITY_ID: המזהה של הזהות המנוהלת
  • CERTIFICATE_MATERIAL: ה-X.509-SVID בפורמט מקודד PEM

לאישור הזהות המנוהלת של Certificate Manager יש מאפיין managedIdentity שמזהה אותו כאישור של זהות מנוהלת. משאב האישור של הזהות המנוהלת ב-Certificate Manager שומר את ה-X.509-SVID בפורמט בקידוד PEM.

ההיקף של אישור הזהות המנוהל של Certificate Manager הוא CLIENT_AUTH, מה שמציין שהאישור הזה משמש כאישור לקוח ב-mTLS של קצה עורפי.

מוודאים שמזהה SPIFFE הוא חלק מ-SAN ב-X.509-SVID

ה-X.509-SVID מכיל את מזהה SPIFFE שמקודד כ-URI בשדה SAN. מזהה ה-SPIFFE הזה תואם לזהות המנוהלת במאגר הזהויות של עומסי העבודה.

כדי להדפיס את האישור בפורמט שנוח לקריאה, מריצים את הפקודה הבאה:

openssl x509 -text -noout \
<<< "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----"

הפלט אמור להיראות כך (גרסה מקוצרת):

Certificate:
    Data:
        Version: 3 (0x2)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: O = example.com, CN = Example CA
        Validity
            Not Before: Nov  6 10:15:48 2025 GMT
            Not After : Nov  7 10:15:47 2025 GMT
        Subject:
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
        X509v3 extensions:
            X509v3 Subject Alternative Name: critical
                URI:spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

הפלט הזה כולל את הערכים הבאים:

  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
  • PROJECT_NUMBER: מספר הפרויקט
  • NAMESPACE_ID: מזהה מרחב השמות
  • MANAGED_IDENTITY_ID: המזהה של הזהות המנוהלת

מוודאים שהגדרת המהימנות של Certificate Manager מכילה את השדה spiffeTrustStore

הגדרת האמון של Certificate Manager מכילה שדה בשם spiffeTrustStores. השדה spiffeTrustStores מכיל את חבילת האמון שמשויכת לדומיין האמון של מאגר הזהויות של עומס העבודה (מיוצג על ידי WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog בפלט) וכל חבילות אמון נוספות שצוינו בשדה additionalTrustBundles בתצורת האמון המוטבעת של מאגר הזהויות של עומס העבודה.

כדי לראות את הפרטים של הגדרת האמון של Certificate Manager, משתמשים בפקודה gcloud certificate-manager trust-configs describe.

gcloud certificate-manager certificates describe MI_TRUST_CONFIG_ID

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

בדוגמה הבאה של הפלט, המארח example.com הוא דומיין האמון הנוסף שאליו מורחב האמון.

createTime: '2025-11-06T10:15:50.048030758Z'
etag: kDoKfm5W6Il2HPvduKZWpuYpyrKrNVq4jqMEICE-6rQ
name: projects/PROJECT_ID/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
spiffeTrustStores:
  example.com:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----
  WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----
updateTime: '2025-11-07T08:25:15.760754841Z'

הפלט הזה כולל את הערכים הבאים:

  • PROJECT_ID: מזהה הפרויקט
  • CERTIFICATE_MATERIAL: אישור CA בפורמט PEM שמהימן להנפקת אישורים בדומיין המהימן
  • WORKLOAD_IDENTITY_POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה
  • PROJECT_NUMBER: מספר הפרויקט
  • MANAGED_IDENTITY_ID: המזהה של הזהות המנוהלת

מידע נוסף על הגדרת אמון ב-Certificate Manager זמין במאמר הגדרת אמון ב-Certificate Manager.

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