Configurar la seguridad de los servicios en una malla de servicios gRPC sin proxy en GKE
En esta página se describe cómo configurar funciones de seguridad en una malla de servicios gRPC sin proxy en GKE.
Requisitos previos
Para empezar, en esta guía se da por hecho que ya has hecho lo siguiente:
- Has creado un clúster de GKE y lo has registrado en una flota.
- Configura un cliente y un servicio gRPC con xDS habilitado.
Configura políticas de autorización en el servicio gRPC sin proxy.
En esta sección se muestra cómo configurar diferentes tipos de políticas de autorización en servicios gRPC sin proxy 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 servicios de gRPC sin proxy. 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 al servicio gRPC psm-grpc-server
.
Sigue estos pasos para crear y aplicar la política de autorización de denegación:
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: default spec: targetRefs: - kind: Deployment name: psm-grpc-server httpRules: - to: operations: - paths: - type: Prefix value: "/" action: DENY EOF
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 psm-grpc-server
para que solo se permitan las solicitudes POST
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:
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: default spec: targetRefs: - kind: Deployment name: psm-grpc-server httpRules: - to: operations: - methods: ["POST"] when: "request.headers['x-user-role'] == 'admin' action: ALLOW EOF
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 POST
entrantes a la carga de trabajo psm-grpc-server
cuando se encuentra en la ruta /admin
.
Sigue estos pasos para crear y aplicar la política de autorización de denegación:
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: default spec: targetRefs: - kind: Deployment name: psm-grpc-server httpRules: - to: operations: - paths: - type: Prefix value: "/admin" methods: ["GET"] action: DENY EOF
Aplica la política:
kubectl apply -f deny-path-authz-policy.yaml