Configure a segurança do serviço na malha de serviços do sidecar do Envoy no GKE

Esta página descreve como configurar funcionalidades de segurança na malha de serviços do sidecar do Envoy no GKE.

Pré-requisitos

Como ponto de partida, este guia pressupõe que já:

Configure políticas de autorização em sidecars no GKE

Esta secção mostra-lhe como configurar diferentes tipos de políticas de autorização em sidecars do Cloud Service Mesh no GKE.

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

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 controlo de acesso ao tráfego que entra nos sidecars do Envoy. As políticas podem ser aplicadas em implementações do Kubernetes. A implementação deve estar no mesmo espaço de nomes que a política de autorização.

Política de autorização para recusar todos os pedidos

Quando tem uma carga de trabalho que se destina a fazer apenas chamadas de saída, como um trabalho cron, pode configurar uma política de autorização para recusar quaisquer pedidos HTTP recebidos para a carga de trabalho. O exemplo seguinte nega pedidos HTTP recebidos para a carga de trabalho whereami.

Execute os seguintes passos para criar e aplicar a política de autorização de recusa:

  1. Crie uma política de recusa criando um ficheiro denominado deny-all-authz-policy.yaml:

    cat >deny-all-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: whereami
    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 pedidos

Também pode configurar uma política de permissão que permita apenas pedidos que correspondam a critérios específicos, rejeitando os restantes. O exemplo seguinte configura uma política de autorização no whereami, em que apenas os pedidos GET que tenham o cabeçalho HTTP x-user-role:admin presente no pedido são permitidos.

Siga estes passos para criar e aplicar a política de autorização de permissão, eliminar a política de negação criada anteriormente antes de adicionar esta política para ver os resultados:

  1. Crie uma política personalizada criando um ficheiro denominado allow-authz-policy.yaml:

    cat >allow-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: whereami
    httpRules:
    - to:
        operations:
        - methods: ["GET"]
      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 recusar pedidos com base em regras

O exemplo seguinte nega pedidos HTTP GET de entrada ao recurso whereami quando está no caminho /admin .

Execute os seguintes passos para criar e aplicar a política de autorização de recusa:

  1. Crie uma política de recusa criando um ficheiro denominado deny-path-authz-policy.yaml:

    cat >deny-path-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: whereami
    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