Monedula

Esta página se tradujo automáticamente del inglés. Leer el original

monedula-acl-rbac-converter v0.10.0, AGPL-3.0

Migra las ACL de Kafka a RBAC y verifica el acceso

monedula-acl-rbac-converter lee tus ACL de Kafka estén donde estén, planifica los role bindings RBAC de Confluent equivalentes, los aplica y pregunta a MDS si cada permiso original sigue vigente. Solo entonces escribe el script que elimina las ACL antiguas.

Go
go install github.com/monedula-dev/monedula-acl-rbac-converter/cmd/monedula-acl-rbac@latest
runs/<timestamp>/plan.json (extracto)
{
  "schema_version": "1",
  "bindings": [
    {
      "id": "rb-b6fac2ae9aa0",
      "action": "CREATE",
      "principal": "User:svc-analytics",
      "role": "DeveloperRead",
      "scope": { "kafka_cluster": "lkc-demo-1" },
      "resource_patterns": [
        { "resource_type": "Topic", "name": "events.", "pattern_type": "PREFIXED" }
      ],
      "source_acl_ids": [11, 12]
    }
  ]
}
terminal
RUN=runs/2026-05-21T10-00-00Zmonedula-acl-rbac extract --from text --input acls.txt --out $RUN/acls.jsonmonedula-acl-rbac plan --acls $RUN/acls.json --rules rules.yaml --principals principals.yaml --scopes scopes.yaml --out $RUN/plan.jsonmonedula-acl-rbac auth login --mds-url https://mds.example.commonedula-acl-rbac apply --plan $RUN/plan.json --mds-url https://mds.example.com --confirmmonedula-acl-rbac verify --plan $RUN/plan.json --mds-url https://mds.example.com# exit 0: every source ACL is still allowed; exit 5: some access is missing or unknown

Extracto de plan.json de examples/text-dump/expected/ en el repositorio.

El problema

Las ACL y el RBAC no se mapean uno a uno.

Pasar un clúster existente al RBAC de Confluent significa convertir cada ACL en un role binding. Algunas ACL, como las reglas DENY, no deberían convertirse en absoluto, otras no coinciden con ninguna regla de mapeo, y un binding puede aplicarse sin errores y aun así no conceder nada. Hecho a mano, cada uno de estos casos falla en silencio.

9
fuentes de ACL, desde un clúster en vivo hasta manifiestos de Strimzi y CFK
3
formas de entregar los bindings: script de shell, manifiesto CFK, curl a MDS
~10k
ACL por ejecución, en memoria

Cómo funciona

  1. 01

    Extraer extract

    Lee las ACL de cualquiera de las nueve fuentes y vuélcalas en un acls.json canónico.

  2. 02

    Planificar plan

    Mapéalas a role bindings con reglas por defecto que puedes sobrescribir; lee report.txt.

  3. 03

    Aplicar apply

    Crea los bindings en MDS. Nada cambia sin --confirm.

  4. 04

    Verificar verify

    Pregunta a MDS si cada permiso original sigue permitido.

  5. 05

    Retirar delete-acls

    Genera el script de eliminación, con su script de rollback, y ejecútalo tú mismo.

  1. ACL de origen clúster en vivo; volcado de kafka-acls; JSON, YAML, CSV; Strimzi; CFK; Kubernetes
  2. plan.json cada ACL mapeada, sin mapear o rechazada; con checksum
  3. Camino A: apply a MDS, y luego verificar el acceso efectivo
    Camino B: emit script, manifiesto CFK, curl a MDS para tu pipeline
  4. Retirar las ACL un script de eliminación que inspeccionas y ejecutas tú
Las ACL de origen se convierten en un único plan con checksum, que se aplica a MDS o se emite para tu pipeline antes de que se retiren las ACL antiguas.

Acceso efectivo, verificado

verify pregunta a MDS, para cada ACL de origen, si el principal, la operación y el recurso originales están realmente permitidos ahora, no solo si existe una fila de binding. Un ID de clúster que no coincide produce bindings que se aplican sin errores y no conceden nada; esta es la comprobación que lo detecta.

