Configurare la sicurezza del servizio nel mesh di servizi gRPC proxyless su GKE

Questa pagina descrive come configurare le funzionalità di sicurezza in un mesh di servizi gRPC senza proxy su GKE.

Prerequisiti

Come punto di partenza, questa guida presuppone che tu abbia già:

Configura i criteri di autorizzazione sul servizio gRPC proxyless.

Questa sezione mostra come configurare diversi tipi di criteri di autorizzazione sui servizi gRPC proxyless di Cloud Service Mesh su GKE.

Prima di poter creare un criterio di autorizzazione, devi installare la risorsa personalizzata CustomResourceDefinition (CRD) GCPAuthzPolicy:

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

I criteri di autorizzazione possono applicare il controllo dell'accesso al traffico in entrata nei servizi gRPC proxyless. I criteri possono essere applicati ai deployment Kubernetes. Il deployment deve trovarsi nello stesso spazio dei nomi del criterio di autorizzazione.

Criterio di autorizzazione per negare tutte le richieste

Se hai un carico di lavoro che dovrebbe effettuare solo chiamate in uscita, come un job cron, puoi configurare un criterio di autorizzazione per negare qualsiasi richiesta HTTP in entrata al carico di lavoro. L'esempio seguente nega le richieste HTTP in entrata al servizio gRPC psm-grpc-server.

Per creare e applicare il criterio di autorizzazione di rifiuto:

  1. Crea un criterio di rifiuto creando un file denominato 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. Applica il criterio:

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

Criteri di autorizzazione per consentire le richieste

Puoi anche configurare un criterio di autorizzazione che consenta solo le richieste che soddisfano criteri specifici e ne rifiuti le altre. L'esempio seguente configura un criterio di autorizzazione su psm-grpc-serverin cui saranno consentite solo le richieste POST che hanno l'intestazione HTTP x-user-role:admin presente nella richiesta.

Per creare e applicare il criterio di autorizzazione Consenti, elimina il criterio di negazione creato in precedenza prima di aggiungerlo per vedere i risultati:

  1. Crea una norma personalizzata creando un file denominato 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. Applica il criterio:

    kubectl apply -f allow-authz-policy.yaml
    

Criterio di autorizzazione per negare le richieste in base alle regole

L'esempio seguente nega le richieste HTTP POST in entrata al workload psm-grpc-server quando si trovano nel percorso /admin .

Per creare e applicare il criterio di autorizzazione di rifiuto:

  1. Crea un criterio di rifiuto creando un file denominato 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. Applica il criterio:

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