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

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

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

הגדרת מאזן העומסים

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

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

כדי ליצור מדיניות הרשאות, יוצרים קובץ YAML שמגדיר את היעד והכללים, ואז מייבאים את הקובץ באמצעות הפקודה gcloud network-security authz-policies.

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

מידע נוסף על יצירת מדיניות הרשאות ל-Agent Gateway שמקצה הרשאות באמצעות Service Extensions זמין במאמר בנושא הקצאת הרשאות באמצעות Service Extensions.

מידע נוסף על יצירת מדיניות הרשאות ל-Secure Web Proxy זמין במאמר הגדרת מדיניות הרשאות ל-Secure Web Proxy.

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

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

דחיית בקשות על סמך טווחי כתובות IP

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

גלובליים ובין-אזוריים

  1. מגדירים את מדיניות ההרשאות בקובץ YAML.

    בדוגמה הבאה נוצר קובץ authz-policy-deny.yaml לכלל ההעברה LB_FORWARDING_RULE במיקום global. המדיניות הזו מונעת מלקוחות עם כתובות IP בטווח 10.0.0.0/24 לגשת לנתיב כתובת ה-URL /api/payments.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
    - to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים גלובליים חיצוניים של אפליקציות, מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים של אפליקציות (ALB) שפועלים בכמה אזורים, צריך להגדיר את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  2. כדי ליצור את מדיניות ההרשאות, מייבאים את קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

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

אזורי

  1. מגדירים את מדיניות ההרשאות בקובץ YAML.

    בדוגמה הבאה נוצר קובץ authz-policy-deny.yaml לכלל ההעברה LB_FORWARDING_RULE באזורGoogle Cloud . המדיניות הזו מונעת מלקוחות עם כתובות IP בטווח 10.0.0.0/24 לגשת לנתיב כתובת ה-URL /api/payments.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
    - to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים חיצוניים אזוריים של אפליקציות, מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים אזוריים של אפליקציות, מגדירים את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  2. כדי ליצור את מדיניות ההרשאות, מייבאים את קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

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

דחיית בקשות על סמך עקרונות של אישורי לקוח

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

גלובליים ובין-אזוריים

  1. מגדירים את מדיניות ההרשאות בקובץ YAML.

    בדוגמה הבאה נוצר קובץ authz-policy-deny.yaml לכלל ההעברה LB_FORWARDING_RULE במיקום global.המדיניות דוחה את הגישה לנתיב כתובת ה-URL‏ /api/payments ללקוחות שיש להם www.example.com בשמות החלופיים (SAN) של שמות ה-DNS של אישורי הלקוח שלהם.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים גלובליים חיצוניים של אפליקציות, מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים של אפליקציות (ALB) שפועלים בכמה אזורים, צריך להגדיר את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  2. כדי ליצור את מדיניות ההרשאות, מייבאים את קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

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

אזורי

  1. מגדירים את מדיניות ההרשאות בקובץ YAML.

    בדוגמה הבאה נוצר קובץ authz-policy-deny.yaml לכלל ההעברה LB_FORWARDING_RULE באזורGoogle Cloud . המדיניות הזו מונעת גישה לנתיב כתובת ה-URL‏ /api/payments ללקוחות ששם ה-DNS של אישור הלקוח שלהם מכיל את www.example.com.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים חיצוניים אזוריים של אפליקציות (ALB), מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים אזוריים של אפליקציות, מגדירים את הסכמה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LOCATION: האזור שלכם ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  2. כדי ליצור את מדיניות ההרשאות, מייבאים את קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

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

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

גלובליים ובין-אזוריים

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

  1. מגדירים את מדיניות ההרשאות בקובץ YAML.

    בדוגמה הבאה נוצר קובץ authz-policy-allow.yaml לכלל ההעברה LB_FORWARDING_RULE במיקום global. המדיניות מאפשרת ללקוחות עם כתובות IP בטווח 10.0.0.0/24 לגשת לנתיב כתובת ה-URL‏ /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים גלובליים חיצוניים של אפליקציות, מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים של אפליקציות (ALB) שפועלים בכמה אזורים, צריך להגדיר את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  2. כדי ליצור את מדיניות ההרשאות, מייבאים את קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

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

