הגדרת תוסף הרשאות

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

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

מבוא

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

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

לכל בקשת הרשאה, ה-proxy מעביר את כותרות הבקשה לתוסף. בהתאם לתגובה מהספק, ה-proxy מעביר את הבקשה או דוחה אותה.

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

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

הגדרת תוסף הרשאה בסיסי

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

gcloud

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

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

  2. מגדירים את תוסף ההרשאות.

    1. מגדירים את התוסף בקובץ YAML שמקשר אותו לשירות לקצה העורפי, authz-service. משתמשים בערכים לדוגמה שצוינו.

      cat >authz-extension.yaml <<EOF
          name: my-authz-ext
          authority: ext11.com
          loadBalancingScheme: EXTERNAL_MANAGED
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
          forwardHeaders:
            - Authorization
          failOpen: false
          timeout: "0.1s"
          forwardAttributes:
          - request.mcp_param
          - connection.client_cert_leaf
      EOF
      

      מחליפים את PROJECT_ID במזהה הפרויקט.

      מידע נוסף על השדות בקובץ ה-YAML מופיע בקטע ExtensionChain במאמרי העזרה של ה-API.

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

    2. מייבאים את תוסף ההרשאה. משתמשים בgcloud service-extensions authz-extensions import עם ערכי הדוגמה הבאים.

      gcloud service-extensions authz-extensions import my-authz-ext \
          --source=authz-extension.yaml \
          --location=global
      

      אם רוצים להגדיר את הפרוטוקול ל-ext_authz, משתמשים במקום זאת בפקודה gcloud beta service-extensions authz-extensions import.

  3. הגדרת מדיניות הרשאות באמצעות התוסף.

    1. מגדירים מדיניות הרשאות שמקשרת את התוסף my-authz-ext לכלל ההעברה fr1. משתמשים בערכים לדוגמה שצוינו. הפעולה CUSTOM מציינת שנעשה שימוש בתוסף.

      cat >authz-policy.yaml <<EOF
          name: my-authz-policy
          target:
            loadBalancingScheme: EXTERNAL_MANAGED
            resources:
              - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/fr1"
          action: CUSTOM
          customProvider:
            authzExtension:
              resources:
                - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
      EOF
      
    2. מייבאים את מדיניות ההרשאות לפרויקט. משתמשים בgcloud network-security authz-policies importפקודה עם הערכים לדוגמה הבאים.

      gcloud network-security authz-policies import my-authz-policy \
          --source=authz-policy.yaml \
          --location=global
      

הגדרת תוספי הרשאות על סמך פרופילים

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

למדיניות הרשאות לבקשות

בדוגמה הבאה מוצג אופן ההגדרה של תוסף הרשאות שמחיל מדיניות הרשאות לבקשות על כלל העברה ב-us-west1. המדיניות דורשת שהתנועה תעבור אימות TLS בו-זמני (mTLS) מנציג ספציפי לפני שניתן יהיה להגיע ליעד, example.com/mcp.

