Dienstsicherheit in einem proxylosen gRPC-Service Mesh in GKE einrichten
Auf dieser Seite wird beschrieben, wie Sie Sicherheitsfunktionen für ein proxyloses gRPC-Service-Mesh in GKE einrichten.
Vorbereitung
Sie sollten Folgendes bereits haben:
- Sie haben einen GKE-Cluster erstellt und ihn in einer Flotte registriert.
- xDS-fähigen gRPC-Client und ‑Dienst einrichten
Autorisierungsrichtlinien für proxylose gRPC-Dienste einrichten
In diesem Abschnitt wird beschrieben, wie Sie verschiedene Arten von Autorisierungsrichtlinien für proxyloses gRPC-Service Mesh in GKE einrichten.
Bevor Sie eine Autorisierungsrichtlinie erstellen können, müssen Sie die CustomResourceDefinition (CRD) GCPAuthzPolicy installieren:
curl https://github.com/GoogleCloudPlatform/gke-networking-recipes/blob/main/gateway-api/config/mesh/crd/experimental/gcpauthzpolicy.yaml \
| kubectl apply -f -
Mit Autorisierungsrichtlinien kann die Zugriffssteuerung für Traffic erzwungen werden, der in proxylose gRPC-Dienste gelangt. Richtlinien können auf Kubernetes-Deployments angewendet werden. Die Bereitstellung sollte sich im selben Namespace wie die Autorisierungsrichtlinie befinden.
Autorisierungsrichtlinie zum Ablehnen aller Anfragen
Wenn Sie eine Arbeitslast haben, die nur ausgehende Aufrufe ausführen soll, z. B. ein Cron-Job, können Sie eine Autorisierungsrichtlinie konfigurieren, um alle eingehenden HTTP-Anfragen an die Arbeitslast abzulehnen. Im folgenden Beispiel werden eingehende HTTP-Anfragen an den gRPC-Dienst psm-grpc-server
abgelehnt.
Führen Sie die folgenden Schritte aus, um die Richtlinie zum Verweigern der Autorisierung zu erstellen und anzuwenden:
Erstellen Sie eine Ablehnungsrichtlinie, indem Sie eine Datei mit dem Namen
deny-all-authz-policy.yaml
erstellen:cat >deny-all-authz-policy.yaml <<EOF apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: myworkload-authz namespace: default spec: targetRefs: - kind: Deployment name: psm-grpc-server httpRules: - to: operations: - paths: - type: Prefix value: "/" action: DENY EOF
Wenden Sie die Richtlinie an:
kubectl apply -f deny-all-authz-policy.yaml
Autorisierungsrichtlinie zum Zulassen von Anfragen
Sie können auch eine Zulassungsrichtlinie konfigurieren, die nur Anfragen zulässt, die bestimmten Kriterien entsprechen, und alle anderen Anfragen ablehnt. Im folgenden Beispiel wird eine Autorisierungsrichtlinie für psm-grpc-server
konfiguriert, bei der nur POST
-Anfragen mit dem HTTP-Header x-user-role:admin
in der Anfrage zulässig sind.
Führen Sie die folgenden Schritte aus, um die Autorisierungsrichtlinie „Zulassen“ zu erstellen und anzuwenden. Löschen Sie die zuvor erstellte Richtlinie „Ablehnen“, bevor Sie diese Richtlinie hinzufügen, um die Ergebnisse zu sehen:
Erstellen Sie eine benutzerdefinierte Richtlinie, indem Sie eine Datei mit dem Namen
allow-authz-policy.yaml
erstellen:cat >allow-authz-policy.yaml <<EOF apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: myworkload-authz namespace: default spec: targetRefs: - kind: Deployment name: psm-grpc-server httpRules: - to: operations: - methods: ["POST"] when: "request.headers['x-user-role'] == 'admin' action: ALLOW EOF
Wenden Sie die Richtlinie an:
kubectl apply -f allow-authz-policy.yaml
Autorisierungsrichtlinie zum Ablehnen von Anfragen auf Grundlage von Regeln
Im folgenden Beispiel werden eingehende HTTP-POST
-Anfragen an die Arbeitslast psm-grpc-server
abgelehnt, wenn sie sich im Pfad /admin
befinden .
Führen Sie die folgenden Schritte aus, um die Richtlinie zum Verweigern der Autorisierung zu erstellen und anzuwenden:
Erstellen Sie eine Ablehnungsrichtlinie, indem Sie eine Datei mit dem Namen
deny-path-authz-policy.yaml
erstellen:cat >deny-path-authz-policy.yaml <<EOF apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: myworkload-authz namespace: default spec: targetRefs: - kind: Deployment name: psm-grpc-server httpRules: - to: operations: - paths: - type: Prefix value: "/admin" methods: ["GET"] action: DENY EOF
Wenden Sie die Richtlinie an:
kubectl apply -f deny-path-authz-policy.yaml