ACL の概要
Kafka の database へのアクセスは独立した 2 段階で制御します。この 2 つを混同することが、アプリケーションが接続には成功するのにすべての操作で失敗する典型的な原因です。
| 段階 | 役割 | これがないと |
|---|---|---|
| Kafka user | SASL で client を database に認証します | client はそもそも接続できません |
| ACL | その user に特定の topic と consumer group への権限を与えます | client は接続できても何にもアクセスできません |
producer、consumer、Kafka Connect はいずれも Kafka user として認証します。この機能は Kafka engine のみが対象です。
注記
ACL のない Kafka user は何にもアクセスできません。user を作成したら ACL を付与してください。
SASL のメカニズム
user は PLAIN、SCRAM-SHA256、SCRAM-SHA512 のいずれかのメカニズムで作成します。この選択は強度だけの問題ではありません。
警告
SASL/PLAIN で user を作成または更新すると Kafka の database が再起動し、producer と consumer が中断します。SCRAM のメカニズムでは再起動しません。SCRAM を優先するか、PLAIN の変更は負荷の低い時間帯に計画してください。
ACL で付与できる権限
ACL は database 単位で適用され、再起動なしで即座に反映されます。それぞれの ACL で resource type、prefix、許可する操作を指定します。1 つの user が複数の ACL を持てます。
Topic の場合:
| 操作 | 許可される内容 |
|---|---|
| All | topic に対するすべての操作。 |
| Alter | Kafka UI での topic の DANGER パラメータの編集。 |
| AlterConfigs | Kafka UI での topic の DANGER 以外のパラメータの編集。 |
| Read | topic の内容の読み取り。 |
| Write | topic へのデータの書き込み。 |
Consumer group の場合:
| 操作 | 許可される内容 |
|---|---|
| Delete | group の削除。 |
| Describe | group の詳細の表示。 |
| Read | group の内容の読み取り。 |
適用範囲は prefix で決まります。All を入力するとすべての topic またはすべての consumer group が対象になり、それ以外の値を入力すると、その値で始まる名前のリソースが対象になります。
安全に運用するために
- アプリケーションやサービスごとに user を 1 つ作成し、他に影響を与えずに権限を取り消せるようにします。
- リソース単位ではなく prefix 単位で付与します。prefix の ACL は topic が増えても機能し続けます。
- アーキテクチャ上可能であれば、producer と consumer の権限を別々の user に分けます。
- All は明確な理由がある場合にのみ付与します。
- パスワードは定期的に変更し、ACL の一覧を見直してアプリケーションが使わなくなったものを削除します。
- PLAIN のメカニズムは再起動を伴うため、繁忙時間帯の user 作成は避けます。
次のステップ
- ACL の設定。user を作成して権限を付与します
- Kafka の NAT 設定。VPC の外から database に接続します
- Action Log の表示。誰が何を変更したかを確認します