使用 kafka-python 库
配置acl,new add,例子:
用户 user1 具有对 topic2 和 group2 组(消费者)的读取权限
用户user2 拥有topic2(生产者)的写权限
from kafka.admin import KafkaAdminClient, ACLPermissionType, ResourcePattern, ResourceType, ACL, ACLOperation, ACLFilter
brokers = 'localhost:9092'
admin = KafkaAdminClient(
bootstrap_servers=brokers,
security_protocol='SASL_PLAINTEXT',
sasl_mechanism='SCRAM-SHA-512',
sasl_plain_username='admin', # your privileged user
sasl_plain_password='admin12345' # password
)
acl1 = ACL(
principal="User:user1",
host="*",
operation=ACLOperation.READ,
permission_type=ACLPermissionType.ALLOW,
resource_pattern=ResourcePattern(ResourceType.TOPIC, 'topic2')
)
acl2 = ACL(
principal="User:user1",
host="*",
operation=ACLOperation.READ,
permission_type=ACLPermissionType.ALLOW,
resource_pattern=ResourcePattern(ResourceType.GROUP, 'group2')
)
acl3 = ACL(
principal="User:user2",
host="*",
operation=ACLOperation.WRITE,
permission_type=ACLPermissionType.ALLOW,
resource_pattern=ResourcePattern(ResourceType.TOPIC, 'topic2')
)
acls_result = admin.create_acls([acl1, acl2, acl3])
print(acls_result)
删除 acl
from kafka.admin import KafkaAdminClient, ACLPermissionType, ResourcePattern, ResourceType, ACL, ACLOperation, ACLFilter
brokers = 'localhost:9092'
admin = KafkaAdminClient(
bootstrap_servers=brokers,
security_protocol='SASL_PLAINTEXT',
sasl_mechanism='SCRAM-SHA-512',
sasl_plain_username='admin', # your privileged user
sasl_plain_password='admin12345' # password
)
delete_acls = admin.delete_acls(
[
ACLFilter(principal='User:user1',
host='*',
operation=ACLOperation.ANY,
permission_type=ACLPermissionType.ANY,
resource_pattern=ResourcePattern(ResourceType.TOPIC, 'topic2')),
ACLFilter(principal='User:user1',
host='*',
operation=ACLOperation.ANY,
permission_type=ACLPermissionType.ANY,
resource_pattern=ResourcePattern(ResourceType.GROUP, 'group2'))
]
)
print(delete_acls)
admin.delete_acls提交的数组,可以写多个ACLFilter来查找要删除的acls。
描述 acl
acl_filter = ACLFilter(
principal=None,
host='*',
operation=ACLOperation.ANY,
permission_type=ACLPermissionType.ANY,
resource_pattern=ResourcePattern(ResourceType.TOPIC,'topic2')
)
result = admin.describe_acls(acl_filter)
print(result)