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

# Resumen de política

> El único archivo YAML que controla qué hosts pueden solicitar qué certificados.

El broker aplica un único archivo de política declarativa (`policy.path` en `broker.yml`). Define **perfiles** (la forma de una solicitud) y **hosts** (qué identidades pueden pedir qué perfiles).

El esquema autoritativo es [`schemas/policy.schema.json`](https://github.com/TaconeoMental/Certplane/blob/main/schemas/policy.schema.json).

## Política mínima

```yaml theme={null}
version: 1

profiles:
  public_edge_main:
    type: wildcard
    dns_names:
      - "*.example.com"
    acme:
      challenge: dns-01
      credentials: cloudflare/example-com
    renew_before: 720h

hosts:
  edge01:
    identity: edge01.h.int.example.com
    profiles:
      - public_edge_main
```

## Claves de nivel superior

| Clave      | Obligatoria | Notas                                                                        |
| ---------- | ----------- | ---------------------------------------------------------------------------- |
| `version`  | no          | Debe ser `1` si se da. Reservado para migraciones futuras. Por defecto: `1`. |
| `profiles` | sí          | Map nombre → definición. Al menos uno.                                       |
| `hosts`    | sí          | Map etiqueta → definición. Al menos uno.                                     |

El broker rechaza claves desconocidas (`additionalProperties: false`).

## Cómo se autoriza una solicitud

Cuando un agente llama a `POST /v1/certificates`:

1. El broker lee el **CN** del certificado cliente (la identidad).
2. Busca esa identidad en `hosts.<etiqueta>.identity`. Si ningún host coincide, deniega.
3. El `profile` solicitado (cuerpo JSON) debe aparecer en los `profiles` del host.
4. Los DNS del CSR deben satisfacer los `dns_names` del perfil — los wildcard exigen que las SAN caigan bajo el wildcard; los `multi_san` exigen que las SAN estén exactamente en la lista permitida.
5. Si pasa todo, sirve un bundle cacheado o emite por ACME.

Cada decisión queda en el log de auditoría.

## Recarga en caliente

`policy.watch: true` en `broker.yml` recarga al cambiar el archivo. El broker registra el nuevo hash, útil para correlacionar recargas con el stream de auditoría.

## Validar antes de desplegar

```bash theme={null}
certplane-broker -c /etc/certplane/broker.yml policy validate --policy /etc/certplane/policy.yml
```

Compila la política con el mismo código que usa el servidor. Si va bien imprime:

```
policy ok: hash=abc123… profiles=N identities=M
```

El mismo hash aparece en el arranque del broker y en los eventos de auditoría, lo que facilita confirmar qué política está activa.

## Sigue con

* [Perfiles](/es/policy/profiles)
* [Hosts](/es/policy/hosts)
