התוסף Service Extensions מאפשר למאזני עומסים של אפליקציות לשלוח קריאות לשירותי קצה עורפי כדי להוסיף עיבוד מותאם אישית לנתיב העיבוד. תוספי הרשאה פועלים בנתיב עיבוד הבקשות כשמאזן העומסים מקבל כותרות של בקשות, ואחרי שמפת URL בוחרת את שירות הקצה העורפי. בדף הזה מוסבר איך להגדיר תוספי הרשאה כדי להשתמש במנוע הרשאה מותאם אישית שמוגדר במדיניות הרשאה.
סקירה כללית על תוספים של מאזן עומסים של אפליקציות זמינה במאמר סקירה כללית על תוספים של Cloud Load Balancing.
מבוא
בעזרת Cloud Load Balancing אפשר להגדיר מדיניות הרשאות שמחילה בקרת גישה על תעבורת נתונים שנכנסת למאזני עומסים. לפעמים, אי אפשר לבטא בקלות החלטות מורכבות בנושא הרשאות באמצעות מדיניות הרשאות.
אתם יכולים להגדיר מדיניות הרשאות עם תוספי הרשאות כדי להעביר החלטות לגבי הרשאות למנועי הרשאות בהתאמה אישית. בנתיב הנתונים, הרחבות של הרשאות מופעלות אחרי הרחבות של מסלולים אבל לפני הרחבות של תנועה. מידע נוסף על מדיניות הרשאות זמין במאמר סקירה כללית על מדיניות הרשאות.
לכל בקשת הרשאה, ה-proxy מעביר את כותרות הבקשה לתוסף. בהתאם לתגובה מהספק, ה-proxy מעביר את הבקשה או דוחה אותה.
בגרסת Preview, אפשר להגדיר בנפרד תוספי הרשאה למדיניות הרשאת בקשות ולמדיניות הרשאת תוכן במאזני עומסים חיצוניים אזוריים של אפליקציות ובמאזני עומסים פנימיים אזוריים של אפליקציות. תוספים שמבוססים על מדיניות הרשאה לבקשות מוגדרים לפעול לפני תוספים שמבוססים על מדיניות הרשאה לתוכן.
מידע על המגבלות שקשורות לתוספים של מאזן עומסים של אפליקציות זמין בדף מכסות ומגבלות.
הגדרת תוסף הרשאה בסיסי
בדוגמה הבאה אפשר לראות איך מגדירים תוסף הרשאות, my-authz-ext, עם מדיניות הרשאות כדי להאציל החלטות לגבי הרשאות למאזן עומסים של אפליקציות גלובלי-חיצוני (ALB).
gcloud
יוצרים את המשאבים הנדרשים כמו שמתואר במאמר הגדרת שירות קצה עורפי של קריאה לשירות חיצוני.
לצורך התרגיל הזה, צריך ליצור מאזן עומסים גלובלי חיצוני של אפליקציות (ALB). נותנים שם לשירות
authz-serviceולכלל ההעברהfr1.מגדירים את תוסף ההרשאות.
מגדירים את התוסף בקובץ 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 מאפיינים לכל תוסף. מידע נוסף על מאפיינים נתמכים זמין במאמר מאפיינים נתמכים.מייבאים את תוסף ההרשאה. משתמשים ב
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.
הגדרת מדיניות הרשאות באמצעות התוסף.
מגדירים מדיניות הרשאות שמקשרת את התוסף
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מייבאים את מדיניות ההרשאות לפרויקט. משתמשים ב
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
הגדרת שירות קצה עורפי של קריאה לשירות בשם
lb-request-authz-serviceב-us-west1עם כלל העברה בשםfr2.בשביל השירות, מגדירים מאזן עומסים חיצוני אזורי של אפליקציות עם קצה עורפי של קבוצת מכונות וירטואליות.
מגדירים את תוסף ההרשאות.
מגדירים את התוסף בקובץ 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. אם חלף הזמן הקצוב לתגובה של התוסף או שהוא נכשל, עיבוד הבקשה נפסק. אפשרות ברירת המחדל הזו מועדפת כשנותנים עדיפות לאבטחה או לשלמות על פני זמינות.מייבאים את תוסף ההרשאה. משתמשים בפקודה
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
באותו פרויקט, מגדירים מדיניות הרשאות עם התוסף.
לכל בקשה אל
example.com/mcp, המדיניות דורשת אימות TLS הדדי מחשבון משתמש ספציפי, ומעבירה את החלטת ההרשאה אל תוסף ההרשאות,my-lb-authz-request-ext.מגדירים מדיניות הרשאות שמקשרת את התוסף
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מאמרי העזרה.מייבאים את מדיניות ההרשאות לפרויקט. משתמשים ב
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
הגדרת שירות קצה עורפי של קריאה לשירות בשם
lb-content-authz-serviceב-us-west1עם כלל העברה בשםfr3.בשביל השירות, מגדירים מאזן עומסים חיצוני אזורי של אפליקציות עם קצה עורפי של קבוצת מכונות וירטואליות.
מגדירים את שרת התוסף עם הפרוטוקול
ext_procבFULL_DUPLEX_STREAMEDמצב עיבוד גוף ותמיכה בכל האירועים.מגדירים את תוסף ההרשאות.
מגדירים את התוסף בקובץ 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.מייבאים את תוסף ההרשאה. משתמשים ב
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
הגדרת מדיניות הרשאות באמצעות התוסף.
מגדירים מדיניות הרשאות שמקשרת את התוסף
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.מייבאים את מדיניות ההרשאות לפרויקט. משתמשים ב
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
מגבלות על תוספי הרשאות
אלה כמה מגבלות של תוספי הרשאה:
- למדיניות הרשאות יכול להיות רק תוסף הרשאות אחד.
- אפשר להשתמש בכלל העברה עם כמה מדיניות הרשאות, אבל רק אחת מהן יכולה להיות מדיניות הרשאות בהתאמה אישית.
מידע על מגבלות שחלות על כל התוספים מופיע במאמר מגבלות על תוספים.
המאמרים הבאים
- אפשר לראות דוגמאות של שרתי Python ו-Go של
ext_authzו-ext_procבמאגר GitHub של Service Extensions. - הגדרת תוסף של כלל ניתוב
- הגדרת תוסף תנועה
- ניהול תוספים