InfraGuard

Proyectos (Servicio ▸ Proyectos)

Un registro compartido de metadatos de proyecto: registre el código fuente (GitHub), el CI/CD (Jenkins), los enlaces web/db, los destinos de copia de seguridad y las referencias a secretos (no es una herramienta de despliegue).

Resumen — qué hace

Proyectos es un registro que reúne los metadatos de todos los proyectos que ejecuta su equipo en un único lugar compartido. De cada proyecto se registra su repositorio de código (GitHub, etc.), su canalización de CI/CD (Jenkins), los servicios web y las bases de datos que utiliza, sus destinos de copia de seguridad y —lo más importante— dónde residen sus secretos. Así, cualquier persona del equipo puede responder de un vistazo: «¿de qué está hecho este proyecto, dónde se despliega y qué secreto está en qué sitio?».

Esta pantalla no es una herramienta de despliegue. Las compilaciones y los despliegues reales ocurren en Jenkins. InfraGuard no dispara ninguna canalización desde aquí; los datos registrados son documentación compartida. Las URL, los nombres de Job y las ramas que guarde son únicamente enlaces y etiquetas de referencia: no se ejecuta nada.

Principios de diseño fundamentales:

Cuándo usarla

Disposición

Franja de KPI

Celda Significado
Proyectos Total de proyectos registrados
Externos Proyectos con accessible=1 (una URL externa)
Internos Proyectos con accessible=0 (solo internos, no expuestos)
Archivados Proyectos con status=archived

Tarjetas de proyecto

Cada tarjeta muestra:

Ventana de edición (6 pestañas)

Una ventana modal ancha (.infr-modal__panel--wide) que reparte la entrada de datos por pestañas.

Pestaña Campos
Resumen Nombre (obligatorio) · Clave (slug) · Estado · Grupo · Conmutador de acceso externo · URL · Resumen · Etiquetas
Código Proveedor del repositorio (GitHub/GitLab/Gitea/Bitbucket/Otro) · URL del repositorio · Rama por defecto · Visibilidad (public/private/internal)
CI/CD URL de Jenkins y repetidor de entornos (por dev/staging/prod: URL de despliegue · rama · Job de Jenkins · nota)
Enlaces Casillas de servicios web (infr_web_service registrados) y casillas de BD (recolector) (recolectores con access=database)
Copia de seguridad Repetidor de destinos de copia (tipo · destino · programación · nota)
Secretos Referencias a claves de la bóveda (marcar y mostrar el valor) y repetidor de la lista de verificación de secretos (elemento · ubicación · referencia · nota)

Cómo usarla

Registrar un proyecto

  1. Pulse [Añadir proyecto] en la esquina superior derecha (se requiere permiso de escritura).
  2. En la pestaña Resumen introduzca el nombre (obligatorio). La clave (slug) es opcional y debe coincidir con ^[a-z0-9_-]+$ (por ejemplo, coin-market).
  3. Si el servicio es accesible desde fuera, active el conmutador Accesible desde fuera e introduzca su URL. Si es solo interno, déjelo desactivado y el campo de URL quedará deshabilitado.
  4. Rellene las pestañas restantes (Código, CI/CD, Enlaces, Copia de seguridad, Secretos) según convenga: todas son opcionales.
  5. [Guardar] — el servidor valida, hace un upsert en infr_project y actualiza la tarjeta.

Registrar entornos de CI/CD

En la pestaña CI/CD introduzca la URL de Jenkins y luego use [Añadir entorno] para agregar destinos de despliegue fila a fila:

{
  "env": "prod",
  "url": "https://coin.example.com",
  "branch": "main",
  "jenkins_job": "coin_market-deploy-prod",
  "note": "blue/green"
}

Enlazar web/db

En la pestaña Enlaces, marque los recursos que utiliza este proyecto.

Cada enlace admite hasta 50 entradas.

Declarar destinos de copia de seguridad

Use el repetidor de la pestaña Copia de seguridad para documentar la política de copias de este proyecto (tipo · destino · programación · nota). Se trata de metadatos de referencia y no se ejecuta: los trabajos de copia reales se gestionan en el Panel de programación.

Gestionar la información confidencial (la función clave)

Los secretos emplean dos mecanismos a la vez. Ninguno de ellos guarda el valor real del secreto en infr_project.

1) Referencias a claves de la bóveda (vault_key_ids)

Las revelaciones de valores de la bóveda se auditan. Cada revelación escribe vault_key.reveal (target=vault_key, via=project) en infr_audit_log. El valor se muestra brevemente y se copia al portapapeles al hacer clic: revélelo solo cuando lo necesite. El registro del proyecto guardado contiene únicamente la referencia al id de la clave.