אזורי

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

  1. מגדירים את מדיניות ההרשאות בקובץ YAML.

    בדוגמה הבאה נוצר קובץ authz-policy-allow.yaml לכלל ההעברה LB_FORWARDING_RULE באזור Google Cloud ספציפי. המדיניות מאפשרת ללקוחות עם כתובות IP בטווח 10.0.0.0/24 לגשת לנתיב כתובת ה-URL‏ /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים חיצוניים אזוריים של אפליקציות (ALB), מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים אזוריים של אפליקציות, מגדירים את הסכמה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LOCATION: האזור שלכם ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  2. כדי ליצור את מדיניות ההרשאות, מייבאים את קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=LOCATION
    

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

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

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

חשבון שירות

  1. מגדירים את מדיניות ההרשאות בקובץ YAML.

    בדוגמה הבאה נוצר קובץ authz-policy-deny.yaml לכלל ההעברה LB_FORWARDING_RULE של מאזן עומסים פנימי אזורי של אפליקציות. המדיניות מוגדרת כך שהיא דוחה בקשות ממשאב Google Cloud , כמו מכונה וירטואלית ב-Compute Engine, עם חשבון השירות my-sa-123@PROJECT_ID.iam.gserviceaccount.com, להגיע לנתיב /api/payments.

    cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - resources:
           - iamServiceAccount:
               exact: "my-sa-123@PROJECT_ID.iam.gserviceaccount.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. למאזני עומסים פנימיים של אפליקציות (ALB) אזוריים ולמאזני עומסים פנימיים של אפליקציות (ALB) חוצי-אזורים, מגדירים את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LOCATION: האזור שלכם ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  2. כדי ליצור את מדיניות ההרשאות, מייבאים את קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

    מחליפים את LOCATION באזור Google Cloud .

תג

  1. מגדירים את מדיניות ההרשאות בקובץ YAML.

    בדוגמה הבאה נוצר קובץ authz-policy-allow.yaml עבור כלל ההעברה LB_FORWARDING_RULE של מאזן עומסים פנימי אזורי של אפליקציות. המדיניות מאפשרת רק בקשות שמקורן במשאב Google Cloud , כמו מכונה וירטואלית של Compute Engine, עם ערך תג מאובטח TAG_VALUE_PERMANENT_ID, לגשת לנתיב כתובת ה-URL /api/payments.

    cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
      sources:
        resources:
        - tagValueIdSet:
          - ids: "TAG_VALUE_PERMANENT_ID"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. למאזני עומסים פנימיים של אפליקציות (ALB) אזוריים ולמאזני עומסים פנימיים של אפליקציות (ALB) חוצי-אזורים, מגדירים את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LOCATION: האזור שלכם ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
    • ‫TAG_VALUE_PERMANENT_ID: המזהה הקבוע של ערך התג.
  2. כדי ליצור את מדיניות ההרשאות, מייבאים את קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=LOCATION
    

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

    • ‫LOCATION: האזור שלכם ב- Google Cloud .

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

בדוגמאות שבקטע הזה נוצרת מדיניות הרשאות שמקצה את ההחלטות בנוגע להרשאות לשירותים הבאים באמצעות Service Extensions:

העברת ההחלטה לגבי הרשאה לשירות שמנוהל על ידי משתמש

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

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

  • במאזני עומסים אזוריים, תוסף ההרשאה יכול לפעול גם בשירות קצה עורפי Google Cloud שמנוהל על ידי המשתמש וגם בשירות שמבוסס על FQDN.

