{"id":1595,"date":"2025-10-07T21:25:30","date_gmt":"2025-10-07T21:25:30","guid":{"rendered":"https:\/\/adrianotanaka.com.br\/?p=1595"},"modified":"2025-10-07T21:25:30","modified_gmt":"2025-10-07T21:25:30","slug":"oci-managed-kafka-ativando-e-usando-acls","status":"publish","type":"post","link":"https:\/\/adrianotanaka.com.br\/index.php\/2025\/10\/07\/oci-managed-kafka-ativando-e-usando-acls\/","title":{"rendered":"OCI Managed Kafka &#8211; Ativando e usando ACLs"},"content":{"rendered":"\n<p>O OCI Streaming with Apache Kafka \u00e9 um servi\u00e7o gerenciado da OCI que permite que voc\u00ea execute um cluster Kafka com todas as funcionalidades do Apache Kafka sem se preocupar em gerenciar a infraestrutura onde ele roda.<\/p>\n\n\n\n<p>Voc\u00ea tem duas op\u00e7\u00f5es para ativar a ACL:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Durante a cria\u00e7\u00e3o do cluster na tela de par\u00e2metros configurando essas linhas:<\/h2>\n\n\n\n<p><strong>allow.everyone.if.no.acl.found<\/strong> para false e <strong>authorizer <\/strong>para <strong>kafka.security.authorizer.AclAuthorizer<\/strong>, ficando algo assim:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"347\" height=\"183\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2025\/10\/image.png\" alt=\"\" class=\"wp-image-1596\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2025\/10\/image.png 347w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2025\/10\/image-300x158.png 300w\" sizes=\"auto, (max-width: 347px) 100vw, 347px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Ap\u00f3s o cluster criado<\/h2>\n\n\n\n<p>Caso o seu cluster j\u00e1 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.<\/p>\n\n\n\n<p>Vamos pegar qual a configura\u00e7\u00e3o que est\u00e1 aplicada ao cluster<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>oci kafka cluster get --kafka-cluster-id ocid1.kafkacluster.oc1.uk-london-1.xxxxx | grep config<\/code><\/pre>\n\n\n\n<p>Com o OCID da configura\u00e7\u00e3o podemos pegar quais os par\u00e2metros atuais, isso \u00e9 importante pois o processo para atualizar a config faz um replace da configura\u00e7\u00e3o atual!<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>oci kafka cluster-config get --kafka-cluster-config-id ocid1.kafkaclusterconfig.oc1.uk-london-1.xxxxx<\/code><\/pre>\n\n\n\n<p>Para facilitar as coisas, vamos salvar  os properties em um arquivo json e adicionar os par\u00e2metros que precisamos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n\"properties\": {\n<strong>\"allow.everyone.if.no.acl.found\": \"false\",<\/strong>\n\"auto.create.topics.enable\": \"true\",\n\"default.replication.factor\": \"1\",\n\"leader.imbalance.per.broker.percentage\": \"1\",\n\"min.insync.replicas\": \"1\",\n\"offsets.topic.replication.factor\": \"1\",\n\"transaction.state.log.min.isr\": \"1\",\n\"transaction.state.log.replication.factor\": \"1\",\n<strong>\"authorizer\":\"kafka.security.authorizer.AclAuthorizer\"<\/strong>\n}\n}<\/code><\/pre>\n\n\n\n<p>E agora podemos fazer um update da configura\u00e7\u00e3o passando esse .json como parametro:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>oci kafka cluster-config update --kafka-cluster-config-id ocid1.kafkaclusterconfig.oc1.uk-london-1.xxxxx  --latest-config file:\/\/params.json<\/code><\/pre>\n\n\n\n<p>Esse comando vai gerar uma nova vers\u00e3o da configura\u00e7\u00e3o, veja no campo version-number.<\/p>\n\n\n\n<p>Agora podemos atualizar a configura\u00e7\u00e3o no cluster com o seguinte comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>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<\/code><\/pre>\n\n\n\n<p>Onde o &#8211;cluster-config-version deve ser o version-number retornado pelo comando de update, aqui vai uma dica importante: Voc\u00ea pode reverter a configura\u00e7\u00e3o aplicada usando um version-number anterior.<\/p>\n\n\n\n<p>Com os parametros configurados j\u00e1 podemos criar as ACLs, aqui para facilitar estou usando um arquivo de configura\u00e7\u00e3o para meu superuser e outro para meu usu\u00e1rio comum. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;opc@b-tnk config]$ cat consumer_super_user.properties\nsecurity.protocol=SASL_SSL\nsasl.mechanism=SCRAM-SHA-512\nsasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=\"super-user-xxxx\" password=\"xxxxx\";\n\n\n&#91;opc@b-tnk config]$ cat consumer_tanaka.properties\nsecurity.protocol=SASL_SSL\nsasl.mechanism=SCRAM-SHA-512\nsasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=\"tanaka\" password=\"xxxxx\";\n\n<\/code><\/pre>\n\n\n\n<p>Para criar um usu\u00e1rio no cluster voc\u00ea pode usar o seguinte comando, perceba que estou passando o properties do superuser:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/kafka-configs.sh --bootstrap-server bootstrap-clstr-xxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 \\\n--alter --add-config 'SCRAM-SHA-512=&#91;iterations=8192,password=xxxx]' \\\n--entity-type users \\\n--entity-name tanaka \\\n--command-config ..\/config\/consumer_super_user.properties<\/code><\/pre>\n\n\n\n<p>Podemos criar um t\u00f3pico de teste<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/kafka-topics.sh --bootstrap-server bootstrap-clstr-xxxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 \\\n--command-config ..\/config\/consumer_super_user.properties \\\n--create --topic topico-tanaka2<\/code><\/pre>\n\n\n\n<p>E uma ACL permitindo que o usu\u00e1rio tanaka possa escrever em t\u00f3picos que comecem com topico-tanaka:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/kafka-acls.sh --bootstrap-server bootstrap-clstr-xxxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 \\\n--command-config ..\/config\/consumer_super_user.properties \\\n--add \\\n--allow-principal User:tanaka \\\n--operation Write \\\n--topic topico-tanaka \\\n--resource-pattern-type prefixed<\/code><\/pre>\n\n\n\n<p>E agora podemos validar que a ACL est\u00e1 funcionando, aqui como superuser eu consigo ver mais t\u00f3picos do que com o usu\u00e1rio normal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;opc@b-tnk bin]$ .\/kafka-topics.sh --bootstrap-server bootstrap-clstr-xxxxxx.kafka.uk-london-1.oci.oraclecloud.com:9092 --list\n--command-config ..\/config\/consumer_super_user.properties\n<strong>logs-app\nteste<\/strong>\ntopico-tanaka\ntopico-tanaka1\ntopico-tanaka2<\/code><\/pre>\n\n\n\n<p>E quando eu listo com o usu\u00e1rio tanaka:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;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\ntopico-tanaka\ntopico-tanaka1\ntopico-tanaka2<\/code><\/pre>\n\n\n\n<p>E com um terceiro usu\u00e1rio, com menos permiss\u00f5es(outras ACLs aplicadas):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;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\nlogs-app<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>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\u00e2metros podem ser alterados, voc\u00ea pode (e deve) consultar a documenta\u00e7\u00e3o oficial do servi\u00e7o: <a href=\"https:\/\/docs.public.content.oci.oraclecloud.com\/en-us\/iaas\/Content\/kafka\/config.htm\">https:\/\/docs.public.content.oci.oraclecloud.com\/en-us\/iaas\/Content\/kafka\/config.htm<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O OCI Streaming with Apache Kafka \u00e9 um servi\u00e7o gerenciado da OCI que permite que voc\u00ea execute um cluster Kafka com todas as funcionalidades do Apache Kafka sem se preocupar em gerenciar a infraestrutura onde ele roda. Voc\u00ea tem duas op\u00e7\u00f5es para ativar a ACL: Durante a cria\u00e7\u00e3o do cluster na tela de par\u00e2metros configurando [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"material-hide-sections":[],"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1595","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=1595"}],"version-history":[{"count":7,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1595\/revisions"}],"predecessor-version":[{"id":1603,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1595\/revisions\/1603"}],"wp:attachment":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=1595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=1595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=1595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}