Monedula

このページは英語から機械翻訳されています。 原文を読む

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

Kafka の ACL を RBAC へ移行し、アクセスを検証する

monedula-acl-rbac-converter は、Kafka の ACL がどこにあっても読み取り、同等の Confluent RBAC のロールバインディングを計画して適用し、元の権限がすべて今も有効かどうかを MDS に問い合わせます。そのあとで初めて、古い ACL を削除するスクリプトを書き出します。

Go
go install github.com/monedula-dev/monedula-acl-rbac-converter/cmd/monedula-acl-rbac@latest
runs/<timestamp>/plan.json(抜粋)
{
  "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 もあり、問題なく適用されたのに何の権限も付与しないバインディングもありえます。手作業では、どれも気づかれないまま失敗します。

9
ACL のソース。稼働中のクラスターから Strimzi や CFK のマニフェストまで
3
バインディングの受け渡し方法:シェルスクリプト、CFK マニフェスト、MDS curl
~10k
1 回の実行で扱う ACL の数。すべてメモリ上に保持します

仕組み

  1. 01

    抽出 extract

    9 種類のソースのいずれかから ACL を読み取り、正規化された acls.json にまとめます。

  2. 02

    計画 plan

    上書きできるデフォルトのルールで ACL をロールバインディングにマッピングします。report.txt はあなたが読んで確認します。

  3. 03

    適用 apply

    MDS にバインディングを作成します。--confirm がなければ何も変わりません。

  4. 04

    検証 verify

    元の権限がそれぞれ今も許可されているかを MDS に問い合わせます。

  5. 05

    クリーンアップ delete-acls

    削除スクリプトをロールバック付きで生成し、あなた自身が実行します。

  1. ソース ACL 稼働中のクラスター;kafka-acls のダンプ;JSON、YAML、CSV;Strimzi;CFK;Kubernetes
  2. plan.json すべての ACL をマッピング済み、未マッピング、却下に分類。チェックサム付き
  3. 道筋 A:apply MDS に適用し、実効アクセスを検証
    道筋 B:emit スクリプト、CFK マニフェスト、MDS curl をパイプラインへ
  4. ACL のクリーンアップ あなたが確認して実行する削除スクリプト
ソース ACL は 1 つのチェックサム付きの計画になり、古い ACL が廃止される前に、MDS に適用されるか、パイプライン向けに出力されます。

実効アクセスを検証

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

すべての ACL が 3 つのリストのどれかに入る

スコープが広がることはありません。Topic:foo* に対するプレフィックス付き ACL は Topic:foo* に対するバインディングになり、クラスター全体への権限付与には決してなりません。計画にはチェックサムが付いており、古くなった計画や編集された計画は、あなたがバリデーションをやり直すまで拒否されます。

bindings
作成するロールバインディング。それぞれが置き換えるソース ACL の ID を列挙します
unmapped
どのルールでも変換できなかった ACL。扱いはあなたが決めます
rejected
DENY ルールなど、このツールが変換しない ACL

MDS へのアクセスがあっても、なくても

ツールに 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
go install github.com/monedula-dev/monedula-acl-rbac-converter/cmd/monedula-acl-rbac@latest

Linux、macOS、Windows 向けのリリースアーカイブは、cosign で署名されたチェックサムファイルと SBOM とともにリリースページにあります。詳しくはリリースのインストールと検証(英語)をご覧ください。

よくある質問

monedula-acl-rbac-converter は無料ですか?仕事で使えますか?
はい、AGPL-3.0 ライセンスで有料版はなく、自社のインフラで実行しても、コードや設定を公開する義務は生じません。AGPL の義務は、改変の有無にかかわらずソフトウェアを配布する場合、または改変版をネットワーク経由で他者に利用させる場合に適用されます。
このツールは ACL を削除しますか?
ツールが自ら削除することはありません。apply がソース ACL を削除することはなく、delete-acls は kafka-acls --remove スクリプトをロールバックスクリプトとともに書き出し、それをあなたが確認して実行します。スクリプトに含まれるのは verify に合格した ACL だけで、合格したものが 1 つもなければ、delete-acls はエラーで停止します。詳しくは変換済み ACL の削除(英語)をご覧ください。
DENY ACL はどうなりますか?
自動で変換されることはなく、計画では却下として一覧に載ります。delete-deny-acls は、実行時に ACL ごとに実効権限を再チェックするスクリプトを生成します。また、ワイルドカードのプリンシパルに対する DENY は、このツールでは決して削除できません。詳しくは DENY ACL の削除(英語)をご覧ください。
どれくらいの数の ACL を扱えますか?
1 回の実行で扱えるのはおよそ 10,000 件の ACL までで、すべてメモリ上に保持します。それを超える場合は、プリンシパルごとに分割し、バッチごとに 1 つの実行ディレクトリを使ってください。

サポート

開発者自身によるサポート

大規模な環境で monedula-acl-rbac-converter を動かすために、設計から日々の運用まで私たちがお手伝いできます。

所属
Monedula Flock

同じチームによる、Apache Kafka のための無料ツールがほかにもあります。Flock について