Configura la sicurezza del servizio sulla mesh di servizi gRPC senza proxy su GKE

Questa pagina descrive come configurare le funzionalità di sicurezza su una 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 norme di autorizzazione sui servizi gRPC proxyless Cloud Service Mesh su GKE.

Prima di poter creare una policy di autorizzazione, devi installare 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 -

I criteri di autorizzazione possono applicare il controllo dell'accesso al traffico che entra nei servizi gRPC proxyless. I criteri possono essere applicati ai deployment Kubernetes. Il deployment deve trovarsi nello stesso spazio dei nomi della policy di autorizzazione.

Norme di autorizzazione per negare tutte le richieste

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

Per creare e applicare il criterio di autorizzazione di negazione:

  1. Crea una policy di negazione 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 la norma:

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

Policy di autorizzazione per consentire le richieste

Puoi anche configurare una policy di autorizzazione che consente solo le richieste che corrispondono a un criterio specifico, rifiutando le altre. L'esempio seguente configura una policy di autorizzazione su psm-grpc-server in cui saranno consentite solo le richieste POST che hanno l'intestazione HTTP x-user-role:admin presente nella richiesta.

Per creare e applicare la policy di autorizzazione di tipo Consenti, elimina la policy di negazione creata in precedenza prima di aggiungere questa policy per visualizzare 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 la norma:

    kubectl apply -f allow-authz-policy.yaml
    

Norme di autorizzazione per negare le richieste in base alle regole

L'esempio seguente nega le richieste HTTP POST in entrata al carico di lavoro psm-grpc-server quando si trova nel percorso /admin .

Per creare e applicare il criterio di autorizzazione di negazione:

  1. Crea una policy di negazione 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 la norma:

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