Cassandra Autenticação e autorização JMX: criar usuário

⚡ Resumo Inteligente

Cassandra A segurança se baseia em autenticação interna, permissões de função, regras de firewall e controle de acesso JMX. Esta página mostra como habilitar cada camada, criar usuários, conceder permissões e proteger o acesso remoto ao nodetool.

  • 🔐 Duas camadas: A autenticação comprova a identidade do usuário; a autorização define o que esse usuário pode fazer.
  • ⚙️ Ative-o: Ambos estão desativados por padrão e são ativados por meio das configurações do autenticador e do autorizador.
  • 👤 Conta padrão: O superusuário integrado do Cassandra cria todas as outras contas, portanto, altere a senha dele imediatamente.
  • 🔑 Modelo de financiamento: Permissões como SELECT, MODIFY e ALTER são concedidas por recurso com o comando GRANT.
  • 📡 Controle de portas: Abra as portas 7000, 7001, 7199 e 9042 entre os nós e mantenha a autenticação JMX ativa.

Cassandra Autenticação e autorização JMX

Existem dois tipos de segurança em Apache Cassandra e DataStax Enterprise.

  • Autenticação Interna
  • Autorização

O que é autenticação e autorização interna

A autenticação interna consiste basicamente em validar a conexão de um usuário. O usuário é autenticado com login e senha. Todas as contas de usuário são gerenciadas em Cassandra internamente.

A autorização interna lida com as permissões de um usuário. Ela define quais ações um usuário pode executar. Por exemplo, podemos conceder permissões como: qual usuário tem apenas permissão de leitura de dados, qual usuário tem permissão de gravação de dados e qual usuário tem permissão de exclusão de dados.

No entanto, a autenticação também pode ser controlada externamente com Kerberos (o Kerberos é usado para gerenciar credenciais com segurança) e LDAP (o LDAP é usado para armazenar informações oficiais sobre as contas, como o que elas têm permissão para acessar).

A autenticação externa é a autenticação suportada com Kerberos e LDAP. Apache Cassandra não suporta autenticação externa.

Somente o DataStax Enterprise oferece suporte à autenticação externa com Kerberos e LDAP, enquanto a autenticação interna é suportada em ambos. Apache Cassandra bem como DataStax Enterprise.

Configurar autenticação e autorização

In CassandraPor padrão, as opções de autenticação e autorização estão desativadas. Você precisa configurar o arquivo cassandra.yaml para habilitá-las.

Abra o arquivo cassandra.yaml e remova o comentário das linhas que tratam da autenticação e autorização internas, conforme mostrado abaixo.

Linhas do autenticador e do autorizador do arquivo cassandra.yaml descomentadas

  • No arquivo cassandra.yaml, por padrão, o valor do autenticador é 'AllowAllAuthenticator'. Altere esse valor de 'AllowAllAuthenticator' para 'com.datastax.bdp.cassandra.auth.PasswordAuthenticator'.
  • Da mesma forma, no arquivo cassandra.yaml, por padrão, o valor do autorizador será 'AllowAllAuthorizer'. Altere esse valor de autorizador de 'AllowAllAuthorizer' para 'com.datastax.bdp.cassandra.auth'.CassandraAutorizador'.

Esses dois nomes de classe são os valores do DataStax Enterprise. Em código aberto. Apache Cassandra As mesmas configurações levam PasswordAuthenticator e CassandraAuthorizere as credenciais ficam armazenadas no system_auth keyspace, cujo fator de replicação deve ser elevado acima de um.

o login

Agora a autenticação está habilitada, se você tentar acessar qualquer keyspace, Cassandra retornará um erro.

Por padrão, o Cassandra A conta principal é fornecida com o nome de usuário 'cassandra' e a senha 'cassandra'. Ao fazer login na conta 'cassandra', você pode fazer o que quiser.

Vamos ver a captura de tela abaixo para isso, onde não permitirá que você faça login se não estiver usando o padrão Cassandra "usuário e senha".

Login rejeitado no cqlsh quando as credenciais padrão não são utilizadas.

Agora, na segunda captura de tela, você pode ver depois de usar o Cassandra credencial de login padrão, você poderá fazer login.

Login bem-sucedido com cqlsh usando as credenciais padrão do Cassandra.

Você também pode criar outro usuário com esta conta. Recomenda-se alterar a senha padrão. Aqui está um exemplo de login como o Cassandra usuário e alteração da senha padrão.

alter user cassandra with password 'newpassword';

Criar novo usuário

É possível criar novas contas com a conta 'cassandra'.

Para criar um novo usuário, é necessário especificar o nome de usuário e a senha, além de indicar se o usuário é um superusuário ou não. Somente um superusuário pode criar novos usuários.

create user robin with password 'manager' superuser;
create user robin with password 'newhire';

Você pode obter uma lista de todos os usuários pela seguinte sintaxe.

list users;

A saída lista todas as contas juntamente com sua respectiva flag de superusuário.

Saída do comando list users mostrando contas e flags de superusuário.

Os usuários podem ser eliminados pela seguinte sintaxe.

drop user laura;

Autorização

A autorização consiste em atribuir permissões aos usuários, decidindo quais ações um determinado usuário pode realizar.

Aqui está a sintaxe genérica para atribuir permissão aos usuários.

GRANT permission ON resource TO user

Existem os seguintes tipos de permissão que podem ser concedidos ao usuário.

  1. TODAS
  2. ALTERAR
  3. AUTORIZAR
  4. CRIAR
  5. GOTA
  6. MODIFICAR
  7. SELECIONE

Aqui estão exemplos de atribuição de permissão ao usuário.

Create user laura with password 'newhire'; 
grant all on dev.emp to laura;
revoke all on dev.emp to laura;
grant select on dev.emp to laura;