terminal
monedula-acl-rbac verify \
  --plan runs/2026-05-21T10-00-00Z/plan.json \
  --mds-url https://mds.example.com \
  --mds-token-file ~/.confluent/token

Cada ACL acaba en una de tres listas

El alcance nunca se amplía: una ACL con prefijo sobre Topic:foo* se convierte en un binding sobre Topic:foo*, nunca en un permiso para todo el clúster. Los planes llevan checksum, y un plan obsoleto o editado se rechaza hasta que lo vuelvas a validar.

bindings
role bindings que se crearán, cada uno con los ID de las ACL de origen que sustituye
unmapped
ACL que ninguna regla pudo traducir; tú decides qué hacer con ellas
rejected
ACL que la herramienta no convierte, como las reglas DENY

Con acceso a MDS, o sin él

Da acceso a MDS a la herramienta y aplicará y verificará los bindings por sí misma. O deja las credenciales de MDS donde están: emite el plan como un script de Confluent CLI, manifiestos CFK ConfluentRolebinding o comandos curl a MDS, deja que tu pipeline los aplique y ejecuta verify más tarde desde un host con acceso a MDS. Para echar un vistazo rápido, convert ejecuta extract, plan y emit en una sola llamada.

Elegir un camino (en inglés)

conversión todo en uno
monedula-acl-rbac convert \
  --from yaml \
  --input acls.yaml \
  --scopes scopes.yaml \
  --rules rules.yaml \
  --principals principals.yaml \
  > bindings.sh

Un directorio de ejecución que puedes enseñar a un auditor

Cada ejecución guarda la instantánea de entrada, las reglas efectivas, el plan, los logs y los scripts de rollback en un solo directorio, con constancia de qué fuente de credenciales se usó. Dos ejecuciones de apply no pueden pisarse en el mismo directorio.

runs/2026-05-21T10-00-00Z/
  acls.json          source ACL snapshot
  plan.json          checksummed plan
  report.txt         what maps to what, and why
  would-apply.log    dry-run calls
  apply.log          what was created
  verify.json        effective-access results
  delete-acls.sh     generated, run by you

Instalación

Go
go install github.com/monedula-dev/monedula-acl-rbac-converter/cmd/monedula-acl-rbac@latest

Los paquetes de release para Linux, macOS y Windows, con un archivo de checksums firmado con cosign y un SBOM, están en la página de releases. Consulta instalar y verificar una release (en inglés).

Preguntas

¿monedula-acl-rbac-converter es gratuito y puedo usarlo en el trabajo?
Sí. Tiene licencia AGPL-3.0, sin edición de pago, y ejecutarlo en tu propia infraestructura no te obliga a compartir tu código ni tu configuración: las obligaciones de la AGPL se aplican cuando lo distribuyes, modificado o no, o cuando permites que otros usen una versión modificada a través de una red.
¿Eliminará mis ACL?
No por sí mismo: apply nunca elimina las ACL de origen, y delete-acls escribe un script kafka-acls --remove, con su rollback, para que lo inspecciones y lo ejecutes tú. El script solo incluye las ACL que superaron verify; si ninguna lo superó, delete-acls se detiene con un error. Consulta eliminar las ACL convertidas (en inglés).
¿Qué pasa con las ACL DENY?
Nunca se convierten automáticamente; el plan las lista como rechazadas. delete-deny-acls genera un script que vuelve a comprobar los permisos efectivos de cada ACL al ejecutarse, y las ACL DENY con principal comodín nunca pueden eliminarse mediante la herramienta. Consulta quitar las ACL DENY (en inglés).
¿Cuántas ACL puede manejar?
Hasta unas 10.000 ACL por ejecución, que se mantienen en memoria. Si hay más, divídelas por principal, con un directorio de ejecución por lote.

Soporte

Ayuda de quienes lo desarrollan

Podemos ayudarte a usar monedula-acl-rbac-converter en una infraestructura grande, desde el diseño hasta la operación diaria.

Parte de
Monedula Flock

Más herramientas gratuitas para Apache Kafka del mismo equipo. Acerca de Flock