La seguretat d'imatges és un aspecte crític en l'ús de Kubernetes, ja que les imatges de contenidors poden ser un vector d'atac si no es gestionen adequadament. Aquest tema cobreix les millors pràctiques per assegurar les imatges de contenidors, incloent la creació, l'escaneig, la signatura i la gestió d'imatges.
Conceptes Clau
- Imatges de Contenidors: Fitxers que contenen tot el necessari per executar una aplicació, incloent el codi, les biblioteques, les variables d'entorn i els fitxers de configuració.
- Registre d'Imatges: Un servei per emmagatzemar i distribuir imatges de contenidors. Exemples inclouen Docker Hub, Google Container Registry (GCR) i Amazon Elastic Container Registry (ECR).
- Escaneig d'Imatges: El procés d'analitzar imatges de contenidors per detectar vulnerabilitats de seguretat.
- Signatura d'Imatges: Un mètode per garantir la integritat i l'autenticitat d'una imatge de contenidor.
Millors Pràctiques per a la Seguretat d'Imatges
- Utilitzar Imatges Oficials i de Confiança
- Descarregar Imatges Oficials: Sempre que sigui possible, utilitza imatges oficials dels registres de confiança com Docker Hub.
- Verificar la Font: Assegura't que les imatges provenen de fonts verificades i de confiança.
- Escanejar Imatges per a Vulnerabilitats
- Eines d'Escaneig: Utilitza eines com Trivy, Clair o Anchore per escanejar les imatges de contenidors per a vulnerabilitats conegudes.
- Automatització: Integra l'escaneig d'imatges en el teu pipeline de CI/CD per assegurar que totes les imatges es revisen abans de ser desplegades.
- Signar i Verificar Imatges
- Docker Content Trust (DCT): Utilitza DCT per signar i verificar imatges de contenidors. Això garanteix que les imatges no han estat manipulades.
- Notary: Una altra eina per signar i verificar imatges de contenidors.
- Minimitzar la Superfície d'Atac
- Imatges Lleugeres: Utilitza imatges base lleugeres com Alpine Linux per reduir la superfície d'atac.
- Eliminar Components Innecessaris: Assegura't que les imatges només contenen els components necessaris per executar l'aplicació.
- Gestió de Secrets
- No Incloure Secrets: No incloguis secrets com claus API o contrasenyes dins de les imatges de contenidors.
- Utilitzar Kubernetes Secrets: Emmagatzema i gestiona secrets utilitzant Kubernetes Secrets.
Exemple Pràctic: Escaneig d'Imatges amb Trivy
A continuació, es mostra un exemple de com escanejar una imatge de contenidor utilitzant Trivy.
Instal·lació de Trivy
Escanejar una Imatge
Sortida de l'Escaneig
2023-10-01T12:00:00.000Z INFO Need to update DB 2023-10-01T12:00:00.000Z INFO Downloading DB... 2023-10-01T12:00:00.000Z INFO Detecting Debian vulnerabilities... nginx:latest (debian 10.9) =========================== Total: 10 (UNKNOWN: 0, LOW: 5, MEDIUM: 3, HIGH: 2, CRITICAL: 0) +------------------+------------------+----------+-------------------+---------------+--------------------------------+ | LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE | +------------------+------------------+----------+-------------------+---------------+--------------------------------+ | apt | CVE-2021-XXXX | HIGH | 1.8.2 | 1.8.2.1 | apt: integer overflow in... | | bash | CVE-2021-YYYY | MEDIUM | 5.0-4 | 5.0-4.1 | bash: heap-based buffer... | +------------------+------------------+----------+-------------------+---------------+--------------------------------+
Exercici Pràctic
Objectiu
Escanejar una imatge de contenidor personalitzada per detectar vulnerabilitats i aplicar les millors pràctiques de seguretat.
Passos
-
Crear una Imatge Personalitzada:
- Escriu un
Dockerfile
per a una aplicació simple. - Construeix la imatge utilitzant
docker build
.
- Escriu un
-
Escanejar la Imatge:
- Utilitza Trivy per escanejar la imatge creada.
-
Aplicar Millores:
- Identifica les vulnerabilitats i actualitza el
Dockerfile
per solucionar-les. - Torna a construir i escanejar la imatge fins que no hi hagi vulnerabilitats crítiques.
- Identifica les vulnerabilitats i actualitza el
Solució
Dockerfile Inicial
# Utilitzar una imatge base FROM ubuntu:18.04 # Instal·lar dependències RUN apt-get update && apt-get install -y \ python3 \ python3-pip # Copiar el codi de l'aplicació COPY . /app # Establir el directori de treball WORKDIR /app # Instal·lar les dependències de l'aplicació RUN pip3 install -r requirements.txt # Executar l'aplicació CMD ["python3", "app.py"]
Escaneig Inicial
Millores Aplicades
- Canviar la imatge base a una versió més lleugera com Alpine.
- Actualitzar les dependències a versions més segures.
Dockerfile Millorat
# Utilitzar una imatge base lleugera FROM python:3.8-alpine # Copiar el codi de l'aplicació COPY . /app # Establir el directori de treball WORKDIR /app # Instal·lar les dependències de l'aplicació RUN pip install --no-cache-dir -r requirements.txt # Executar l'aplicació CMD ["python", "app.py"]
Escaneig Final
Conclusió
La seguretat d'imatges és essencial per protegir les aplicacions desplegades en Kubernetes. Seguint les millors pràctiques com utilitzar imatges de confiança, escanejar per vulnerabilitats, signar imatges i minimitzar la superfície d'atac, pots assegurar que les teves imatges de contenidors són segures i fiables.
Curs de Kubernetes
Mòdul 1: Introducció a Kubernetes
- Què és Kubernetes?
- Arquitectura de Kubernetes
- Conceptes i Terminologia Clau
- Configuració d'un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Mòdul 2: Components Bàsics de Kubernetes
Mòdul 3: Gestió de Configuració i Secrets
Mòdul 4: Xarxes en Kubernetes
Mòdul 5: Emmagatzematge en Kubernetes
Mòdul 6: Conceptes Avançats de Kubernetes
Mòdul 7: Monitorització i Registre
- Monitorització amb Prometheus
- Registre amb Elasticsearch, Fluentd i Kibana (EFK)
- Controls de Salut i Probes
- Servidor de Mètriques
Mòdul 8: Seguretat en Kubernetes
- Control d'Accés Basat en Rols (RBAC)
- Polítiques de Seguretat de Pods
- Seguretat de Xarxa
- Seguretat d'Imatges
Mòdul 9: Escalabilitat i Rendiment
- Autoscalat Horitzontal de Pods
- Autoscalat Vertical de Pods
- Autoscalat de Clúster
- Optimització del Rendiment
Mòdul 10: Ecosistema i Eines de Kubernetes
Mòdul 11: Estudis de Cas i Aplicacions del Món Real
- Desplegament d'una Aplicació Web
- CI/CD amb Kubernetes
- Execució d'Aplicacions Stateful
- Gestió Multi-Clúster