Configurer la sécurité du service sur le maillage de services gRPC sans proxy sur GKE

Cette page explique comment configurer des fonctionnalités de sécurité sur un maillage de services gRPC sans proxy sur GKE.

Prérequis

Pour commencer, ce guide suppose que vous avez déjà:

Configurez des stratégies d'autorisation sur le service gRPC sans proxy.

Cette section explique comment configurer différents types de stratégies d'autorisation sur les services gRPC sans proxy Cloud Service Mesh sur GKE.

Avant de pouvoir créer une règle d'autorisation, vous devez installer la CustomResourceDefinition (CRD) GCPAuthzPolicy :

curl https://github.com/GoogleCloudPlatform/gke-networking-recipes/blob/main/gateway-api/config/mesh/crd/experimental/gcpauthzpolicy.yaml \
| kubectl apply -f -

Les stratégies d'autorisation peuvent appliquer contrôle des accès au trafic entrant dans les services gRPC sans proxy. Les règles peuvent être appliquées aux déploiements Kubernetes. Le déploiement doit se trouver dans le même espace de noms que la stratégie d'autorisation.

Stratégie d'autorisation pour refuser toutes les requêtes

Si une charge de travail ne doit effectuer que des appels sortants, comme une job Cron, vous pouvez configurer une règle d'autorisation pour refuser toutes les requêtes HTTP entrantes vers la charge de travail. L'exemple suivant refuse les requêtes HTTP entrantes vers le service gRPC psm-grpc-server.

Pour créer et appliquer la stratégie d'autorisation de refus, procédez comme suit:

  1. Créez une stratégie de refus en créant un fichier nommé deny-all-authz-policy.yaml:

    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. Appliquez la règle :

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

Règle d'autorisation pour autoriser les requêtes

Vous pouvez également configurer une stratégie d'autorisation qui n'autorise que les requêtes qui répondent à des critères spécifiques, tout en rejetant les autres. L'exemple suivant configure une stratégie d'autorisation sur psm-grpc-server, où seules les requêtes POST contenant l'en-tête HTTP x-user-role:admin sont autorisées.

Pour créer et appliquer la règle d'autorisation d'accès, procédez comme suit : supprimez la règle de refus créée précédemment avant d'ajouter cette règle pour voir les résultats :

  1. Créez une règle personnalisée en créant un fichier nommé allow-authz-policy.yaml:

    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. Appliquez la règle :

    kubectl apply -f allow-authz-policy.yaml
    

Stratégie d'autorisation pour refuser les requêtes en fonction de règles

L'exemple suivant refuse les requêtes HTTP POST entrantes à la charge de travail psm-grpc-server lorsqu'elles se trouvent sur le chemin /admin .

Pour créer et appliquer la stratégie d'autorisation de refus, procédez comme suit:

  1. Créez une stratégie de refus en créant un fichier nommé deny-path-authz-policy.yaml:

    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. Appliquez la règle :

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