Dienstsicherheit für proxyloses gRPC-Service Mesh in GKE einrichten

Auf dieser Seite wird beschrieben, wie Sie Sicherheitsfunktionen in einem proxylosen gRPC-Service Mesh in GKE einrichten.

Vorbereitung

Sie sollten Folgendes bereits haben:

Autorisierungsrichtlinien für den proxylosen gRPC-Dienst einrichten.

In diesem Abschnitt erfahren Sie, wie Sie verschiedene Arten von Autorisierungsrichtlinien für proxylose gRPC-Dienste von Cloud 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 lässt sich die Zugriffssteuerung für Traffic erzwingen, der in proxylose gRPC-Dienste eintritt. Richtlinien können auf Kubernetes-Deployments angewendet werden. Die Bereitstellung sollte sich im selben Namespace wie die Autorisierungsrichtlinie befinden.

Autorisierungsrichtlinie, um alle Anfragen abzulehnen

Wenn eine Arbeitslast 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 Autorisierungsrichtlinie „Deny“ (Ablehnen) zu erstellen und anzuwenden:

  1. 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
    
  2. 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, mit der nur Anfragen zugelassen werden, die bestimmten Kriterien entsprechen, während der Rest abgelehnt wird. 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 zulässig sind.

Führen Sie die folgenden Schritte aus, um die Zulassungsrichtlinie zu erstellen und anzuwenden. Löschen Sie die zuvor erstellte Ablehnungsrichtlinie, bevor Sie diese Richtlinie hinzufügen, um die Ergebnisse zu sehen:

  1. 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
    
  2. Wenden Sie die Richtlinie an:

    kubectl apply -f allow-authz-policy.yaml
    

Autorisierungsrichtlinie zum Ablehnen von Anfragen basierend auf Regeln

Im folgenden Beispiel werden eingehende HTTP-POST-Anfragen an die Arbeitslast psm-grpc-server abgelehnt, wenn sie sich auf dem Pfad /admin befinden .

Führen Sie die folgenden Schritte aus, um die Autorisierungsrichtlinie „Deny“ (Ablehnen) zu erstellen und anzuwenden:

  1. 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
    
  2. Wenden Sie die Richtlinie an:

    kubectl apply -f deny-path-authz-policy.yaml