Policy Controller כולל ספריית ברירת מחדל של תבניות הגבלות שאפשר להשתמש בהן עם חבילת האבטחה של Cloud Service Mesh כדי לבדוק את התאימות של נקודות החולשה באבטחת הרשת והשיטות המומלצות.
בדף הזה מוסבר איך להחיל חבילת מדיניות באופן ידני. אפשרות אחרת היא להחיל חבילות מדיניות ישירות.
חבילת האילוצים הזו מתייחסת למדיניות בתחומים הבאים ואוכפת אותה:
- אכיפת תעבורת mTLS ב-Cloud Service Mesh
- שיטות מומלצות לשימוש ב-AuthorizationPolicy ב-Cloud Service Mesh
- אכיפת אבטחת עומסי עבודה ב-Cloud Service Mesh
אילוצים של חבילת מדיניות ב-Cloud Service Mesh
| שם המגבלה | תיאור המגבלה | מזהה הבקרה |
|---|---|---|
| asm-policy-v0.0.1-asm-ingressgateway-label | אכיפת השימוש בתווית istio ingressgateway רק בפודים של ingressgateway | 1.1.1 |
| asm-policy-v0.0.1-asm-sidecar-injection | לאכוף הזרקה של Istio Proxy Sidecar תמיד ל-pods של עומסי עבודה | 1.1.2 |
| asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny | אכיפה של דחייה כברירת מחדל ברמת הרשת באמצעות AuthorizationPolicy | 1.2.1 |
| asm-policy-v0.0.1-asm-authz-policy-normalization | אכיפה של נורמליזציה של AuthorizationPolicy | 1.2.2 |
| asm-policy-v0.0.1-asm-authz-policy-safe-pattern | אכיפה של תבניות בטוחות של AuthorizationPolicy | 1.2.3 |
| asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls | אכיפת strict mtls PeerAuthentication ברמת ה-mesh | 1.3.1 |
| asm-policy-v0.0.1-asm-peer-authn-strict-mtls | אי אפשר להשתמש באפשרות Enforce all PeerAuthentications כדי לשנות את ההגדרה strict mtls | 1.3.2 |
| asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers | הגדרת האכיפה של jwtRules outputPayloadToHeader כך שלא יכיל כותרות ידועות של בקשות HTTP | 1.4.1 |
פרופילים של חבילות
בחבילת מדיניות האבטחה של Cloud Service Mesh, אפשר להשתמש בשני פרופילים על סמך רמת ההקפדה. רמת ההקפדה הנמוכה כוללת פחות אילוצים, ולכן היא גמישה יותר. רמת קפדנות גבוהה כוללת יותר אילוצים, ולכן מספקת בקרה מאובטחת יותר על המדיניות.
רמת הקפדה נמוכה
פרופיל עם רמת חומרה נמוכה כולל את הגבלות המדיניות הבאות:
אפשר להשתמש בתווית
istio:ingressgatewayרק ב-Pods של שער הכניסה של Istio.ב-
AuthorizationPolicy, אפשר להשתמש בשדותhostsאוnotHostsרק אם בוחרים ב-Istio ingress gateway עם התוויתistio:ingressgateway.בשדה
AuthorizationPolicy, כשמשתמשים בשדותmethodsאוnotMethods, הערכים חייבים להיות אותיות גדולות.ב-
AuthorizationPolicy, כשמשתמשים בשדהrequest.headers, הערכים לא יכולים להכיל רווחים.ב-
AuthorizationPolicy, כשמשתמשים בשדותpathsאוnotPaths, הערכים צריכים להיות ערכים מנורמלים.
רמת קפדנות גבוהה
רמת ההקפדה הגבוהה כוללת את כל ההגבלות מרמת ההקפדה הנמוכה, וגם את ההגבלות הבאות:
אי אפשר להחיל את ההערה
sidecar.istio.io/inject: falseכדי לעקוף את הזרקת ה-proxy בכל הפודים של עומס העבודה.רמת רשת
AuthorizationPolicyשמגדירה כלל default deny נאכפת.הערך של
AuthorizationPolicyחייב להיות ALLOW-with-positive-matching או DENY-with-negative-match.ב-
AuthorizationPolicy, כשמשתמשים בשדותhostsאוnotHosts, הערכים צריכים להיות זוגות של<host-name>ו-<host-name>:*.מופעלת רמת רשת
PeerAuthenticationשמגדירה mTLS מחמיר.בכל
PeerAuthenticationברשת, מצב ה-mTLS יכול להיות רקUNSETאוSTRICT, בהתאם לmTLS קפדני.
הגדרות החבילה
| KPT setter | תיאור |
|---|---|
| strictness-level | פרופיל רמת ההקפדה של חבילת Cloud Service Mesh, האפשרויות הן Low או High (ברירת מחדל) |
לפני שמתחילים
- מתקינים ומאתחלים את Google Cloud CLI, שמספק את הפקודות
gcloudו-kubectlשמשמשות בהוראות האלה. אם אתם משתמשים ב-Cloud Shell, Google Cloud CLI מותקן מראש. - מתקינים את Policy Controller בגרסה 1.11.2 ואילך באשכול עם ספריית ברירת המחדל של תבניות אילוץ. בנוסף, צריך להפעיל תמיכה באילוצים שלמותיים, כי החבילה הזו מכילה אילוצים כאלה.
- מוודאים ש-Cloud Service Mesh מותקן באשכול.
הגדרת Policy Controller לאילוצים של הפניות
שומרים את קובץ המניפסט הבא בפורמט YAML בשם
policycontroller-config.yaml:apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "" version: "v1" kind: "Namespace" - group: "security.istio.io" version: "v1beta1" kind: "AuthorizationPolicy" - group: "security.istio.io" version: "v1beta1" kind: "PeerAuthentication"קובץ המניפסט הזה מגדיר את Policy Controller כך שיעקוב אחרי סוגים ספציפיים של אובייקטים.
החלת מניפסט
policycontroller-config.yaml:kubectl apply -f policycontroller-config.yaml
ביקורת של חבילת מדיניות ב-Cloud Service Mesh
בעזרת Policy Controller אפשר לאכוף מדיניות באשכול Kubernetes. כדי לבדוק את עומסי העבודה ואת התאימות שלהם למדיניות האבטחה של Cloud Service Mesh שמפורטת בטבלה הקודמת, אפשר לפרוס את האילוצים האלה במצב 'ביקורת' כדי לחשוף הפרות, וחשוב מכך, כדי לתת לעצמכם הזדמנות לתקן אותן לפני האכיפה באשכול Kubernetes.
אפשר להחיל את כללי המדיניות האלה עם spec.enforcementAction שמוגדר כ-dryrun באמצעות kubectl, kpt או סנכרון תצורות.
kubectl
(אופציונלי) מציגים בתצוגה מקדימה את האילוצים של המדיניות באמצעות kubectl:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
מחילים את אילוצי המדיניות באמצעות kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
הפלט שיתקבל:
asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny created asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization created asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern created asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label created asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls created asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls created asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers created asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection created
מוודאים שאילוצי המדיניות הותקנו ובודקים אם יש הפרות באשכול:
kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
הפלט אמור להיראות כך:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection dryrun 0
kpt
מתקינים ומגדירים את kpt. ההוראות האלה מתבססות על kpt כדי להתאים אישית ולפרוס משאבי Kubernetes.
מורידים את חבילת כללי מדיניות האבטחה של Cloud Service Mesh מ-GitHub באמצעות kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1
מריצים את הפונקציה
set-enforcement-actionkpt כדי להגדיר את פעולת האכיפה של המדיניות לערךdryrun:kpt fn eval asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
מריצים את פונקציית setter של kpt כדי להגדיר מדיניות אבטחה של Cloud Service Mesh בשדות ספציפיים:
kpt fn eval asm-policy-v0.0.1 --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \ strictness-level="Low"
מאתחלים את ספריית העבודה באמצעות kpt, שיוצר משאב למעקב אחרי שינויים:
cd asm-policy-v0.0.1 kpt live init
מחילים את אילוצי המדיניות באמצעות kpt:
kpt live apply
הפלט שיתקבל:
asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-authz-policy-mesh-default-deny created asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-authz-policy-normalization created asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-authz-policy-safe-pattern created asmingressgatewaylabel.constraints.gatekeeper.sh/asm-ingressgateway-label created asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-peer-authn-mesh-strict-mtls created asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-peer-authn-strict-mtls created asmsidecarinjection.constraints.gatekeeper.sh/asm-sidecar-injection created 7 resource(s) applied. 7 created, 0 unchanged, 0 configured, 0 failed
מוודאים שאילוצי המדיניות הותקנו ובודקים אם יש הפרות באשכול:
kpt live status --output table --poll-until current
הסטטוס
CURRENTמאשר שההתקנה של האילוצים בוצעה בהצלחה.
סנכרון תצורות
- מתקינים ומגדירים את kpt. ההוראות האלה מתבססות על kpt כדי להתאים אישית ולפרוס משאבי Kubernetes.
מפעילים שמשתמשים ב-סנכרון תצורות כדי לפרוס מדיניות באשכולות שלהם יכולים להשתמש בהוראות הבאות:
עוברים לספריית הסנכרון של סנכרון תצורות:
cd SYNC_ROOT_DIR
כדי ליצור או להוסיף
.gitignoreבאמצעותresourcegroup.yaml:echo resourcegroup.yaml >> .gitignore
יוצרים ספרייה ייעודית של
policies:mkdir -p policies
מורידים את חבילת כללי מדיניות האבטחה של Cloud Service Mesh מ-GitHub באמצעות kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/asm-policy-v0.0.1 policies/asm-policy-v0.0.1
מריצים את הפונקציה
set-enforcement-actionkpt כדי להגדיר את פעולת האכיפה של המדיניות לערךdryrun:kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
מריצים את פונקציית setter של kpt כדי להגדיר מדיניות אבטחה של Cloud Service Mesh בשדות ספציפיים:
kpt fn eval policies/asm-policy-v0.0.1 --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \ strictness-level="Low"
(אופציונלי) מציגים בתצוגה מקדימה את אילוצי המדיניות שייווצרו:
kpt live init policies/asm-policy-v0.0.1 kpt live apply --dry-run policies/asm-policy-v0.0.1
הפלט שיתקבל:
Dry-run strategy: client inventory update started inventory update finished apply phase started asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-mesh-default-deny apply successful asmauthzpolicynormalization.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-normalization apply successful asmauthzpolicysafepattern.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-authz-policy-safe-pattern apply successful asmingressgatewaylabel.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-ingressgateway-label apply successful asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-mesh-strict-mtls apply successful asmpeerauthnstrictmtls.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-peer-authn-strict-mtls apply successful asmrequestauthnprohibitedoutputheaders.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-request-authn-prohibited-output-headers apply successful asmsidecarinjection.constraints.gatekeeper.sh/asm-policy-v0.0.1-asm-sidecar-injection apply successful apply phase finished inventory update started inventory update finished apply result: 8 attempted, 8 successful, 0 skipped, 0 failed
אם ספריית הסנכרון של סנכרון תצורות משתמשת ב-Kustomize, מוסיפים את
policies/asm-policy-v0.0.1ל-rootkustomization.yaml. אחרת, מסירים את הקובץpolicies/asm-policy-v0.0.1/kustomization.yaml:rm SYNC_ROOT_DIR/policies/asm-policy-v0.0.1/kustomization.yaml
דחיפת השינויים למאגר סנכרון תצורות:
git add SYNC_ROOT_DIR/policies/asm-policy-v0.0.1 git commit -m 'Adding ASM security policy audit enforcement' git push
מאמתים את סטטוס ההתקנה:
watch gcloud beta container fleet config-management status --project PROJECT_ID
הסטטוס
SYNCEDמאשר שהמדיניות הותקנה.
הצגת הפרות מדיניות
אחרי שמתקינים את מגבלות המדיניות במצב ביקורת, אפשר לראות את ההפרות באשכול בממשק המשתמש באמצעות לוח הבקרה של Policy Controller.
אפשר גם להשתמש בפקודה kubectl כדי לראות את ההפרות באשכול:
kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
אם יש הפרות, אפשר לראות רשימה של הודעות ההפרה לכל אילוץ באמצעות הפקודה:
kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
שינוי פעולת האכיפה של חבילת כללי המדיניות של Cloud Service Mesh
אחרי שבודקים את הפרות המדיניות באשכול, אפשר לשנות את מצב האכיפה כך שבקרת הכניסה תפעל warn או אפילו deny תחסום החלה של משאב שלא עומד בדרישות על האשכול.
kubectl
משתמשים ב-kubectl כדי להגדיר את פעולת האכיפה של כללי המדיניות ל-
warn:kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'מוודאים שפעולת האכיפה של הגבלות המדיניות עודכנה:
kubectl get constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
kpt
מריצים את הפונקציה
set-enforcement-actionkpt כדי להגדיר את פעולת האכיפה של המדיניות לערךwarn:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
החלת אילוצי המדיניות:
kpt live apply
סנכרון תצורות
מפעילים שמשתמשים ב-סנכרון תצורות כדי לפרוס מדיניות באשכולות שלהם יכולים להשתמש בהוראות הבאות:
עוברים לספריית הסנכרון של סנכרון תצורות:
cd SYNC_ROOT_DIR
מריצים את הפונקציה
set-enforcement-actionkpt כדי להגדיר את פעולת האכיפה של המדיניות לערךwarn:kpt fn eval policies/asm-policy-v0.0.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
דחיפת השינויים למאגר סנכרון תצורות:
git add SYNC_ROOT_DIR/policies/asm-policy-v0.0.1 git commit -m 'Adding ASM security policy bundle warn enforcement' git push
מאמתים את סטטוס ההתקנה:
nomos status
האשכול צריך להציג סטטוס של
SYNCEDעם המדיניות המותקנת.
בדיקת אכיפת המדיניות
יוצרים באשכול משאב שלא עומד בדרישות באמצעות הפקודה הבאה:
cat <<EOF | kubectl apply -f -
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: non-compliant-authz-policy
spec:
action: ALLOW
rules:
- to:
- operation:
methods: ["get"]
EOF
בקרת הכניסה צריכה להפיק אזהרה עם רשימה של הפרות המדיניות שמתרחשות במשאב הזה, כמו בדוגמה הבאה:
Warning: [asm-policy-v0.0.1-asm-authz-policy-normalization] in rules-to-operation, methods or notMethods must be uppercase authorizationpolicy.security.istio.io/non-compliant-authz-policy created
הסרה של חבילת כללי מדיניות של Cloud Service Mesh
במקרה הצורך, אפשר להסיר את חבילת המדיניות של Cloud Service Mesh מהאשכול.
kubectl
משתמשים ב-kubectl כדי להסיר את כללי המדיניות:
kubectl delete constraint -l policycontroller.gke.io/bundleName=asm-policy-v0.0.1
kpt
מסירים את כללי המדיניות:
kpt live destroy
סנכרון תצורות
מפעילים שמשתמשים ב-סנכרון תצורות כדי לפרוס מדיניות באשכולות שלהם יכולים להשתמש בהוראות הבאות:
דחיפת השינויים למאגר סנכרון תצורות:
git rm -r SYNC_ROOT_DIR/policies/asm-policy-v0.0.1 git commit -m 'Removing Cloud Service Mesh policies' git push
בודקים את הסטטוס:
nomos status
האשכול אמור להציג סטטוס של
SYNCEDעם המשאבים שהוסרו.