ההגדרה בדוגמה הזו מניחה שיצרתם שירות קצה עורפי מנוהל על ידי משתמש Google Cloud , שנקרא גם שירות קצה עורפי של קריאה חיצונית, בשם authz-service. מידע נוסף על יצירת שירות כזה זמין במאמר הגדרת שירות לקצה העורפי של קריאות ל-API בניהול משתמשים.

במקרה של שירות שמבוסס על FQDN, ההגדרה לדוגמה הזו מניחה שהשירות המותאם אישית פרוס ב-VPC שלכם, תומך בפרוטוקול ext_authz ונגיש באמצעות שם הדומיין שמוגדר במלואו mycustomauthz.internal.net.

גלובליים ובין-אזוריים

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

  1. מגדירים את תוסף ההרשאה בקובץ YAML. תוסף ההרשאות פועל בשירות קצה עורפי (authz-service) ותומך בפרוטוקול ext_authz.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    
  2. כדי ליצור את תוסף ההרשאה, מייבאים את קובץ ה-YAML של תוסף ההרשאה באמצעות הפקודה gcloud service-extensions authz-extensions import.

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

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים גלובליים חיצוניים של אפליקציות (ALB), מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים של אפליקציות (ALB) שפועלים בכמה אזורים, צריך להגדיר את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  3. מגדירים את מדיניות ההרשאות בקובץ YAML. מדיניות ההרשאות מעבירה את ההרשאה לתוסף ההרשאות בשדה customProvider.

    המדיניות קוראת לתוסף ההרשאות my-authz-ext לכל התנועה לנתיב כתובת ה-URL example.com/api/payments כשהבקשה מכילה כותרת Authorization לא ריקה.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - to:
        operations:
        - hosts:
          - exact: "example.com"
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים גלובליים חיצוניים של אפליקציות (ALB), מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים של אפליקציות (ALB) שפועלים בכמה אזורים, צריך להגדיר את הסכמה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  4. יוצרים את מדיניות ההרשאות על ידי ייבוא קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

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

אזורי

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

  1. מגדירים את תוסף ההרשאה בקובץ YAML. תוסף ההרשאה יכול לפעול בשירות קצה עורפי או בשירות שמבוסס על שם דומיין מלא (FQDN).

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: BACKEND_SERVICE_URI_OR_FQDN
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים חיצוניים אזוריים של אפליקציות, מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים אזוריים של אפליקציות, מגדירים את הסכימה ל-INTERNAL_MANAGED.
    • ‫BACKEND_SERVICE_URI_OR_FQDN: השירות יכול להיות אחד מהשירותים הבאים:
      • כתובת URI של משאב שירות לקצה עורפי אזורי, בפורמט https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/backendServices/authz-service.
      • שם דומיין שמוגדר במלואו (לדוגמה, mycustomauthz.extension.net) שאפשר לפענח אותו באמצעות Cloud DNS.
  2. כדי ליצור את תוסף ההרשאה, מייבאים את קובץ ה-YAML של תוסף ההרשאה באמצעות הפקודה gcloud service-extensions authz-extensions import.

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

    מחליפים את LOCATION ב Google Cloudהאזור שבו מוגדר שירות הקצה העורפי של ההפניה.

  3. מגדירים את מדיניות ההרשאות בקובץ YAML. מדיניות ההרשאות מעבירה את ההרשאה לתוסף ההרשאות בשדה customProvider.

    המדיניות קוראת לתוסף ההרשאה my-authz-ext לכל התנועה בנתיב כתובת ה-URL example.com/api/payments כשהבקשה מכילה כותרת Authorization לא ריקה.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - to:
        operations:
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים חיצוניים אזוריים של אפליקציות, מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים אזוריים של אפליקציות, מגדירים את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LOCATION: Google Cloud האזור.
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  4. יוצרים את מדיניות ההרשאה על ידי ייבוא של קובץ ה-YAML של מדיניות ההרשאה באמצעות הפקודה gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=LOCATION
    

    מחליפים את LOCATION ב Google Cloudאזור שבו מוגדר מאזן העומסים.

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