2) Lista de verificación de secretos (secrets, enmascarada)

Para los secretos que no están en la bóveda (o que se custodian externamente), anote solo la ubicación. El valor nunca se guarda.

Campo Ejemplo
label STRIPE_SECRET_KEY
location .env (prod server /var/www)
ref 1Password › Coin › prod
note rotate quarterly

La función cleanList() del servidor conserva solo las claves permitidas (label/location/ref/note) y recorta cada una a 255 caracteres. Si los cuatro campos están vacíos, la fila se descarta.

Eliminar

Elimine desde la parte inferior izquierda de la ventana de edición o desde [Eliminar] en la tarjeta. Tras la confirmación, POST /service/projects/delete borra la fila de infr_project y registra project.delete.

Fuentes de datos

Dato Origen
Registros de proyecto infr_project (migración 000715)
Grupos (categorías) infr_asset_group (a través de group_id)
Opciones de servicio web infr_web_service (nombre · dominio)
Opciones de BD (recolector) infr_collector con access=database (key · title · host_alias)
Opciones de clave de bóveda infr_vault_key — enmascaradas (id · categoría · título · nombre de usuario, sin el valor)
Revelación del valor de bóveda infr_vault_key.revealSecret() (descifrado, solo al revelar)
Registro de auditoría infr_audit_log (project.create/update/delete, vault_key.reveal)

Esquema de almacenamiento (infr_project, extracto)

key            varchar(60) unique nullable   # slug
group_id       int -> infr_asset_group
name           varchar(160)                  # obligatorio
status         enum(active,paused,archived)
accessible     boolean default 1
url            varchar(255)                  # expuesta cuando accessible=1
summary        text
repo_provider  enum(github,gitlab,gitea,bitbucket,other)
repo_url / default_branch / visibility(public,private,internal)
jenkins_url    varchar(255)
environments   json  [{env,url,branch,jenkins_job,note}]
web_refs       json  -> infr_web_service id array
db_refs        json  -> infr_collector(database) key array
backup_targets json  [{kind,target,schedule,note}]
vault_key_ids  json  -> infr_vault_key id array (values stay in the vault)
secrets        json  [{label,location,ref,note}]  # lista de verificación, sin valores guardados
tags / meta    json

Esta pantalla no consulta en tiempo real. Solo recarga la lista al guardar, al eliminar o con el botón de actualizar (GET /service/projects/list). Del estado en tiempo real se ocupan Servicio ▸ Catálogo y Servicio ▸ Web.

Acceso

Acción Ruta Nivel mínimo
Lectura (index/list) GET /service/projects, /list 1 (demo, infr.auth)
Revelar valor de bóveda POST /service/projects/vault-reveal 1 (con auditoría)
Guardar (crear/actualizar) POST /service/projects/save 2 (staff)
Eliminar POST /service/projects/delete 2 (staff)

Resolución de problemas y preguntas frecuentes

Q. Pulso Guardar y recibo un 403. La escritura requiere nivel 2 o superior. Una cuenta de visualización (nivel 1) solo puede leer y revelar valores de la bóveda. Pida a un administrador que le suba el nivel.

Q. [Mostrar] devuelve un valor vacío. O bien esa entrada de la bóveda no contiene ningún secreto (hasSecret=false), o bien el descifrado ha fallado (por ejemplo, porque cambió APP_KEY). Vuelva a establecer el valor en Inventario ▸ Bóveda de claves. revealSecret() devuelve null cuando falla.

Q. No aparece nada en las listas de enlaces web/BD. Los servicios web deben existir primero en Servicio ▸ Web, y las opciones de BD requieren recolectores con access=database. Regístrelos, vuelva a abrir la ventana del proyecto y las opciones se rellenarán.

Q. Al guardar la clave (slug) aparece un error de formato. La clave solo admite letras minúsculas, dígitos, guiones y guiones bajos (^[a-z0-9_-]+$, máximo 60). Elimine espacios, mayúsculas y otros símbolos. La clave es opcional, así que puede dejarla en blanco.

Q. ¿Puedo lanzar un despliegue desde aquí? No. Los despliegues se ejecutan en Jenkins. Esta pantalla guarda la URL de Jenkins y los nombres de Job solo como documentación.

Q. ¿Puedo escribir el valor del secreto en una nota de secretos? Nunca. secrets es un mapa de ubicaciones que no guarda valores. Ponga el valor real en la bóveda cifrada de Inventario ▸ Bóveda de claves y haga referencia a él mediante vault_key_ids.

Relacionado

프로젝트 레지스트리
프로젝트 레지스트리