> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mka1.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Artefactos firmados y cadena de suministro

> Cómo MKA1 garantiza la integridad de las imágenes de contenedores mediante el etiquetado inmutable de artefactos, pipelines CI/CD controlados y la aplicación de registros privados.

MKA1 aplica una cadena de suministro determinista donde cada imagen de contenedor es rastreable a un commit específico de origen, construida exclusivamente a través de pipelines CI automatizados y almacenada en registros privados que rechazan artefactos externos.

## Qué está activo

### Etiquetado inmutable de artefactos

Cada imagen de contenedor construida por la plataforma se etiqueta con el SHA del commit de git de origen. Esto crea un vínculo inmutable y uno a uno entre el código fuente y el binario desplegado:

* Las imágenes se suben a Amazon ECR con etiquetas de commit-SHA (por ejemplo, `sha-a1b2c3d`), asegurando que cada artefacto sea identificable de manera única.
* Los repositorios ECR están configurados como registros privados limitados a la cuenta de AWS de la organización.
* Las políticas de ciclo de vida de ECR aplican una ventana de retención de 30 días para imágenes con commit-SHA, manteniendo solo la etiqueta `latest` indefinidamente.

### Pipeline CI/CD controlado

Todas las imágenes de contenedor se originan en flujos de trabajo de GitHub Actions -- no se permiten subidas manuales de imágenes:

* Los flujos de despliegue se autentican con AWS mediante federación OIDC (sin credenciales de larga duración).
* GitHub Actions utiliza versiones fijadas de acciones para construcciones reproducibles y deterministas.
* Docker Buildx produce imágenes multiplataforma desde un entorno de construcción consistente.
* La integridad de las dependencias se verifica durante las construcciones (por ejemplo, `go mod verify` para módulos Go).
* El acceso a módulos privados se controla mediante PATs de GitHub con alcance limitado en lugar de credenciales amplias.

### Aplicación de registros privados

Los despliegues de Kubernetes obtienen imágenes exclusivamente de nuestros registros privados de Amazon ECR:

* Todos los manifiestos de servicios hacen referencia a URIs de imágenes ECR completamente calificadas dentro de la cuenta de AWS de la organización.
* No se hace referencia a registros públicos o de terceros en cargas de trabajo de producción.
* El escaneo nativo de vulnerabilidades de ECR está habilitado, proporcionando una evaluación automatizada del contenido de las imágenes.

### Gestión de secretos y claves

* Todos los secretos se cifran en reposo usando SOPS con una clave KMS de AWS gestionada por el cliente.
* Los secretos nunca se almacenan en texto plano en el repositorio ni en los registros de CI.
* El acceso al clúster de Kubernetes está gobernado por RBAC integrado con IAM, restringiendo quién puede interactuar con cargas de trabajo y registros.

## Cómo lo validamos

Validamos la cadena de suministro mediante revisión de infraestructura como código e inspección en vivo del clúster.

**Rastreabilidad de origen a imagen:** Cada etiqueta de imagen desplegada se asigna a un SHA de commit de git. Dado cualquier contenedor en ejecución, podemos identificar la revisión exacta del código fuente:

```bash theme={null}
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}'
```

**Verificación del origen del registro:** Confirmamos que todas las cargas de trabajo en ejecución obtienen imágenes exclusivamente de nuestro ECR privado:

```bash theme={null}
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.spec.containers[*].image}{"\n"}{end}' | sort -u
```

**Auditoría del pipeline de CI:** Las ejecuciones de los flujos de trabajo de GitHub Actions se registran y auditan, proporcionando un historial completo de quién activó cada construcción y qué commit produjo cada imagen.

## Evidencia

### Imagen de ECR con etiqueta de commit-SHA

```text theme={null}
REPOSITORY                          TAG              DIGEST
[redacted-account].dkr.ecr.us-west-2...   sha-a1b2c3d      sha256:[redacted]
[redacted-account].dkr.ecr.us-west-2...   latest           sha256:[redacted]
```

### Pods de Kubernetes obteniendo imágenes desde ECR privado

```text theme={null}
mkllm-gateway-...     [redacted-account].dkr.ecr.us-west-2.amazonaws.com/mkllm-gateway:sha-[redacted]
mkllm-worker-...      [redacted-account].dkr.ecr.us-west-2.amazonaws.com/mkllm-worker:sha-[redacted]
mk1-api-...           [redacted-account].dkr.ecr.us-west-2.amazonaws.com/mk1-api:sha-[redacted]
kong-...               [redacted-account].dkr.ecr.us-west-2.amazonaws.com/kong:sha-[redacted]
```

### Flujo de trabajo de GitHub Actions que aplica construcciones solo desde CI

```yaml theme={null}
# Fragmento de deploy-mk1.yaml
on:
  push:
    branches: [main]
    paths: ["mk1/**"]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: aws-actions/configure-aws-credentials@v4
      - uses: aws-actions/amazon-ecr-login@v2
      - run: skaffold run -p ${{ matrix.environment }}
```