העברת ההחלטה לגבי הרשאה ל-Model Armor

אתם יכולים להגדיר מדיניות הרשאות כדי להעביר את ההחלטה לגבי הרשאות ל-Model Armor.

לפני שמתחילים, צריך ליצור תבנית של Model Armor. בהגדרה לדוגמה הזו, מדיניות ההרשאות מפנה לתוסף הרשאות, שבתורו מפנה ל-Model Armor.

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

אזורי

  1. מגדירים את תוסף ההרשאה בקובץ YAML. נקודות ההרחבה של ההרשאה מצביעות על תבניות של בקשות ותגובות של הגנה מוגברת על המודל.

    cat >authz-extension.yaml <<EOF
    name: my-authz-extension
    loadBalancingScheme: INTERNAL_MANAGED
    service: modelarmor.LOCATION.rep.googleapis.com
    metadata:
      model_armor_settings: '[
        {
        "response_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID",
        "request_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID"
        }
      ]'
    failOpen: true
    EOF
    

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

    • ‫LOCATION: המיקום של התבנית
    • ‫PROJECT_ID: המזהה של הפרויקט שאליו שייך התבנית
    • ‫RESPONSE_TEMPLATE_ID: המזהה של תבנית התגובה
    • ‫REQUEST_TEMPLATE_ID: המזהה של תבנית הבקשה
  2. כדי ליצור את תוסף ההרשאה, מייבאים את קובץ ה-YAML של תוסף ההרשאה באמצעות הפקודה gcloud beta service-extensions authz-extensions import.

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

    מחליפים את LOCATION ב Google Cloudאזור שבו נמצא מאזן העומסים.

  3. מגדירים את מדיניות ההרשאות בקובץ YAML. מדיניות ההרשאות מעבירה את ההרשאה לתוסף ההרשאות בשדה customProvider.

    הערך של policyProfile הוא CONTENT_AUTHZ.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: INTERNAL_MANAGED
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: CONTENT_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

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

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LOCATION: Google Cloud האזור.
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  4. יוצרים את מדיניות ההרשאה על ידי ייבוא של קובץ ה-YAML של מדיניות ההרשאה באמצעות הפקודה gcloud beta network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
      --source=authz-policy-custom.yaml \
      --location=LOCATION
    

    מחליפים את LOCATION ב Google Cloudאזור שבו מוגדר מאזן העומסים.

העברת סמכות ההחלטה לגבי הרשאה לשרת proxy לאימות זהויות (IAP)

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

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

גלובליים ובין-אזוריים

בדוגמה הבאה, כל החלטות ההרשאה מועברות ל-IAP לכל הבקשות שמגיעות מבלוק כתובות ה-IP‏ 10.0.0.0/24. אם הבקשות מגיעות מכתובת IP מחוץ ל-10.0.0.0/24, הן לא תואמות למדיניות הזו ולא נבדקות על ידי IAP במסגרת הכלל הספציפי הזה.

  1. מגדירים את מדיניות ההרשאות בקובץ YAML. מדיניות ההרשאות מעבירה את ההרשאה ל-IAP דרך השדה customProvider.

    cat >authz-policy-iap.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
      - from:
          sources:
          - ipBlock:
            - prefix: "10.0.0.0"
              length: 24
    action: CUSTOM
    customProvider:
      cloudIap: {}
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים גלובליים חיצוניים של אפליקציות, מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים של אפליקציות (ALB) שפועלים בכמה אזורים, צריך להגדיר את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  2. יוצרים את מדיניות ההרשאות על ידי ייבוא קובץ ה-YAML של מדיניות ההרשאות באמצעות הפקודה gcloud network-security authz-policies import.

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