gcloud

  1. הגדרת שירות קצה עורפי של קריאה לשירות בשם lb-request-authz-service ב-us-west1 עם כלל העברה בשם fr2.

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

  2. מגדירים את תוסף ההרשאות.

    1. מגדירים את התוסף בקובץ YAML שמקשר את התוסף לשירות לקצה העורפי, lb-request-authz-service. משתמשים בערכים לדוגמה שסופקו.

      cat >lb-request-authz-extension.yaml <<EOF
      name: my-lb-request-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-request-service
      forwardHeaders:
        - Authorization
      failOpen: false
      timeout: "0.1s"
      wireFormat: EXT_AUTHZ_GRPC
      EOF
      

      מחליפים את PROJECT_ID במזהה הפרויקט.

      התוסף צריך להיות באותו אזור כמו שירות לקצה העורפי.

      כברירת מחדל, כל ההפניות לשירותים משתמשות בפרוטוקול Envoy External Processing או ext_proc. במקרה של קריאות לאימות, יש תמיכה בפרוטוקול External Authorization או ext_authz גם בגרסת Preview. כשהאפשרות wireFormat מוגדרת ל-EXT_AUTHZ_GRPC, ההדגשה משתמשת בפרוטוקול ext_authz. אם לא מציינים את האפשרות, ההפניה תשתמש בפרוטוקול ext_proc.

      במדיניות הרשאות לבקשות, הערך של wireFormat יכול להיות EXT_AUTHZ_GRPC, כך שההפניה החיצונית תשתמש בפרוטוקול ext_authz, למרות שגם פרוטוקול ext_proc נתמך.

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

    2. מייבאים את תוסף ההרשאה. משתמשים בפקודה gcloud beta service-extensions authz-extensions import עם ערכי הדוגמה הבאים.

      gcloud beta service-extensions authz-extensions import my-lb-request-authz-ext \
          --source=lb-request-authz-extension.yaml \
          --location=us-west1
      
  3. באותו פרויקט, מגדירים מדיניות הרשאות עם התוסף.

    לכל בקשה אל example.com/mcp, המדיניות דורשת אימות TLS הדדי מחשבון משתמש ספציפי, ומעבירה את החלטת ההרשאה אל תוסף ההרשאות, my-lb-authz-request-ext.

    1. מגדירים מדיניות הרשאות שמקשרת את התוסף my-lb-request-authz-ext לכלל ההעברה fr2. משתמשים בערכים לדוגמה שצוינו.

      cat >lb-request-authz-policy.yaml <<EOF
      name: my-lb-request-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr2"
      policyProfile: REQUEST_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/mcp"
        from:
          sources:
          - principals:
            - principal_selector: CLIENT_CERT_DNS_NAME_SANS
              principal:
                exact: "spiffe://p.global.123.workload.id.goog/ns/ns1/sa/hellomcp"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-request-authz-ext"
      EOF
      

      במדיניות הרשאות לבקשות, הערך של policyProfile חייב להיות REQUEST_AUTHZ. הערך הזה מציין שספק המדיניות המותאמת אישית פועל לפי בקשות לאישור או לדחייה של תנועה.

      הפעולה CUSTOM מציינת שתוסף משויך לשרת ה-proxy.

      מידע נוסף על משאב של מדיניות הרשאות מופיע בauthzPolicyמאמרי העזרה.

    2. מייבאים את מדיניות ההרשאות לפרויקט. משתמשים בgcloud beta network-security authz-policies importפקודה עם הערכים לדוגמה הבאים.

      gcloud beta network-security authz-policies import my-lb-request-authz-policy \
          --source=lb-request-authz-policy.yaml \
          --location=us-west1
      

למדיניות הרשאות לתוכן

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

gcloud

  1. הגדרת שירות קצה עורפי של קריאה לשירות בשם lb-content-authz-service ב-us-west1 עם כלל העברה בשם fr3.

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

    מגדירים את שרת התוסף עם הפרוטוקול ext_proc בFULL_DUPLEX_STREAMED מצב עיבוד גוף ותמיכה בכל האירועים.

  2. מגדירים את תוסף ההרשאות.

    1. מגדירים את התוסף בקובץ YAML שמקשר את התוסף לשירות לקצה העורפי, lb-content-authz-service. משתמשים בערכים לדוגמה שסופקו.

      cat >lb-content-authz-extension.yaml <<EOF
      name: my-lb-content-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-sdp-service
      failOpen: false
      timeout: "0.1s"
      EOF
      

      במדיניות הרשאת תוכן, הערך של policyProfile צריך להיות CONTENT_AUTHZ.

      במדיניות CONTENT_AUTHZ, אין צורך להגדיר את הערך wireFormat באופן מפורש כ-EXT_PROC_GRPC. כברירת מחדל, הבועה משתמשת בפרוטוקול ext_proc.

    2. מייבאים את תוסף ההרשאה. משתמשים בgcloud beta service-extensions authz-extensions importפקודה עם הערכים לדוגמה הבאים.

      gcloud beta service-extensions authz-extensions import my-lb-content-authz-ext \
          --source=lb-content-authz-extension.yaml \
          --location=us-west1
      
  3. הגדרת מדיניות הרשאות באמצעות התוסף.

    1. מגדירים מדיניות הרשאות שמקשרת את התוסף my-lb-content-authz-ext לכלל ההעברה fr3. משתמשים בערכי הדוגמה שצוינו.

      cat >lb-content-authz-policy.yaml <<EOF
      name: lb-content-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr3"
      policyProfile: CONTENT_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/sensitive-stuff"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-authz-content-ext"
      EOF
      

      הערך של policyProfile חייב להיות CONTENT_AUTHZ.

    2. מייבאים את מדיניות ההרשאות לפרויקט. משתמשים בgcloud beta network-security authz-policies importפקודה עם הערכים לדוגמה הבאים.

      gcloud beta network-security authz-policies import my-lb-content-authz-policy \
          --source=lb-content-authz-policy.yaml \
          --location=us-west1
      

מגבלות על תוספי הרשאות

אלה כמה מגבלות של תוספי הרשאה:

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

מידע על מגבלות שחלות על כל התוספים מופיע במאמר מגבלות על תוספים.

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