monedula-acl-rbac-converter
Apache Kafka の ACL を、チェックサム付きの計画を通じて Confluent RBAC のロールバインディングに変換する CLI。ACL が削除される前に実効アクセスを検証します。
このページは英語から機械翻訳されています。 原文を読む
monedula-gitops v0.1.0, AGPL-3.0
トピック、アクセス、クォータ、スキーマ、SCRAM ユーザー、Confluent RBAC を Git 上の YAML として記述しておけば、monedula-gitops がそれを稼働中のクラスターと比較し、変わった部分だけを適用し、クラスターにドリフトが生じると CI を失敗させます。同じマニフェストを CLI からも Kubernetes オペレーターからも実行できます。
brew install monedula-dev/tap/monedula-gitops apiVersion: gitops.monedula.dev/v1alpha1
kind: KafkaTopic
metadata:
name: orders
spec:
clusterRef: { name: prod }
topicName: orders
partitions: 6
config:
retention.ms: "604800000"
access:
producers:
- principal: User:svc-checkout
consumers:
- principal: User:svc-fraud
group: fraud-orders monedula-gitops diff -f ./manifests --cluster-config-file ./cluster.yaml# preview: the topic, plus the ACLs its access block compiles tomonedula-gitops apply -f ./manifests --cluster-config-file ./cluster.yamlmonedula-gitops verify -f ./manifests --cluster-config-file ./cluster.yaml# exit 0: no drift. exit 1: drift, and the CI job fails.
Kafka の設定が一か所にまとまっていることは、めったにありません。
トピックはあるスクリプトから、ACL は別のスクリプトから、スキーマはアプリケーションのパイプラインから、クォータは管理者から、Confluent RBAC のロールバインディングはさらに別のツールから生まれます。時間が経つと、システムを記述しているのは稼働中のクラスターだけになり、その記述は誰もレビューしていません。
import cluster 稼働中のクラスターをマニフェストに変換します。
YAML + pull request Kubernetes スタイルの YAML で書かれた、トピック、アクセス、クォータ、スキーマ、SCRAM ユーザー、ロールバインディング。
diff diff と apply --dry-run が、まず稼働中のクラスターに対する計画を表示します。
apply 必要な操作だけが実行されます。プルーニングとリスクのある変更は、明示的なフラグを指定するまで実行されません。
verify verify はドリフトを見つけると終了コード 1 を返すので、定期実行の CI ジョブで Git を経由しない変更を検出できます。
ほとんどの Kafka ツールは、トピックをある場所に、そのアクセスを別の場所に置きます。monedula-gitops はアクセスをトピック自体に結び付けます。プロデューサーとコンシューマーを列挙すれば、対応するトピックとコンシューマーグループの ACL が生成されます。RBAC を使うクラスターでは、同じブロックを Confluent MDS のロールバインディングにコンパイルすることもできます。
プレフィックス付きのパターン、共有のコンシューマーグループ、ホストの制限が必要な場合は、独立した KafkaAccessPolicy リソースと KafkaRoleBinding リソースが使えます。
KafkaTopic + KafkaUseraccess ブロックを持つ 1 つの KafkaTopicimport cluster はトピック、ACL、クォータ、スキーマ、そしてサポートされている場合は RBAC のロールバインディングを読み取り、マニフェストを書き出します。そのマニフェストを同じクラスターに対して検証すると、ドリフトは報告されません。
クラスターをインポートする方法(英語)
monedula-gitops import cluster --cluster-config-file ./clusters/prod.yaml --output-dir ./imported
monedula-gitops verify -f ./imported -R --cluster-config-file ./clusters/prod.yaml # exits 0: no drift KafkaUser は SCRAM 認証情報を宣言するので、トピック、そのアクセス、それを使うプリンシパルが Git にまとめて置かれます。CLI はパスワードを環境変数またはファイルから読み取り、オペレーターは Kubernetes の Secret から読み取るか、パスワードを生成します。
KafkaRoleBinding は、ACL と並べて Confluent MDS のロールバインディングを管理します。
apiVersion: gitops.monedula.dev/v1alpha1
kind: KafkaUser
metadata:
name: svc-checkout
spec:
clusterRef: { name: prod }
password:
valueFrom: { env: SVC_CHECKOUT_PASSWORD } --dry-run はすべての変更をプレビューします。Git から取り除いたトピック、SCRAM ユーザー、クォータを、CLI が削除することはありません。--prune が削除するのは、マニフェストがまだ宣言している権限付与の範囲内にある ACL とロールバインディングだけです。パーティションの増加、スキーマ互換性の引き下げ、クォータ上限の削除のようなリスクのある変更は --allow-destructive を待ちます。Kubernetes では、トピックの削除ポリシーによって、リソースを削除したときにトピックも削除されるかどうかが決まり、Delete にはさらに allow-delete アノテーションが必要です。
安全ゲート(英語)
| 0 | 成功、または verify でドリフトなし |
|---|---|
| 1 | ドリフトを検出(verify) |
| 2 | バリデーション、設定、接続のエラー、または操作の失敗 |
| 3 | ゲート付きの操作だけが残っています。--allow-destructive を待っています |
brew install monedula-dev/tap/monedula-gitops go install github.com/monedula-dev/monedula-gitops/cmd/monedula-gitops@latest docker run --rm ghcr.io/monedula-dev/monedula-gitops:latest --help helm install monedula-gitops oci://ghcr.io/monedula-dev/charts/monedula-gitops Linux と macOS 向けのビルド済みバイナリはリリースページにあります。次のステップ:CLI を使い始める(英語)。
同じチームによる、Apache Kafka のための無料ツールがほかにもあります。Flock について
Apache Kafka の ACL を、チェックサム付きの計画を通じて Confluent RBAC のロールバインディングに変換する CLI。ACL が削除される前に実効アクセスを検証します。
ブローカー、JVM、KIP-714 クライアントのメトリクスを OTLP で送る Kafka MetricsReporter プラグイン。collector が停止しても Kafka がブロックされることはありません。
実際の Kafka クラスターを共有可能な Kafka Simulator のリンクに変える、読み取り専用の Go CLI。AI エージェント向けの MCP サーバーも備えています。
ブラウザで動く、インタラクティブで決定的な Apache Kafka シミュレーター。クラスターを壊し、タイムラインをスクラブして、なぜそう反応したのかを読み解けます。