אזורי

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

  1. מגדירים את תוסף ההרשאה בקובץ YAML. נקודות ההרחבה של ההרשאה מפנות אל IAP.

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    loadBalancingScheme: LB_SCHEME
    service: iap.googleapis.com
    failOpen: false
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים חיצוניים אזוריים של אפליקציות, מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים אזוריים של אפליקציות, מגדירים את הסכימה ל-INTERNAL_MANAGED.
  2. כדי ליצור את תוסף ההרשאה, מייבאים את קובץ ה-YAML של תוסף ההרשאה באמצעות הפקודה gcloud service-extensions authz-extensions import.

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

    מחליפים את LOCATION ב Google Cloudהאזור שבו מוגדר תוסף ההרשאה.

  3. מגדירים את מדיניות ההרשאות בקובץ YAML. מדיניות ההרשאות מעבירה את ההרשאה לתוסף ההרשאות בשדה customProvider.

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: REQUEST_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

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

    • ‫LB_SCHEME: סכמת איזון העומסים. במאזני עומסים חיצוניים אזוריים של אפליקציות, מגדירים את הסכימה ל-EXTERNAL_MANAGED. במאזני עומסים פנימיים אזוריים של אפליקציות, מגדירים את הסכימה ל-INTERNAL_MANAGED.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫LOCATION: Google Cloud האזור.
    • ‫LB_FORWARDING_RULE: השם של כלל ההעברה של מאזן העומסים.
  4. יוצרים את מדיניות ההרשאה על ידי ייבוא של קובץ ה-YAML של מדיניות ההרשאה באמצעות הפקודה gcloud network-security authz-policies import.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=LOCATION
    

    מחליפים את LOCATION ב Google Cloudאזור שבו מוגדר מאזן העומסים.

הסבר על יומנים של מדיניות הרשאות ב-Cloud Logging

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

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

אם בקשה לא תואמת למדיניות ALLOW או למדיניות DENY, מדיניות DENY מאשרת את הבקשה ומתעדת אותה כ-allowed_as_no_deny_policies_matched_request. לעומת זאת, מדיניות ALLOW דוחה את הבקשה ומתעדת אותה כdenied_as_no_allow_policies_matched_request. הבקשה נדחית כי אחת מהמדיניות דוחה אותה.

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

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          statusDetails: "denied_by_authz_policy"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • אם אתם משתמשים במאזן עומסים פנימי אזורי של אפליקציות (ALB), במאזן עומסים חיצוני אזורי של אפליקציות (ALB) או במאזן עומסים פנימי של אפליקציות (ALB) בין אזורים, הערך של proxyStatus ביומן הוא error=\"http_request_error\"; details=\"denied_by_authz_policy\". מקרה לדוגמה:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

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

כשבקשה תואמת למדיניות DENY, היא נדחית והמדיניות שגרמה לדחייה מתועדת.

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

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/global/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
          statusDetails: "denied_by_authz_policy"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • אם אתם משתמשים במאזן עומסים פנימי אזורי של אפליקציות (ALB), במאזן עומסים חיצוני אזורי של אפליקציות (ALB) או במאזן עומסים פנימי חוצה אזורים של אפליקציות (ALB), הערך של proxyStatus מוגדר כ-error=\"http_request_error\"; details=\"denied_by_authz_policy\" והשם של המדיניות מתועד ב-policies. מקרה לדוגמה:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

הבקשה לא תואמת למדיניות בנושא DENY, אבל תואמת למדיניות בנושא ALLOW

אם בקשה לא תואמת למדיניות DENY, אבל תואמת למדיניות ALLOW, הבקשה תאושר. ביומן, הפעולה הזו מתועדת כ-allowed_as_no_deny_policies_matched_request עבור מדיניות DENY. המדיניות שאפשרה את הבקשה מתועדת גם היא.

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

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/global/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • אם אתם משתמשים במאזן עומסים פנימי אזורי של אפליקציות (ALB), במאזן עומסים חיצוני אזורי של אפליקציות (ALB) או במאזן עומסים פנימי של אפליקציות (ALB) שפועל בכמה אזורים, לא מופיע השדה proxyStatus ביומן. המדיניות שאפשרה את הבקשה מתועדת גם ב-policies. דוגמה:

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

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