Configurar la seguridad de los servicios en la malla de servicios de Envoy sidecar en GKE

En esta página se describe cómo configurar las funciones de seguridad en la malla de servicios de sidecar de Envoy en GKE.

Requisitos previos

Para empezar, en esta guía se da por hecho que ya has hecho lo siguiente:

Configurar políticas de autorización en sidecars en GKE

En esta sección se explica cómo configurar diferentes tipos de políticas de autorización en los sidecars de Cloud Service Mesh en GKE.

Para poder crear una política de autorización, debes instalar la CustomResourceDefinition (CRD) de GCPAuthzPolicy:

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

Las políticas de autorización pueden aplicar el control de acceso al tráfico que entra en los sidecars de Envoy. Las políticas se pueden aplicar en los despliegues de Kubernetes. El despliegue debe estar en el mismo espacio de nombres que la política de autorización.

Política de autorización para denegar todas las solicitudes

Si tienes una carga de trabajo que solo debe hacer llamadas salientes, como un trabajo cron, puedes configurar una política de autorización para denegar cualquier solicitud HTTP entrante a la carga de trabajo. En el siguiente ejemplo se deniegan las solicitudes HTTP entrantes a la carga de trabajo whereami.

Sigue estos pasos para crear y aplicar la política de autorización de denegación:

  1. Crea una política de denegación creando un archivo llamado 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. Aplica la política:

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

Política de autorización para permitir solicitudes

También puedes configurar una política de permiso que solo permita las solicitudes que cumplan un criterio específico y rechace el resto. En el siguiente ejemplo se configura una política de autorización en whereami para que solo se permitan las solicitudes GET que tengan el encabezado HTTP x-user-role:admin en la solicitud.

Sigue estos pasos para crear y aplicar la política de autorización de permiso, y elimina la política de denegación que has creado anteriormente antes de añadir esta política para ver los resultados:

  1. Para crear una política personalizada, crea un archivo llamado 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. Aplica la política:

    kubectl apply -f allow-authz-policy.yaml
    

Política de autorización para denegar solicitudes basadas en reglas

En el siguiente ejemplo se deniegan las solicitudes HTTP GET entrantes a la carga de trabajo whereami cuando se encuentra en la ruta /admin .

Sigue estos pasos para crear y aplicar la política de autorización de denegación:

  1. Crea una política de denegación creando un archivo llamado 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. Aplica la política:

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