Acesso de uma instância do Kafka com SASL
Se você habilitar SASL_SSL ao criar uma instância, os dados serão criptografados antes da transmissão para maior segurança.
Para fins de segurança, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, e TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 são compatíveis com instâncias criadas em e antes de 20 de março de 2021. TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 também é compatível com instâncias criadas após 20 de março de 2021.
Esta seção descreve como usar um cliente de Kafka de código aberto para acessar uma instância do Kafka se a SASL tiver sido habilitada para a instância. Há dois cenários. Para acesso entre VPCs, consulte Acesso entre VPCs a uma instância do Kafka. Para acesso baseado em DNAT, consulte Uso de DNAT para acessar uma instância do Kafka.
- Se o acesso de texto não criptografado dentro da VPC estiver ativado para uma instância, os dados serão transmitidos em texto não criptografado quando você se conectar à instância por meio de uma rede privada. Para obter detalhes sobre como se conectar, consulte Acesso de uma instância do Kafka sem SASL.
- Para instâncias compradas em julho de 2020 e posteriormente, cada broker de Kafka permite no máximo 1.000 conexões de cada endereço IP por padrão. Para instâncias compradas antes de julho de 2020, cada broker de Kafka permite no máximo 200 conexões de cada endereço IP por padrão. O excesso de conexões será rejeitado. Você pode alterar o limite referindo-se a Modificação de parâmetros do Kafka.
Pré-requisitos
- As regras do grupo de segurança foram configuradas adequadamente.
Para acessar uma instância do Kafka com SASL habilitada, configure as regras de grupo de segurança adequadas. Para obter detalhes sobre os requisitos de configuração do grupo de segurança, consulte Tabela 2.
- O endereço de conexão da instância foi obtido.
- Para acesso dentro da VPC, use a porta 9093. Obtenha o endereço de conexão da instância na seção Connection da página de guia Basic Information.
Figura 1 Endereços de conexão de instância do Kafka para acesso dentro da VPC sem SASL (nas regiões exceto CN North-Beijing4, CN East-Shanghai1 e CN South-Guangzhou)
Figura 2 Endereços de conexão de instância do Kafka para acesso dentro da VPC com SASL (nas regiões CN North-Beijing4, CN East-Shanghai1 e CN South-Guangzhou)
- Para acesso público, use a porta 9095. Obtenha o endereço de conexão da instância na seção Connection da página de guia Basic Information.
Figura 3 Endereços de conexão de instância do Kafka para acesso público com SASL (nas regiões exceto CN North-Beijing4, CN East-Shanghai1 e CN South-Guangzhou)
Figura 4 Endereços de conexão de instância do Kafka para acesso público com SASL (nas regiões CN North-Beijing4, CN East-Shanghai1 e CN South-Guangzhou)
- Para acesso dentro da VPC, use a porta 9093. Obtenha o endereço de conexão da instância na seção Connection da página de guia Basic Information.
- O mecanismo de SASL em uso é conhecido.
Na área Connection na página de detalhes da instância do Kafka, visualize SASL Mechanism. Se ambos SCRAM-SHA-512 e PLAIN estiverem habilitados, configure um deles para conexões. Se SASL Mechanism não for exibido, PLAIN será usado por padrão.
Figura 5 Mecanismo SASL em uso
- O protocolo de segurança em uso é conhecido.
Na área de Connection na página de detalhes da instância do Kafka, visualize Security Protocol. Se Security Protocol não for exibido, SASL_SSL será usado por padrão.
- Se a criação automática de tópicos não estiver ativada para a instância de Kafka, crie um tópico antes de se conectar à instância.
- O certificado client.truststore.jks foi baixado. Clique na instância do Kafka para ir para a página de guia Basic Information. Clique em Download ao lado de SSL Certificate na área Connection. Baixe e descompacte o pacote para obter o arquivo de certificado do client.truststore.jks.
- CLI do Kafka v1.1.0, v2.3.0 ou v2.7.2 está disponível. Certifique-se de que a instância do Kafka e a CLI sejam da mesma versão.
- Foi criado um ECS. Para acesso dentro da VPC, certifique-se de que as configurações de VPC, sub-rede e grupo de segurança sejam as mesmas da instância do Kafka. JDK v1.8.111 ou posterior foi instalado no ECS, e as variáveis de ambiente JAVA_HOME e PATH foram configuradas da seguinte forma:
Adicione as seguintes linhas ao arquivo .bash_profile no diretório base como um usuário autorizado. Neste comando, /opt/java/jdk1.8.0_151 é o caminho de instalação do JDK. Altere-o para o caminho onde você instala o JDK.
export JAVA_HOME=/opt/java/jdk1.8.0_151 export PATH=$JAVA_HOME/bin:$PATH
Execute o comando source .bash_profile para que a modificação tenha efeito.
Acesso da instância usando a CLI
O seguinte usa o Linux como exemplo.
- Mapeie hosts para endereços IP no arquivo /etc/hosts no host em que o cliente está localizado, para que o cliente possa analisar rapidamente os agentes de instância.
Defina endereços IP para os endereços de conexão da instância obtidos em Pré-requisitos. Defina hosts para os nomes de hosts de instância. Especifique um nome exclusivo para cada host.
Por exemplo:
10.154.48.120 server01
10.154.48.121 server02
10.154.48.122 server03
- Descompacte o pacote da CLI do Kafka.
Acesse o diretório onde o pacote da CLI está armazenado e execute o seguinte comando para descompactar o pacote:
tar -zxf [kafka_tar]
No comando anterior, [kafka_tar] indica o nome do pacote da CLI.
Por exemplo:
tar -zxf kafka_2.12-2.7.2.tgz
- Modifique o arquivo de configuração da CLI do Kafka com base no mecanismo SASL.
- Se PLAIN for usado, localize os arquivos consumer.properties e producer.properties no diretório /config da CLI do Kafka e adicione o seguinte conteúdo aos arquivos:
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \ username="**********" \ password="**********"; sasl.mechanism=PLAIN
Descrição do parâmetro:
username e password: nome de usuário e senha definidos ao ativar SASL_SSL durante a criação da instância do Kafka ou ao criar um usuário de SASL_SSL.
- Se SCRAM-SHA-512 for usado, localize os arquivos consumer.properties e producer.properties no diretório /config da CLI do Kafka e adicione o seguinte conteúdo aos arquivos:
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ username="**********" \ password="**********"; sasl.mechanism=SCRAM-SHA-512
Descrição do parâmetro:
username e password: nome de usuário e senha definidos ao ativar SASL_SSL durante a criação da instância do Kafka ou ao criar um usuário de SASL_SSL.
- Se PLAIN for usado, localize os arquivos consumer.properties e producer.properties no diretório /config da CLI do Kafka e adicione o seguinte conteúdo aos arquivos:
- Modifique o arquivo de configuração da CLI do Kafka com base no protocolo de segurança.
- SASL_SSL: localize os arquivos consumer.properties e producer.properties no diretório /config da CLI do Kafka e adicione o seguinte conteúdo aos arquivos:
security.protocol=SASL_SSL ssl.truststore.location={ssl_truststore_path} ssl.truststore.password=dms@kafka ssl.endpoint.identification.algorithm=
Descrição do parâmetro:
- ssl.truststore.location: caminho para armazenar o certificado client.jks. Mesmo no Windows, você precisa usar barras (/) para o caminho do certificado. Não use barras invertidas (\), que são usadas por padrão para caminhos no Windows. Caso contrário, o cliente não conseguirá obter o certificado.
- ssl.truststore.password: senha do certificado do servidor, que deve ser definida como dms@kafka e não pode ser alterada.
- ssl.endpoint.identification.algorithm: se deve verificar o nome de domínio do certificado. Esse parâmetro deve ser deixado em branco, o que indica desabilitar a verificação de nome de domínio.
- SASL_PLAINTEXT: localize os arquivos consumer.properties e producer.properties no diretório /config da CLI do Kafka e adicione o seguinte conteúdo aos arquivos:
security.protocol=SASL_PLAINTEXT
- SASL_SSL: localize os arquivos consumer.properties e producer.properties no diretório /config da CLI do Kafka e adicione o seguinte conteúdo aos arquivos:
- Acesse o diretório /bin da CLI do Kafka.
No Windows, você precisa acessar o diretório /bin/windows.
- Execute o seguinte comando para criar mensagens:
./kafka-console-producer.sh --broker-list ${connection-address} --topic ${topic-name} --producer.config ../config/producer.properties
Descrição do parâmetro:
- {connection-address}: o endereço obtido em Pré-requisitos. Para acesso público, use Instance Address (Public Network)/Address (Public Network, Ciphertext). Para acesso dentro da VPC, use Instance Address (Private Network)/Address (Private Network, Ciphertext).
- {topic-name}: the name of the topic created for the Kafka instance If automatic topic creation has enabled for the Kafka instance, set this parameter to the name of a created topic or a topic that has not been created.
O exemplo a seguir usa endereços de conexão 10.3.196.45:9095,10.78.42.127:9095,10.4.49.103:9095.
Depois de executar o comando anterior, você pode enviar uma mensagem para a instância do Kafka escrevendo-a e pressionando Enter. Cada linha de conteúdo é enviada como uma mensagem.
[root@ecs-kafka bin]#./kafka-console-producer.sh --broker-list 10.3.196.45:9095,10.78.42.127:9095,10.4.49.103:9095 --topic topic-demo --producer.config ../config/producer.properties >Hello >DMS >Kafka! >^C[root@ecs-kafka bin]#
Para parar de criar mensagens, pressione Ctrl+C para sair.
- Execute o seguinte comando para recuperar mensagens:
./kafka-console-consumer.sh --bootstrap-server ${connection-address} --topic ${topic-name} --group ${consumer-group-name} --from-beginning --consumer.config ../config/consumer.properties
Descrição do parâmetro:
- {connection-address}: o endereço obtido em Pré-requisitos. Para acesso público, use Instance Address (Public Network)/Address (Public Network, Ciphertext). Para acesso dentro da VPC, use Instance Address (Private Network)/Address (Private Network, Ciphertext).
- {topic-name}: the name of the topic created for the Kafka instance
- {consumer-group-name}: the consumer group name set based on your service requirements. If a consumer group name has been specified in the configuration file, ensure that you use the same name in the command line. Otherwise, consumption may fail. If a consumer group name starts with a special character, such as a number sign (#), the monitoring data cannot be displayed.
Example:
[root@ecs-kafka bin]# ./kafka-console-consumer.sh --bootstrap-server 10.3.196.45:9095,10.78.42.127:9095,10.4.49.103:9095 --topic topic-demo --group order-test --from-beginning --consumer.config ../config/consumer.properties Hello DMS Kafka! ^CProcessed a total of 3 messages [root@ecs-kafka bin]#
To stop retrieving messages, press Ctrl+C to exit.