monedula-gitops
Apache Kafka のための GitOps ツール。トピック、アクセス、クォータ、スキーマ、SCRAM ユーザー、Confluent RBAC を CLI または Kubernetes オペレーターで扱います。
このページは英語から機械翻訳されています。 原文を読む
monedula-acl-rbac-converter v0.10.0, AGPL-3.0
monedula-acl-rbac-converter は、Kafka の ACL がどこにあっても読み取り、同等の Confluent RBAC のロールバインディングを計画して適用し、元の権限がすべて今も有効かどうかを MDS に問い合わせます。そのあとで初めて、古い ACL を削除するスクリプトを書き出します。
go install github.com/monedula-dev/monedula-acl-rbac-converter/cmd/monedula-acl-rbac@latest {
"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]
}
]
} 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
リポジトリの examples/text-dump/expected/ にある plan.json の抜粋。
ACL と RBAC は一対一には対応しません。
既存のクラスターを Confluent RBAC に移行するには、すべての ACL をロールバインディングに変える必要があります。DENY ルールのようにそもそも変換すべきでない ACL もあれば、どのマッピングルールにも一致しない ACL もあり、問題なく適用されたのに何の権限も付与しないバインディングもありえます。手作業では、どれも気づかれないまま失敗します。
extract9 種類のソースのいずれかから ACL を読み取り、正規化された acls.json にまとめます。
plan上書きできるデフォルトのルールで ACL をロールバインディングにマッピングします。report.txt はあなたが読んで確認します。
applyMDS にバインディングを作成します。--confirm がなければ何も変わりません。
verify元の権限がそれぞれ今も許可されているかを MDS に問い合わせます。
delete-acls削除スクリプトをロールバック付きで生成し、あなた自身が実行します。
verify は、ソース ACL ごとに、元のプリンシパル、操作、リソースが今実際に許可されているかを MDS に問い合わせます。単にバインディングの行が存在するかどうかではありません。クラスター ID が一致しないと、問題なく適用されるのに何の権限も付与しないバインディングができてしまいます。それを検出するのがこのチェックです。
monedula-acl-rbac verify \
--plan runs/2026-05-21T10-00-00Z/plan.json \
--mds-url https://mds.example.com \
--mds-token-file ~/.confluent/token スコープが広がることはありません。Topic:foo* に対するプレフィックス付き ACL は Topic:foo* に対するバインディングになり、クラスター全体への権限付与には決してなりません。計画にはチェックサムが付いており、古くなった計画や編集された計画は、あなたがバリデーションをやり直すまで拒否されます。
bindingsunmappedrejectedツールに MDS へのアクセスを与えれば、バインディングの適用と検証をツール自身が行います。あるいは、MDS の認証情報を今ある場所に置いたまま、あなたが計画を Confluent CLI のスクリプト、CFK の ConfluentRolebinding マニフェスト、または MDS の curl コマンドとして出力してパイプラインに適用させ、あとで MDS にアクセスできるホストから verify を実行することもできます。手早く確認したいときは、convert が extract、plan、emit を 1 回の呼び出しで実行します。
道筋の選び方(英語)
monedula-acl-rbac convert \
--from yaml \
--input acls.yaml \
--scopes scopes.yaml \
--rules rules.yaml \
--principals principals.yaml \
> bindings.sh どの実行も、入力のスナップショット、実効ルール、計画、ログ、ロールバックスクリプトを 1 つのディレクトリに保存し、どの認証情報ソースが使われたかも記録します。2 つの apply の実行が同じディレクトリで競合することはありません。
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
go install github.com/monedula-dev/monedula-acl-rbac-converter/cmd/monedula-acl-rbac@latest Linux、macOS、Windows 向けのリリースアーカイブは、cosign で署名されたチェックサムファイルと SBOM とともにリリースページにあります。詳しくはリリースのインストールと検証(英語)をご覧ください。
apply がソース ACL を削除することはなく、delete-acls は kafka-acls --remove スクリプトをロールバックスクリプトとともに書き出し、それをあなたが確認して実行します。スクリプトに含まれるのは verify に合格した ACL だけで、合格したものが 1 つもなければ、delete-acls はエラーで停止します。詳しくは変換済み ACL の削除(英語)をご覧ください。delete-deny-acls は、実行時に ACL ごとに実効権限を再チェックするスクリプトを生成します。また、ワイルドカードのプリンシパルに対する DENY は、このツールでは決して削除できません。詳しくは DENY ACL の削除(英語)をご覧ください。同じチームによる、Apache Kafka のための無料ツールがほかにもあります。Flock について
Apache Kafka のための GitOps ツール。トピック、アクセス、クォータ、スキーマ、SCRAM ユーザー、Confluent RBAC を CLI または Kubernetes オペレーターで扱います。
ブローカー、JVM、KIP-714 クライアントのメトリクスを OTLP で送る Kafka MetricsReporter プラグイン。collector が停止しても Kafka がブロックされることはありません。
実際の Kafka クラスターを共有可能な Kafka Simulator のリンクに変える、読み取り専用の Go CLI。AI エージェント向けの MCP サーバーも備えています。
ブラウザで動く、インタラクティブで決定的な Apache Kafka シミュレーター。クラスターを壊し、タイムラインをスクラブして、なぜそう反応したのかを読み解けます。