0Pricing
Docker & DevOps Fundamentals · Lección

Gestión de Secrets y RBAC

Aprenda estrategias avanzadas para administrar datos confidenciales e implementar el control de acceso basado en roles (RBAC) en entornos de contenedores.

Gestión de Secrets y RBAC es una lección gratuita de Docker & DevOps Fundamentals en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Docker & DevOps Fundamentals, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Docker & DevOps Fundamentals incluye 4 lecciones en total.

Proteger el entorno de contenedores

¡Le damos la bienvenida! En esta lección, profundizaremos en prácticas de seguridad esenciales para aplicaciones en contenedores: la gestión de secretos y el control de acceso basado en roles (RBAC).

Estos conceptos son fundamentales para proteger los datos confidenciales y garantizar que solo las entidades autorizadas puedan realizar acciones específicas en sus entornos de contenedores.

Gestión de Secrets y RBAC — ilustración 1

El peligro de codificar secretos directamente

Codificar directamente información confidencial, como claves de API, contraseñas de bases de datos o certificados privados, en el código de la aplicación o en Dockerfiles supone un riesgo de seguridad importante.

  • Exposición: Cualquier persona con acceso al repositorio de código o a la imagen creada puede verlos fácilmente.
  • Falta de control: Cambiar un secreto requiere volver a compilar y desplegar toda la aplicación.
  • Problemas de cumplimiento: Incumple muchas prácticas recomendadas de seguridad y requisitos normativos.

Variables de entorno (con precaución)

Una forma habitual, aunque no siempre segura, de pasar secretos es mediante variables de entorno. Docker permite pasarlas con la marca -e, y las aplicaciones pueden leerlas.

Sin embargo, las variables de entorno se pueden inspeccionar fácilmente (por ejemplo, con docker inspect) y podrían permanecer en el historial del shell o en los registros. Para datos realmente confidenciales, existen soluciones mejores.

Secretos de Docker en acción

Docker Secrets permite almacenar y transmitir datos confidenciales de forma segura a los contenedores. Cuando se asocia un secreto a un contenedor, se monta como un archivo temporal en /run/secrets/.

Primero, crearía un secreto (por ejemplo, echo "my_secure_pass" | docker secret create app_secret -). Después, su aplicación puede leerlo:

import os

def main():
    secret_path = "/run/secrets/app_secret"
    try:
        with open(secret_path, 'r') as f:
            secret_value = f.read().strip()
        print(f"Secret read: {secret_value}")
    except FileNotFoundError:
        print("Secret file not found. Make sure it's mounted.")
    except Exception as e:
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    main()

Descripción general de los secretos de Kubernetes

Al igual que Docker Secrets, Kubernetes tiene su propio objeto llamado «Secrets» para almacenar y gestionar información confidencial. Estos secretos se pueden montar como archivos en los Pods o exponer como variables de entorno.

Importante: Los Secrets de Kubernetes están codificados en base64, pero no cifrados de forma predeterminada. Esto significa que se pueden descodificar fácilmente. Para conseguir un cifrado real en reposo, necesita configuración adicional (por ejemplo, integración con KMS).

Desplegar con Secrets de K8s

Veamos un ejemplo de cómo se define un Secret de Kubernetes y cómo se utiliza posteriormente dentro de un Pod. Puede definir secretos en YAML o crearlos mediante comandos de kubectl.

Una vez creado, un Pod puede hacer referencia al secreto para montarlo como un volumen o inyectar sus valores como variables de entorno.

apiVersion: v1
kind: Pod
metadata:
  name: my-secret-pod
spec:
  containers:
  - name: my-app-container
    image: busybox
    command: ["sh", "-c", "echo Username: $(cat /etc/secrets/username) Password: $(cat /etc/secrets/password)"]
    volumeMounts:
    - name: secret-volume
      mountPath: "/etc/secrets"
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: my-k8s-secret

Almacenes de secretos externos

