Configurar a segurança do serviço na malha de serviço gRPC sem proxy no GKE

Nesta página, descrevemos como configurar recursos de segurança em uma malha de serviço gRPC sem proxy no GKE.

Pré-requisitos

Como ponto de partida, neste guia presume-se que você já:

Configurar políticas de autorização no serviço gRPC sem proxy.

Nesta seção, mostramos como configurar diferentes tipos de políticas de autorização em serviços gRPC sem proxy do Cloud Service Mesh no GKE.

Antes de criar uma política de autorização, instale a GCPAuthzPolicy CustomResourceDefinition (CRD):

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

As políticas de autorização podem aplicar o controle de acesso ao tráfego que entra nos serviços gRPC sem proxy. As políticas podem ser aplicadas em implantações do Kubernetes. A implantação precisa estar no mesmo namespace que a política de autorização.

Política de autorização para negar todas as solicitações

Quando você tem uma carga de trabalho que deve fazer apenas chamadas de saída, como um cron job, é possível configurar uma política de autorização para negar qualquer HTTP solicitação de entrada para a carga de trabalho. O exemplo a seguir nega solicitações HTTP recebidas para o serviço gRPC psm-grpc-server.

Siga estas etapas para criar e aplicar a política de autorização de negação:

  1. Crie uma política de negação criando um arquivo chamado 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. Aplique a política:

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

Política de autorização para permitir solicitações

Também é possível configurar uma política de permissão que permite apenas solicitações que atendam a um critério específico e rejeita o restante. O exemplo a seguir configura uma política de autorização no psm-grpc-server em que apenas solicitações POST com o cabeçalho HTTP x-user-role:admin presente na solicitação serão permitidas.

Siga estas etapas para criar e aplicar a política de autorização de permissão e excluir a política de negação criada anteriormente antes de adicionar essa política para ver os resultados:

  1. Crie uma política personalizada criando um arquivo chamado 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. Aplique a política:

    kubectl apply -f allow-authz-policy.yaml
    

Política de autorização para negar solicitações com base em regras

O exemplo a seguir nega solicitações HTTP POST recebidas para a carga de trabalho psm-grpc-server quando ela está no caminho /admin .

Siga estas etapas para criar e aplicar a política de autorização de negação:

  1. Crie uma política de negação criando um arquivo chamado 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. Aplique a política:

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