הגדרת אבטחת תעבורה
כדי לאבטח את תעבורת הנתונים בין שירותים ב-Cloud Service Mesh באמצעות ממשקי ה-API של Istio, אתם יכולים לאכוף Mutual TLS (mTLS) מחמיר. בעומסי עבודה של Kubernetes, mTLS אוטומטי מופעל כברירת מחדל: שרתי proxy של קובצי עזר חיצוניים בצד הלקוח שולחים באופן אוטומטי תעבורת נתונים של mTLS לקובצי עזר חיצוניים, אבל שירותי היעד עדיין מקבלים גם טקסט פשוט וגם בקשות מוצפנות.
כללי המדיניות של PeerAuthentication מאפשרים להגביל את השירותים כך שיקבלו רק mTLS. אפשר להחיל מדיניות על כל רשת השירות, על מרחב שמות ספציפי או על עומס עבודה מסוים.
בקטע תכונות נתמכות מפורטים השדות שנתמכים בפלטפורמות השונות.
הפעלת Mutual TLS לכל מרחב שמות
כדי להפעיל mTLS לכל עומסי העבודה במרחב שמות מסוים, משתמשים במדיניות אימות ברמת מרחב השמות. מציינים את מרחב השמות שהיא חלה עליו בקטע metadata.
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "NAMESPACE"
spec:
mtls:
mode: STRICT
EOF
הפלט אמור להיראות כך:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
הפעלת פרוטוקול TLS הדדי (mTLS) לכל עומס עבודה
כדי להגדיר מדיניות PeerAuthentication לעומס עבודה ספציפי, צריך להגדיר את הקטע selector ולציין את התוויות שתואמות לעומס העבודה המטורגט.
עם זאת, Cloud Service Mesh לא יכול לצבור כללי מדיניות ברמת עומס העבודה לתנועה יוצאת של mTLS לשירות. כדי לנהל את ההתנהגות הזו, צריך להגדיר כלל יעד.
מחילים מדיניות אימות על עומס עבודה ספציפי במרחב השמות:
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "AUTH_POLICY_NAME" namespace: "NAMESPACE" spec: selector: matchLabels: app: WORKLOAD mtls: mode: STRICT EOFהפלט אמור להיראות כך:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
מגדירים כלל תואם ליעד:
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "networking.istio.io/v1alpha3" kind: "DestinationRule" metadata: name: "DEST_RULE_NAME" spec: host: "WORKLOAD.NAMESPACE.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL EOFהפלט אמור להיראות כך:
destinationrule.networking.istio.io/WORKLOAD created
אכיפת mTLS בכל הרשת
כדי למנוע מכל השירותים ברשת לקבל תנועה בטקסט פשוט, מגדירים מדיניות PeerAuthentication ברמת הרשת, כשמצב mTLS מוגדר ל-STRICT (ברירת המחדל היא PERMISSIVE). למדיניות PeerAuthentication ברמת הרשת לא צריך להיות בורר, וצריך להחיל אותה במרחב השמות הבסיסי, istio-system. כשפורסים את המדיניות, מישור הבקרה מקצה באופן אוטומטי אישורי TLS כדי שעומסי העבודה יוכלו לאמת זה את זה.
כדי לאכוף mTLS בכל הרשת:
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
EOF
הפלט אמור להיראות כך:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
השבתת mTLS ל-CSM מנוהל
ב-Cloud Service Mesh אין תמיכה בערך mtls.mode: DISABLE במשאב PeerAuthentication.
כדי להשבית את mTLS ב-Cloud Service Mesh, צריך להגדיר באופן מפורש את ההתנהגות של הלקוח בהתאם לדרישות של השרת באמצעות ה-API של DestinationRule.
סקירה כללית של המושגים
- בצד השרת: משתמשים במשאב
PeerAuthenticationכדי להגדיר את ערך ברירת המחדל של שרת ה-Proxy בצד השרת. - גישה בצד הלקוח: משתמשים במשאב
DestinationRuleכדי להורות במפורש לשרתי ה-proxy בצד הלקוח להשתמש בטקסט פשוט בזמן התקשורת עם השרת הספציפי הזה.
דוגמאות
שלב 1: הגדרת PeerAuthentication
בדוגמה הזו נשתמש במדיניות ברירת המחדל PERMISSIVE, ולכן לא צריך להגדיר את המדיניות באופן מפורש.
שלב 2: הגדרת DestinationRule בצד הלקוח
ההגדרה הזו מורה ללקוחות להשתמש בטקסט פשוט כשהם קוראים ל-httpbin.
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: "DEST_RULE_NAME"
namespace: sample-namespace
spec:
host: "WORKLOAD.NAMESPACE.svc.cluster.local"
trafficPolicy:
tls:
mode: DISABLE
חיפוש ומחיקה של כללי מדיניות של PeerAuthentication
כדי להציג רשימה של כל כללי המדיניות של PeerAuthentication ב-Service mesh:
kubectl get peerauthentication --all-namespaces
אם יש מדיניות PeerAuthentication בתוקף, אפשר למחוק אותה באמצעות kubectl delete:
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME