En esta página, se muestra cómo crear políticas de autorización en Ambient Networking.
Requisitos previos
Antes de completar los pasos de este documento, debes cumplir con las siguientes condiciones:
- Un clúster de GKE en ejecución con las redes de Ambient de Cloud Service Mesh habilitadas.
- Un espacio de nombres inscrito en Ambient Networking
(por ejemplo,
ambient-test) con cargas de trabajo de cliente y servidor de ejemplo implementadas. - TLS mutua (mTLS) habilitada
entre las cargas de trabajo del cliente y del servidor con un
GCPServerTLSPolicy(conmtlsMode: Strict) y unGCPClientTLSPolicy. Las reglas deGCPAuthzPolicybasadas en la identidad que coinciden conCLIENT_CERT_URI_SANrequieren mTLS activo para extraer la identidad de SPIFFE del cliente.
Para obtener una configuración detallada del entorno, consulta Prepara Ambient Networking de GKE.
Política de denegación predeterminada
De forma predeterminada, la API de AuthorizationPolicy de GKE Ambient permite todo
el tráfico, a menos que esté restringido por una política, lo que coincide con el comportamiento estándar de NetworkPolicy
de Kubernetes.
La acción DENY_BY_DEFAULT te permite cambiar este comportamiento predeterminado. Cuando
se aplica a un espacio de nombres, esta política bloquea todo el tráfico a las cargas de trabajo en ese
espacio de nombres, a menos que una política ALLOW lo permita de forma explícita.
En esta página, se muestra cómo configurar y usar DENY_BY_DEFAULT en
Cloud Service Mesh para establecer una postura segura de forma predeterminada para tus
cargas de trabajo.
Limitaciones
Antes de aplicar una política de DENY_BY_DEFAULT, ten en cuenta las siguientes
limitaciones:
- Solo puedes crear una política de
DENY_BY_DEFAULTpor espacio de nombres. - Una política con la acción
DENY_BY_DEFAULTno puede tener ninguna regla definida. - Usa esta acción para establecer un
matchLabels: {}de referencia en todo el espacio de nombres para orientar todos los Pods. No puedes usarDENY_BY_DEFAULTpara las restricciones por Pod.
Configura una política de autorización de rechazo predeterminado
Para establecer un modelo de referencia de denegación predeterminada en un espacio de nombres y permitir el acceso de forma selectiva a cargas de trabajo específicas, sigue estos pasos:
Crea y aplica un
GCPAuthzPolicycon la acción establecida enDENY_BY_DEFAULTen tu espacio de nombres.cat <<EOF > deny-by-default-policy.yaml && kubectl apply -f deny-by-default-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: deny-by-default-authz namespace: ambient-test spec: action: DENY_BY_DEFAULT enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: {} EOFEl resultado es similar al siguiente:
gcpauthzpolicy.networking.gke.io/deny-by-default-authz createdEsta política bloquea todo el tráfico entrante (este-oeste y de entrada) a las cargas de trabajo en el espacio de nombres
ambient-testde forma predeterminada. No restringe el tráfico saliente que se origina en las cargas de trabajo del espacio de nombres.Para permitir el tráfico de forma selectiva, crea y aplica una política de
ALLOW:cat <<EOF > allow-policy.yaml && kubectl apply -f allow-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: allow-client-to-server namespace: ambient-test spec: action: ALLOW enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: app: server rules: - from: sources: - principals: - principalSelector: CLIENT_CERT_URI_SAN principal: type: Exact value: spiffe://PROJECT_ID.s3ns.svc.id.goog/ns/ambient-test/sa/client EOFReemplaza PROJECT_ID con el ID del proyecto.
La propagación de la política puede tardar hasta tres minutos después de la aceptación del controlador. Espera tres minutos antes de continuar.
Prueba la conectividad del cliente al servidor. Debería tener éxito porque coincide con la política
ALLOW.kubectl exec -it deploy/client -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.localPrueba la conectividad del servidor a sí mismo (o a cualquier otra carga de trabajo sin una política de permiso explícita). Debería fallar debido a la política
DENY_BY_DEFAULT.kubectl exec -it deploy/server -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.localEl resultado es similar al siguiente:
curl: (52) Empty reply from server.
Logging
Cuando una política de autorización rechaza una solicitud, el proxy del nodo escribe una
entrada de registro de acceso en Cloud Logging con el nombre de registro
gke-ambient-node-proxy-accesslog. La entrada contiene el siguiente
campo en la carga útil de JSON:
jsonPayload.error_details:- rbac_access_denied_matched_policy[none]
Puedes usar el Explorador de registros en la consola de Cloud de Confiance para ver las entradas del registro de acceso de las conexiones rechazadas:
resource.type="k8s_container"
logName="projects/PROJECT_ID/logs/gke-ambient-node-proxy-accesslog"
jsonPayload.error_details=~"rbac_access_denied"
Para obtener más información, consulta Verifica que el tráfico esté autenticado y autorizado.
Políticas de seguridad de salida
Para inspeccionar y controlar el tráfico saliente de las cargas de trabajo de Ambient Networking a los extremos externos o a Internet, puedes enrutar el tráfico de salida a través de Secure Web Proxy (SWP).
Para obtener instrucciones sobre cómo configurar los recursos GCPBackend y GCPEgressPolicy,
consulta Enruta el tráfico de salida de Ambient a través de Secure Web Proxy.