OCI Managed Kafka – Ativando e usando ACLs

O OCI Streaming with Apache Kafka é um serviço gerenciado da OCI que permite que você execute um cluster Kafka com todas as funcionalidades do Apache Kafka sem se preocupar em gerenciar a infraestrutura onde ele roda.

Você tem duas opções para ativar a ACL:

Durante a criação do cluster na tela de parâmetros configurando essas linhas:

allow.everyone.if.no.acl.found para false e authorizer para kafka.security.authorizer.AclAuthorizer, ficando algo assim:

Após o cluster criado

Caso o seu cluster já esteja no ar e queira ativar as ACLs, o processo atualmente precisa ser feito via oci cli ou API, no nosso caso vamos usar o OCI CLI.

Vamos pegar qual a configuração que está aplicada ao cluster

oci kafka cluster get --kafka-cluster-id ocid1.kafkacluster.oc1.uk-london-1.xxxxx | grep config

Com o OCID da configuração podemos pegar quais os parâmetros atuais, isso é importante pois o processo para atualizar a config faz um replace da configuração atual!

oci kafka cluster-config get --kafka-cluster-config-id ocid1.kafkaclusterconfig.oc1.uk-london-1.xxxxx

Para facilitar as coisas, vamos salvar os properties em um arquivo json e adicionar os parâmetros que precisamos:

{
"properties": {
"allow.everyone.if.no.acl.found": "false",
"auto.create.topics.enable": "true",
"default.replication.factor": "1",
"leader.imbalance.per.broker.percentage": "1",
"min.insync.replicas": "1",
"offsets.topic.replication.factor": "1",
"transaction.state.log.min.isr": "1",
"transaction.state.log.replication.factor": "1",
"authorizer":"kafka.security.authorizer.AclAuthorizer"
}
}

E agora podemos fazer um update da configuração passando esse .json como parametro:

oci kafka cluster-config update --kafka-cluster-config-id ocid1.kafkaclusterconfig.oc1.uk-london-1.xxxxx  --latest-config file://params.json

Esse comando vai gerar uma nova versão da configuração, veja no campo version-number.

Agora podemos atualizar a configuração no cluster com o seguinte comando:

oci kafka cluster update --kafka-cluster-id ocid1.kafkacluster.oc1.uk-london-1.xxxxxx --cluster-config-id ocid1.kafkaclusterconfig.oc1.uk-london-1.xxxxxxx --cluster-config-version XXX

Onde o –cluster-config-version deve ser o version-number retornado pelo comando de update, aqui vai uma dica importante: Você pode reverter a configuração aplicada usando um version-number anterior.

Com os parametros configurados já podemos criar as ACLs, aqui para facilitar estou usando um arquivo de configuração para meu superuser e outro para meu usuário comum.

[opc@b-tnk config]$ cat consumer_super_user.properties
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="super-user-xxxx" password="xxxxx";


[opc@b-tnk config]$ cat consumer_tanaka.properties
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="tanaka" password="xxxxx";

Para criar um usuário no cluster você pode usar o seguinte comando, perceba que estou passando o properties do superuser:

./kafka-configs.sh --bootstrap-server bootstrap-clstr-xxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 \
--alter --add-config 'SCRAM-SHA-512=[iterations=8192,password=xxxx]' \
--entity-type users \
--entity-name tanaka \
--command-config ../config/consumer_super_user.properties

Podemos criar um tópico de teste

./kafka-topics.sh --bootstrap-server bootstrap-clstr-xxxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 \
--command-config ../config/consumer_super_user.properties \
--create --topic topico-tanaka2

E uma ACL permitindo que o usuário tanaka possa escrever em tópicos que comecem com topico-tanaka:

./kafka-acls.sh --bootstrap-server bootstrap-clstr-xxxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 \
--command-config ../config/consumer_super_user.properties \
--add \
--allow-principal User:tanaka \
--operation Write \
--topic topico-tanaka \
--resource-pattern-type prefixed

E agora podemos validar que a ACL está funcionando, aqui como superuser eu consigo ver mais tópicos do que com o usuário normal:

[opc@b-tnk bin]$ ./kafka-topics.sh --bootstrap-server bootstrap-clstr-xxxxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 --list
--command-config ../config/consumer_super_user.properties
logs-app
teste
topico-tanaka
topico-tanaka1
topico-tanaka2

E quando eu listo com o usuário tanaka:

[opc@b-tnk bin]$ ./kafka-topics.sh --bootstrap-server bootstrap-clstr-xxxxxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 --list --command-config ../config/consumer_tanaka.properties
topico-tanaka
topico-tanaka1
topico-tanaka2

E com um terceiro usuário, com menos permissões(outras ACLs aplicadas):

[opc@b-tnk bin]$ ./kafka-topics.sh --bootstrap-server bootstrap-clstr-xxxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 --list --command-config ../config/consumer_user.properties
logs-app

Esse foi um exemplo bem simples de como a ACL pode ser implementada no OCI Streaming With Kafka, caso queira mais detalhes de quais parâmetros podem ser alterados, você pode (e deve) consultar a documentação oficial do serviço: https://docs.public.content.oci.oraclecloud.com/en-us/iaas/Content/kafka/config.htm

chevron_left