Seguridad en OpenShift
Resumen
Seguridad en OpenShift: RBAC (control de acceso), network policies (aislamiento de red), secrets (datos sensibles), Security Context (privilegios), y auditoría.
Conceptos Clave
RBAC (Role-Based Access Control)
Roles
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: deployer
rules:
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "create", "update", "patch"]Recursos:
- deployments, pods, services, routes
- configmaps, secrets
- persistentvolumeclaims
Verbos:
- get, list, watch (lectura)
- create, patch, update (escritura)
- delete (eliminación)
RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: developer-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: deployer
subjects:
- kind: User
name: alice@example.com
- kind: Group
name: developersResultado: usuario alice + grupo developers pueden hacer acciones en Role
Roles Predefinidos
view: Lectura completa en namespaceedit: Lectura/escritura en namespaceadmin: Admin completo en namespacecluster-admin: Admin total del cluster
Network Policy (Aislamiento de Red)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: backend-policy
spec:
podSelector:
matchLabels:
tier: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
tier: frontend
ports:
- protocol: TCP
port: 8080Resultado: Solo Pods con label “tier=frontend” pueden acceder backend:8080
Secrets (Datos Sensibles)
# Crear secret
oc create secret generic db-creds \
--from-literal=username=admin \
--from-literal=password=secret123
# Usar en Deployment
oc set env deployment/app \
--from=secret/db-creds \
--prefix=DB_Almacenamiento:
- Encriptado en etcd (si configurado)
- No en logs
- Permisos RBAC controlados
SecurityContext (Privilegios de Pod)
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: app
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALLRestricciones:
- Non-root user
- Sin privilege escalation
- Capabilities limitadas
- Read-only filesystem
PodSecurityPolicy
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
fsGroup:
rule: MustRunAs
ranges:
- min: 1
max: 65535
runAsUser:
rule: MustRunAsNonRootAplicación: Todos los Pods deben cumplir política
Image Registry Security
# ImagePullSecret para registros privados
oc create secret docker-registry regcred \
--docker-server=myregistry.com \
--docker-username=user \
--docker-password=pass
# Usar en Deployment
spec:
imagePullSecrets:
- name: regcred
containers:
- image: myregistry.com/myapp:v1Auditoría
Todas las acciones en OpenShift se loguean:
- Quién (user)
- Qué (acción: create, update, delete)
- Dónde (resource, namespace)
- Cuándo (timestamp)
- Resultado (success/failure)
Acceso: Logs centralizados (Elasticsearch)
Network Policies Avanzadas
Deny All
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- IngressAllow All
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- {}Por Namespace
ingress:
- from:
- namespaceSelector:
matchLabels:
name: allowed-namespaceRelaciones
Conecta con
- Parte de: OpenShift, Kubernetes
- RBAC: Control de acceso basado roles
- Network Policy: Aislamiento micro-segmentación
- Secrets: Gestión de credenciales