Para datos altamente confidenciales o al gestionar secretos en varios clústeres y entornos, las herramientas externas de gestión de secretos ofrecen funciones avanzadas como:

  • Almacenamiento centralizado: Una única fuente de verdad para todos los secretos.
  • Cifrado en reposo y en tránsito: Garantías de seguridad más sólidas.
  • Secretos dinámicos: Credenciales generadas automáticamente y de corta duración.
  • Auditoría y control de acceso: Permisos detallados y registros completos.

Entre las opciones populares se incluyen HashiCorp Vault, AWS Secrets Manager y Azure Key Vault.

¿Qué es RBAC?

El control de acceso basado en roles (RBAC) es un método para restringir el acceso al sistema a los usuarios autorizados. En lugar de asignar permisos directamente a usuarios individuales, los permisos se agrupan en «roles» y, después, los usuarios se asignan a esos roles.

En la orquestación de contenedores, RBAC garantiza que los usuarios, las aplicaciones o los servicios solo tengan los permisos necesarios para interactuar con recursos (como Pods, Deployments y Secrets).

Componentes básicos de RBAC en K8s

El RBAC de Kubernetes utiliza varios tipos de recursos clave:

  • Role: Define permisos dentro de un espacio de nombres específico (por ejemplo, «puede ver pods» en el espacio de nombres «dev»).
  • ClusterRole: Define permisos en todo el clúster (por ejemplo, «puede ver todos los pods» o «puede gestionar nodos»).
  • RoleBinding: Concede los permisos definidos en un Role a un usuario, grupo o cuenta de servicio dentro de un espacio de nombres.
  • ClusterRoleBinding: Concede los permisos definidos en un ClusterRole a un usuario, grupo o cuenta de servicio en todo el clúster.

Ejemplo de RBAC: limitar el acceso

Veamos un ejemplo de cómo conceder a una cuenta de servicio específica permiso únicamente para enumerar y obtener pods en un espacio de nombres concreto. Esto aplica el principio de mínimo privilegio.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods-binding
  namespace: default
subjects:
- kind: ServiceAccount
  name: pod-viewer-sa # Name of the ServiceAccount to bind to
  namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Compruebe sus conocimientos

Ha aprendido a proteger datos confidenciales y controlar el acceso. ¡Es hora de hacer una comprobación rápida!

Repaso: proteja sus aplicaciones

¡Buen trabajo! En esta lección, ha aprendido sobre dos pilares fundamentales de la seguridad de contenedores:

  • Gestión de secretos: Protección de datos confidenciales mediante Docker Secrets y Kubernetes Secrets, comprendiendo sus ventajas y limitaciones.
  • Control de acceso basado en roles (RBAC): Implementación de permisos detallados en Kubernetes para garantizar el principio de mínimo privilegio.

Al dominar estos conceptos, está creando aplicaciones en contenedores más sólidas y seguras.

Preguntas frecuentes

¿La lección «Gestión de Secrets y RBAC» es gratis?

Sí — el texto completo de «Gestión de Secrets y RBAC» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Docker & DevOps Fundamentals, actualiza a CoddyKit PRO. El curso de Docker & DevOps Fundamentals incluye 4 lecciones en total.

¿Qué aprenderé en «Gestión de Secrets y RBAC»?

Aprenda estrategias avanzadas para administrar datos confidenciales e implementar el control de acceso basado en roles (RBAC) en entornos de contenedores. Practicas Docker & DevOps Fundamentals con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Docker & DevOps Fundamentals?

No se requiere experiencia previa. Docker & DevOps Fundamentals en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Gestión de Secrets y RBAC»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Docker & DevOps Fundamentals?

Sí. Cada lección de Docker & DevOps Fundamentals incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Análisis de seguridad de imágenes de contenedor
  2. Seguridad de contenedores en tiempo de ejecución
  3. Gestión de Secrets y RBAC
  4. Políticas de red y mínimo privilegio
← Volver a Docker & DevOps Fundamentals