Um novo usuário 'laura' é criado com a senha 'newhire'.

Aqui está um exemplo em que a usuária 'laura' tenta acessar a tabela emp_bonus. Laura tem permissão apenas para acessar dev.emp e nenhuma permissão na tabela dev.emp_bonus, motivo pelo qual foi retornado um erro.

Ocorreu um erro quando Laura consultou a tabela emp_bonus sem permissão.

select* form emp_bonus;

Você pode obter uma lista de todas as permissões atribuídas ao usuário. Aqui está um exemplo de como obter informações de permissão.

Resultado do comando "list all permissions of laura"

list all permissions of laura;

Você também pode listar todas as permissões de um recurso. Aqui está um exemplo de como obter permissão de uma tabela.

Resultado do comando "list all permissions on dev.emp"

list all permissions on dev.emp;

Configurando Firewall

Se o firewall estiver em execução, as seguintes portas devem ser abertas para comunicação entre os nós, incluindo alguns Cassandra portos. Se Cassandra portas não serão abertas, Cassandra Os nós funcionarão como servidores de banco de dados independentes, em vez de se juntarem ao cluster de banco de dados.

Cassandra Portas do cliente

Número da porta Descrição
9042 Cassandra Porta do cliente
9160 Cassandra Economia na porta do cliente

Cassandra Portas entrenós

Número da porta Descrição
7000 Cassandra comunicação de cluster entrenós
7001 Cassandra Comunicação de cluster entre nós SSL
7199 Cassandra Porta de monitoramento JMX

Portas Públicas

Número da porta Descrição
22 Porta SSH
8888 Site OpsCenter. Solicitação http do navegador.

Cassandra Portas do OpsCenter

Número da porta Descrição
61620 Porta de monitoramento do OpsCenter.
61621 Porta do agente do Opscenter

Os drivers atuais usam apenas a porta 9042; a porta 9160 serve à interface Thrift legada e pode permanecer fechada em novos clusters.

Habilitando a autenticação JMX

Com as configurações padrão de CassandraO JMX só pode ser acessado a partir do localhost. Se você deseja acessar o JMX remotamente, altere a configuração LOCAL_JMX no arquivo cassandra-env.sh e habilite a autenticação ou SSL.

Depois de ativar a autenticação JMX, certifique-se Centro de operações e nodetool estão configurados para usar autenticação.

Procedimento

Existem etapas a seguir para ativar a autenticação JMX.

  1. No arquivo cassandra-env.sh, adicione ou atualize as linhas a seguir.
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"

    Além disso, altere a configuração LOCAL_JMX em cassandra-env.sh.

    LOCAL_JMX=no
  2. Copie o arquivo jmxremote.password.template de /jdk_install_location/lib/management/ para /etc/cassandra/ e renomeie-o para jmxremote.password.
    cp /jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password
  3. Altere a propriedade de jmxremote.password para o usuário que você executa Cassandra com e alterar a permissão para somente leitura.
    chown cassandra:cassandra /etc/cassandra/jmxremote.password 
    chmod 400 /etc/cassandra/jmxremote.password
  4. Edite jmxremote.password e adicione o usuário e a senha para utilitários compatíveis com JMX:
    monitorRole QED 
    controlRole R&D 
    cassandra cassandrapassword
  5. Adicionar o Cassandra usuário com permissão de leitura e gravação para /jdk_install_location/lib/management/jmxremote.access
    monitorRole readonly
    cassandra readwrite
    controlRole readwrite \
    create javax.management.monitor.,javax.management.timer. \ 
    unregister
  6. Reiniciar Cassandra.
  7. Execute o nodetool com o Cassandra usuário e senha.
    $ nodetool status -u cassandra -pw cassandra

Perguntas Frequentes

Ambas residem no keyspace system_auth, nas tabelas roles e role_permissions. Como a perda de uma réplica do system_auth pode bloquear o acesso de todos os usuários, aumente o fator de replicação antes de habilitar a autenticação em produção.

As funções CQL substituíram a sintaxe de usuário mais antiga. Uma função possui permissões e pode ser concedida a outras funções, portanto, CREATE ROLE substitui CREATE USER nas versões atuais, que mantêm os comandos de usuário como aliases.

Não. A autenticação apenas comprova a identidade; as senhas ainda trafegam pela rede em texto não criptografado, a menos que `client_encryption_options` esteja habilitado. Ative o TLS separadamente para o tráfego entre clientes e nós e entre nós.

Crie um superusuário dedicado e, em seguida, altere a senha padrão do Cassandra ou exclua a conta. Manter o par Cassandra/Cassandra documentado ativo é a prática mais comum. Cassandra configuração incorreta.

As permissões são armazenadas em cache. Uma alteração só entra em vigor após o término do período de validade das permissões; portanto, reduza esse período no arquivo cassandra.yaml ou reinicie o nó ao testar uma concessão ou revogação.

O JMX não autenticado na porta 7199 permite o controle total do nó, incluindo o seu descomissionamento. Cassandra Portanto, vincula-o localmente, e o acesso remoto só deve ser permitido com um arquivo de senha ou SSL instalado.

Os modelos de aprendizado de máquina analisam o formato normal das consultas, os horários de login e os endereços de origem por função e, em seguida, identificam desvios, como uma conta de aplicativo lendo um espaço de chaves não relacionado. Isso revela casos de uso indevido de credenciais que as regras estáticas não passam despercebidos.

O Copilot elabora rapidamente declarações CREATE ROLE e GRANT a partir de um comentário, mas tende a sugerir permissões amplas. RevInspecione cada concessão gerada com base no princípio do menor privilégio antes de executá-la em produção. cacho.

Resuma esta postagem com: