Autenticação de credenciais de login com Secrets Manager AWS - Amazon Managed Streaming for Apache Kafka

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Autenticação de credenciais de login com Secrets Manager AWS

Você pode controlar o acesso aos seus clusters do Amazon MSK usando credenciais de login que são armazenadas e protegidas usando o Secrets Manager. AWS Armazenar as credenciais de usuário no Secrets Manager reduz a sobrecarga da autenticação do cluster, como auditoria, atualização e rodízio de credenciais. O Secrets Manager também permite que você compartilhe credenciais de usuário entre clusters.

Como funciona

A autenticação de credenciais de acesso para o Amazon MSK usa a autenticação SASL/SCRAM (Simple Authentication and Security Layer/Salted Challenge Response Authentication Mechanism). Para configurar a autenticação de credenciais de acesso para um cluster, você cria um recurso secreto no AWS Secrets Manager e associa as credenciais de acesso a esse segredo.

O SASL/SCRAM está definido no RFC 5802. O SCRAM usa algoritmos de hash protegidos e não transmite credenciais em texto simples entre o cliente e o servidor.

nota

Quando você configura a autenticação SASL/SCRAM para seu cluster, o Amazon MSK ativa a criptografia TLS para todo o tráfego entre clientes e agentes.

Como configurar a autenticação SASL/SCRAM para um cluster do Amazon MSK

Para configurar um segredo no AWS Secrets Manager, siga o tutorial Criando e recuperando um segredo no Guia do usuário do AWS Secrets Manager.

Observe os seguintes requisitos ao criar um segredo para um cluster do Amazon MSK:

  • Escolha Outros tipos de segredos (p. ex., chave de API) para o tipo de segredo.

  • O nome do segredo deve começar com o prefixo AmazonMSK_.

  • Você deve usar uma AWS KMS chave personalizada existente ou criar uma nova AWS KMS chave personalizada para seu segredo. O Secrets Manager usa a AWS KMS chave padrão para um segredo por padrão.

    Importante

    Um segredo criado com a AWS KMS chave padrão não pode ser usado com um cluster Amazon MSK.

  • Seus dados de credencial de acesso devem estar no formato a seguir para que seja possível inserir pares de valor/chave usando a opção Texto simples.

    { "username": "alice", "password": "alice-secret" }
  • Registre o valor do ARN (nome do recurso da Amazon) do seu segredo.

  • Importante

    Você não pode associar um segredo do Secrets Manager a um cluster que exceda os limites descritos em Dimensione seu cluster adequadamente: número de partições por agente.

  • Se você usar o AWS CLI para criar o segredo, especifique um ID de chave ou ARN para o kms-key-id parâmetro. Não especifique um alias.

  • Para associar o segredo ao seu cluster, use o console Amazon MSK ou a BatchAssociateScramSecretoperação.

    Importante

    Quando você associa um segredo a um cluster, o Amazon MSK anexa uma política de recursos ao segredo, permitindo que seu cluster acesse e leia os valores secretos que você definiu. Você não deve modificar essa política de recursos. Isso pode impedir que seu cluster acesse seu segredo.

    O exemplo de entrada JSON a seguir para a operação BatchAssociateScramSecret associa um segredo a um cluster:

    { "clusterArn" : "arn:aws:kafka:us-west-2:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4", "secretArnList": [ "arn:aws:secretsmanager:us-west-2:0123456789019:secret:AmazonMSK_MyClusterSecret" ] }

Como estabelecer conexão com o seu cluster usando credenciais de acesso

Após criar um segredo e associá-lo ao cluster, você poderá conectar o cliente ao cluster. As etapas de exemplo a seguir demonstram como conectar um cliente a um cluster que usa autenticação SASL/SCRAM e como produzir e consumir com base em um tópico de exemplo.

  1. Execute o comando a seguir em uma máquina que tenha a AWS CLI instalada, substituindo clusterARN pelo ARN do seu cluster.

    aws kafka get-bootstrap-brokers --cluster-arn clusterARN
  2. Para criar um tópico de exemplo, execute o comando a seguir, substituindo BootstrapServerString por um dos endpoints do broker que você obteve na etapa anterior.

    <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapServerString --replication-factor 3 --partitions 1 --topic ExampleTopicName
  3. Em sua máquina cliente, crie um arquivo de configuração JAAS contendo as credenciais de usuário armazenadas em seu segredo. Por exemplo, para o usuário alice, crie um arquivo chamado users_jaas.conf com o conteúdo a seguir.

    KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice-secret"; };
  4. Use o comando a seguir para exportar seu arquivo de configuração JAAS como um parâmetro de ambiente KAFKA_OPTS.

    export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
  5. Crie um arquivo chamado kafka.client.truststore.jks em um diretório ./tmp.

  6. Use o seguinte comando para copiar o arquivo de armazenamento de chaves do JDK da sua pasta cacerts da JVM para o arquivo kafka.client.truststore.jks que você criou na etapa anterior. Substitua JDKFolder pelo nome da pasta JDK na sua instância. Por exemplo, sua pasta do JDK pode ter o nome java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64.

    cp /usr/lib/jvm/JDKFolder/jre/lib/security/cacerts /tmp/kafka.client.truststore.jks
  7. No diretório bin da instalação do Apache Kafka, crie um arquivo de propriedades do cliente chamado client_sasl.properties com o conteúdo a seguir. Esse arquivo define o mecanismo e o protocolo SASL.

    security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 ssl.truststore.location=<path-to-keystore-file>/kafka.client.truststore.jks
  8. Recupere sua string de agentes de bootstrap com o comando a seguir. ClusterArnSubstitua pelo Amazon Resource Name (ARN) do seu cluster:

    aws kafka get-bootstrap-brokers --cluster-arn ClusterArn

    No JSON resultante do comando, salve o valor associado à string chamada BootstrapBrokerStringSaslScram.

  9. Para produzir o tópico de exemplo que você criou, execute o seguinte comando em sua máquina cliente. Substitua o BootstrapBrokerStringSaslScram pelo valor que você recuperou na etapa anterior.

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  10. Para consumir do tópico que você criou, execute o comando a seguir em sua máquina cliente. Substitua o BootstrapBrokerStringSaslScram pelo valor que você obteve anteriormente.

    <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --from-beginning --consumer.config client_sasl.properties

Trabalhar com usuários

Criação de usuários: você cria usuários como pares de valor/chave em seu segredo. Ao usar a opção Texto simples no console do Secrets Manager, você deve especificar os dados da credencial de login no formato a seguir.

{ "username": "alice", "password": "alice-secret" }

Revogando o acesso do usuário: para revogar as credenciais de um usuário para acessar um cluster, recomendamos que primeiro você remova ou force uma ACL no cluster e depois desassocie o segredo. Isso se dá pelo seguinte:

  • A remoção de um usuário não fecha as conexões existentes.

  • A propagação de alterações em seu segredo levam até 10 minutos.

Para obter informações sobre como usar uma ACL com o Amazon MSK, consulte ACLs do Apache Kafka.

Para clusters usando o ZooKeeper modo, recomendamos que você restrinja o acesso aos seus ZooKeeper nós para impedir que os usuários modifiquem as ACLs. Para ter mais informações, consulte Controlando o acesso ao Apache ZooKeeper.

Limitações

Observe as seguintes limitações ao usar segredos SCRAM:

  • O Amazon MSK só é compatível com a autenticação SCRAM-SHA-512.

  • Um cluster do Amazon MSK pode ter até 1.000 usuários.

  • Você deve usar um AWS KMS key com seu segredo. Você não pode usar um segredo que use a chave de criptografia padrão do Secrets Manager com o Amazon MSK. Para obter informações sobre a criação de uma chave do KMS, consulte Criação de chaves do KMS de criptografia simétrica.

  • Não é possível usar uma chave assimétrica do KMS com o Secrets Manager.

  • Você pode associar até 10 segredos a um cluster por vez usando a BatchAssociateScramSecretoperação.

  • O nome dos segredos associados a um cluster do Amazon MSK deve ter o prefixo AmazonMSK_.

  • Os segredos associados a um cluster do Amazon MSK devem estar na mesma conta e AWS região da Amazon Web Services do cluster.