Configura la seguridad del servicio en la malla de servicios del archivo adicional de Envoy en GKE

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

Requisitos previos

Como punto de partida, en esta guía, se supone que ya hiciste lo siguiente:

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

En esta sección, se muestra cómo configurar diferentes tipos de políticas de autorización en los pares secundarios de Cloud Service Mesh en GKE.

Antes de crear una política de autorización, debes instalar el 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 ingresa a los sidecars de Envoy. Las políticas pueden aplicarse a las implementaciones de Kubernetes. Deployment debe estar en el mismo espacio de nombres que la política de autorización.

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

Cuando tienes una carga de trabajo que solo debe hacer llamadas salientes, como una trabajo cron, puedes configurar una política de autorización para rechazar cualquier solicitud HTTP las solicitudes a la carga de trabajo. En el siguiente ejemplo, se rechazan 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. Para crear una política de denegación, crea 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: wherami
    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 coincidan con un criterios específico y rechace el resto. En el siguiente ejemplo, se configura un la política de autorización en whereami, en la que solo se permitirán GET solicitudes que tengan el encabezado HTTP x-user-role:admin presente en la solicitud.

Sigue estos pasos para crear y aplicar la política de autorización de permiso, borra la política de denegación creada anteriormente antes de agregar 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 rechazar solicitudes según reglas

En el siguiente ejemplo, se rechazan las solicitudes GET HTTP 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. Para crear una política de denegación, crea 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