בדף הזה מוסבר איך ליצור כללי מדיניות הרשאה ב-Ambient Networking.
דרישות מוקדמות
כדי לבצע את השלבים שבמסמך הזה, אתם צריכים לעמוד בתנאים הבאים:
- אשכול GKE פעיל עם רשתות סביבתיות של Cloud Service Mesh.
- מרחב שמות שרשום ל-Ambient Networking (לדוגמה,
ambient-test) עם עומסי עבודה לדוגמה של לקוח ושרת. - הפעלה של Mutual TLS (mTLS) בין עומסי העבודה של הלקוח והשרת באמצעות
GCPServerTLSPolicy(עםmtlsMode: Strict) ו-GCPClientTLSPolicy. כדי לחלץ את זהות ה-SPIFFE של הלקוח, כלליGCPAuthzPolicyמבוססי-זהות שתואמים ל-CLIENT_CERT_URI_SANדורשים mTLS פעיל.
במאמר הכנת Ambient Networking ב-GKE מוסבר איך להגדיר את הסביבה.
מדיניות דחייה כברירת מחדל
כברירת מחדל, ה-API של מדיניות ההרשאות של GKE Ambient מאפשר את כל התנועה, אלא אם היא מוגבלת על ידי המדיניות, בהתאם להתנהגות הרגילה של NetworkPolicy ב-Kubernetes.
הפעולה DENY_BY_DEFAULT מאפשרת לשנות את פעולת ברירת המחדל הזו. כשמחילים את המדיניות הזו על מרחב שמות, היא חוסמת את כל התנועה לעומסי העבודה במרחב השמות הזה, אלא אם היא מותרת במפורש על ידי מדיניות ALLOW.
בדף הזה מוסבר איך להגדיר את DENY_BY_DEFAULT ב-Cloud Service Mesh ולהשתמש בו כדי ליצור מצב אבטחה כברירת מחדל לעומסי העבודה.
מגבלות
לפני שמחילים מדיניות DENY_BY_DEFAULT, חשוב לשים לב למגבלות הבאות:
- אפשר ליצור רק מדיניות
DENY_BY_DEFAULTאחת לכל מרחב שמות. - במדיניות עם הפעולה
DENY_BY_DEFAULTאי אפשר להגדיר כללים. - אפשר להשתמש בפעולה הזו כדי להגדיר את
matchLabels: {}כבסיס לכל מרחב השמות, כדי לטרגט את כל ה-Pods. אי אפשר להשתמש ב-DENY_BY_DEFAULTלהגבלות לכל Pod.
הגדרת מדיניות הרשאה שדוחה כברירת מחדל
כדי להגדיר קו בסיס של דחייה כברירת מחדל במרחב שמות, ולאפשר גישה באופן סלקטיבי לעומסי עבודה ספציפיים:
יוצרים
GCPAuthzPolicyעם הפעולהDENY_BY_DEFAULTומחילים אותו על מרחב השמות.cat <<EOF > deny-by-default-policy.yaml && kubectl apply -f deny-by-default-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: deny-by-default-authz namespace: ambient-test spec: action: DENY_BY_DEFAULT enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: {} EOFהפלט אמור להיראות כך:
gcpauthzpolicy.networking.gke.io/deny-by-default-authz createdכברירת מחדל, המדיניות הזו חוסמת את כל תעבורת הנתונים הנכנסת (מזרח-מערב ו-ingress) לעומסי העבודה במרחב השמות
ambient-test. היא לא מגבילה את תעבורת הנתונים היוצאת שמקורה בעומסי עבודה במרחב השמות.כדי לאפשר תנועה באופן סלקטיבי, יוצרים ומחילים מדיניות
ALLOW:cat <<EOF > allow-policy.yaml && kubectl apply -f allow-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: allow-client-to-server namespace: ambient-test spec: action: ALLOW enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: app: server rules: - from: sources: - principals: - principalSelector: CLIENT_CERT_URI_SAN principal: type: Exact value: spiffe://PROJECT_ID.s3ns.svc.id.goog/ns/ambient-test/sa/client EOFמחליפים את PROJECT_ID במזהה הפרויקט.
הפצת המדיניות יכולה להימשך עד שלוש דקות אחרי שהבקר מקבל אותה. ממתינים שלוש דקות לפני שממשיכים.
בודקים את הקישוריות מהלקוח לשרת. היא אמורה להצליח כי היא תואמת למדיניות
ALLOW.kubectl exec -it deploy/client -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.localבודקים את הקישוריות מהשרת לעצמו (או לכל עומס עבודה אחר בלי מדיניות הרשאה מפורשת). הפעולה אמורה להיכשל בגלל המדיניות
DENY_BY_DEFAULT.kubectl exec -it deploy/server -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.localהפלט אמור להיראות כך:
curl: (52) Empty reply from server.
רישום ביומן
כשבקשה נדחית על ידי מדיניות הרשאה, שרת ה-proxy של הצומת כותב רשומה ביומן הגישה ב-Cloud Logging, בשם היומן gke-ambient-node-proxy-accesslog. הרשומה מכילה את השדה הבא ב-payload של ה-JSON:
jsonPayload.error_details:- rbac_access_denied_matched_policy[none]
אתם יכולים להשתמש ב-Logs Explorer במסוף Cloud de Confiance כדי להציג את הרשומות ביומן הגישה של החיבורים שנדחו:
resource.type="k8s_container"
logName="projects/PROJECT_ID/logs/gke-ambient-node-proxy-accesslog"
jsonPayload.error_details=~"rbac_access_denied"
מידע נוסף זמין במאמר אימות שהתנועה מאומתת ומורשית.
כללי מדיניות אבטחה של תעבורת נתונים יוצאת (egress)
כדי לבדוק ולשלוט בתנועה יוצאת מעומסי עבודה של Ambient Networking לנקודות קצה חיצוניות או לאינטרנט, אתם יכולים לנתב את התנועה היוצאת דרך Secure Web Proxy (SWP).
הוראות להגדרת המשאבים GCPBackend ו-GCPEgressPolicy מופיעות במאמר ניתוב תעבורת נתונים יוצאת (egress) בסביבה דרך Secure Web Proxy.