Tags, Scopes y Seguridad
Tags, Scopes y Seguridad
Tags
Los tags son etiquetas que asignas a un runner para controlar que jobs puede ejecutar.
Asignar tags al runner
Durante el registro:
sudo gitlab-runner register \
--tag-list "docker,linux,node"
O en config.toml (no recomendado, mejor desde la UI):
Settings > CI/CD > Runners > Edit > Tags
Usar tags en .gitlab-ci.yml
test:
tags:
- docker
- linux
script:
- npm test
deploy:
tags:
- deploy
- production
script:
- ./deploy.sh
Run untagged jobs
Por defecto, un runner con tags no ejecuta jobs sin tags. Para permitirlo:
- UI: Runner settings > “Run untagged jobs” = checked
- Registro:
--run-untagged=true
Scopes (Alcance)
| Scope | Configurado en | Disponible para |
|---|---|---|
| Instance | Admin Area | Todos los proyectos |
| Group | Group > CI/CD | Proyectos del grupo |
| Project | Project > CI/CD | Solo ese proyecto |
Recomendacion de scopes
- Shared/Instance: Runners genericos (build, test)
- Group: Runners con acceso a recursos del equipo (staging DB)
- Project: Runners de deploy a produccion con credenciales especificas
Protected Runners
Un runner protegido solo ejecuta jobs en ramas o tags protegidos.
Para que sirve
Evita que cualquier desarrollador ejecute jobs en el runner de produccion creando una rama con un .gitlab-ci.yml modificado.
Configurar
Settings > CI/CD > Runners > Edit > Protected = Yes
Flujo de proteccion
Branch feature/x (no protegida) → Runner protegido → RECHAZADO
Branch main (protegida) → Runner protegido → EJECUTADO
Tag v1.0.0 (protegido) → Runner protegido → EJECUTADO
Seguridad
Variables protegidas y enmascaradas
deploy:
tags:
- production
variables:
DB_PASSWORD: $DB_PASSWORD # Variable protegida en Settings > CI/CD
script:
- echo "Deploying..."
En Settings > CI/CD > Variables:
- Protected: Solo disponible en ramas/tags protegidos
- Masked: Oculta el valor en los logs del job
Limitar imagenes permitidas
En config.toml:
[runners.docker]
allowed_images = ["node:20-*", "python:3.12-*", "alpine:3.*"]
allowed_services = ["postgres:16-*", "redis:7-*"]
Esto previene que un .gitlab-ci.yml malicioso use imagenes no autorizadas.
No uses privileged mode sin necesidad
[runners.docker]
privileged = false # SIEMPRE false a menos que necesites DinD
privileged = true da acceso root al host. Si necesitas construir imagenes Docker, considera kaniko o buildah como alternativas sin privilegios.
Aislar runners de produccion
- Runner dedicado con tag
productionyProtected = Yes - Solo rama
maincomo protegida - Variables sensibles marcadas como Protected + Masked
allowed_imagesrestrictivo
Siguiente: Capitulo 6: Cache y Artifacts →