Autorización
AuthorizationPolicy permite controlar de forma detallada los permisos de acceso a los servicios.
Tabla de contenido
- Descripción general de la autorización
- Políticas básicas
- Políticas avanzadas
- Ejemplos prácticos
- Mejores prácticas
Descripción general de la autorización
Istio AuthorizationPolicy proporciona control de acceso detallado para los servicios. El diagrama anterior muestra cómo funciona Authorization Policy:
- Recepción de solicitudes: Envoy recibe solicitudes entrantes
- Evaluación de políticas: Las reglas de AuthorizationPolicy se evalúan en orden
- Decisión de acceso: Se aplica la acción ALLOW, DENY o CUSTOM
- Registro de auditoría: Todas las decisiones se registran
Condiciones compatibles:
- Origen: Origen de la solicitud (ServiceAccount, Namespace, IP)
- Operación: Método HTTP, ruta, puerto
- Condiciones: Condiciones personalizadas (encabezados, claims de JWT, etc.)
Políticas básicas
Denegación predeterminada (Denegar todo)
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: deny-all
namespace: default
spec:
action: DENY
rules:
- {} # Deny all requestsPermitir de forma predeterminada (Permitir todo)
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-all
namespace: default
spec:
action: ALLOW
rules:
- {} # Allow all requestsBasada en método HTTP
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: httpbin-get-only
namespace: default
spec:
selector:
matchLabels:
app: httpbin
action: ALLOW
rules:
- to:
- operation:
methods: ["GET"] # Allow only GETPolíticas avanzadas
Basada en ServiceAccount
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: ratings-sa-policy
namespace: default
spec:
selector:
matchLabels:
app: ratings
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/reviews"] # Allow only reviews SABasada en Namespace
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: db-namespace-policy
namespace: database
spec:
selector:
matchLabels:
app: postgresql
action: ALLOW
rules:
- from:
- source:
namespaces: ["production", "staging"] # Specific namespaces onlyBasada en ruta
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: path-based-policy
namespace: default
spec:
selector:
matchLabels:
app: api
action: ALLOW
rules:
- to:
- operation:
paths: ["/api/public/*"] # Allow only public API
- from:
- source:
principals: ["cluster.local/ns/default/sa/admin"]
to:
- operation:
paths: ["/api/admin/*"] # admin SA can access admin APIBasada en claims de JWT
yaml
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: jwt-claims-policy
namespace: default
spec:
selector:
matchLabels:
app: myapp
action: ALLOW
rules:
- when:
- key: request.auth.claims[role]
values: ["admin", "superuser"] # role claim is admin or superuser