Existem dois tipos de segurança no Apache Cassandra e no Datastax enterprise.
- Autenticação Interna
- Autorização
Neste tutorial, você aprenderá,
- O que é autenticação e autorização interna
- Configurar autenticação e autorização
- Login
- Criar novo usuário
- Autorização
- Configurando Firewall
- Habilitando a autenticação JMX
O que é autenticação e autorização interna
A autenticação interna é basicamente validar a conexão do usuário. O usuário é autenticado com login e senha. Todas as contas de usuário são gerenciadas internamente no Cassandra.
A autorização interna trata da permissão do usuário. Trata de quais ações o usuário pode executar. Por exemplo, podemos dar permissão ao usuário, 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 (Kerberos é usado para gerenciar credenciais com segurança) e LDAP (LDAP é usado para manter informações oficiais sobre as contas, como o que elas têm permissão para acessar).
A autenticação externa é a autenticação compatível com Kerberos e LDAP. O Apache Cassandra não oferece suporte para autenticação externa.
Apenas datastax enterprise oferece suporte a autenticação externa com Kerberos e LDAP. Enquanto a autenticação interna é suportada tanto no Apache Cassandra quanto no Datastax enterprise.
Configurar autenticação e autorização
No Cassandra, por padrão, as opções de autenticação e autorização estão desabilitadas. Você deve configurar o arquivo Cassandra.yaml para habilitar a autenticação e autorização.
Abra o arquivo Cassandra.yaml e descomente as linhas que tratam da autenticação e autorização interna.
- No arquivo Cassandra.yaml, por padrão, o valor do autenticador é 'AllowAllAuthenticator'. Altere este valor do autenticador de 'AllowAllAuthenticator' para 'com.datastax.bdp.cassandra.auth.PasswordAuthenticator'.
- Da mesma forma, no arquivo Cassandra.yaml, por padrão, o valor do autorizador será 'AllowAllAuthorizor'. Altere este valor do autorizador de 'AllowAllAuthorizor' para 'com.datastax.bdp.cassandra.auth.CassandraAuthorizor'.
Login
Agora que a autenticação está habilitada, se você tentar acessar qualquer keyspace, o Cassandra retornará um erro.
Por padrão, o Cassandra fornece a super conta com o nome de usuário 'cassandra' e a senha 'cassandra'. Ao entrar na conta 'Cassandra', você pode fazer o que quiser.
Vamos ver a imagem abaixo para isso, onde não permitirá que você faça o login se você não estiver usando o "nome de usuário" e a "senha" padrão do Cassandra.
Agora, na segunda captura de tela, você pode ver que depois de usar a credencial de login padrão do Cassandra, você é capaz de fazer o login.
Você também pode criar outro usuário com esta conta. Recomenda-se alterar a senha padrão. Aqui está o exemplo de login do usuário Cassandra e alteração da senha padrão.
alter user cassandra with password 'newpassword';
Criar novo usuário
Novas contas podem ser criadas com a conta 'Cassandra'.
Para criar um novo usuário, faça o login, a senha é especificada junto com se o usuário é superusuário ou não. Apenas o 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;
Os usuários podem ser eliminados pela seguinte sintaxe.
drop user laura;
Autorização
Autorização é a atribuição de permissão aos usuários para determinar qual ação um determinado usuário pode executar.
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.
- TODO
- ALTERAR
- AUTORIZE
- CRIAR
- SOLTA
- MODIFICAR
- SELECIONE
Aqui estão alguns 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á o exemplo onde o usuário 'laura' tenta acessar a tabela emp_bonus. Laura tem apenas permissão para acessar dev.emp e nenhuma permissão para esta tabela dev.emp_bonus é por isso que um erro foi retornado.
select* form emp_bonus;
Você pode obter uma lista de todas as permissões atribuídas ao usuário. Aqui está o exemplo de obtenção de informações de permissão.
list all permissions of laura;
Você também pode listar todas as permissões no recurso. Aqui está o exemplo de como obter permissão de uma mesa.
list all permissions on dev.emp;
Configurando Firewall
Se o firewall estiver em execução, as portas a seguir devem ser abertas para comunicação entre os nós, incluindo algumas portas do Cassandra. Se as portas do Cassandra não forem abertas, os nós do Cassandra atuarão como um servidor de banco de dados independente em vez de ingressar no cluster de banco de dados.
Portas de cliente Cassandra
Número da porta |
Descrição |
9042 |
Porta do cliente Cassandra |
9160 |
Cassandra Client Port Thrift |
Portas do entrenó Cassandra
Número da porta |
Descrição |
7000 |
Comunicação do cluster entre nós do Cassandra |
7001 |
Comunicação de cluster entre nós Cassandra SSL |
7199 |
Porta de monitoramento Cassandra JMX |
Portos Públicos
Número da porta |
Descrição |
22 |
Porta SSH |
8888 |
Site do OpsCenter. Solicitação de http do navegador. |
Portas Cassandra OpsCenter
Número da porta |
Descrição |
61620 |
Porta de monitoramento OpsCenter. |
61621 |
Porta do agente Opscenter |
Habilitando a autenticação JMX
Com as configurações padrão do Cassandra, o JMX só pode ser acessado a partir do host local. Se você deseja acessar o JMX remotamente, altere a configuração LOCAL_JMX em Cassandra-env.sh e ative a autenticação ou SSL.
Depois de habilitar a autenticação JMX, certifique-se de que OpsCenter e nodetool estejam configurados para usar autenticação.
Procedimento
Existem etapas a seguir para ativar a autenticação JMX.
- No arquivo cassandra-env.sh, adicione ou atualize as seguintes linhas.
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
- Copie o jmxremote.password.template de / jdk_install_location / lib / management / para / etc / cassandra / e renomeie-o parajmxremote.password.
cp />jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password
- Altere a propriedade de jmxremote.password para o usuário com o qual você executa o Cassandra e altere a permissão para somente leitura
chown cassandra:cassandra /etc/cassandra/jmxremote.passwordchmod 400 /etc/cassandra/jmxremote.password
- Edite jmxremote.password e adicione o usuário e a senha para utilitários compatíveis com JMX:
monitorRole QEDcontrolRole R&Dcassandra cassandrapassword
- Adicione o usuário Cassandra com permissão de leitura e gravação para /jdk_install_location/lib/management/jmxremote.access
monitorRole readonlycassandra readwritecontrolRole readwrite \create javax.management.monitor.,javax.management.timer. \unregister
- Reinicie o Cassandra
- Execute o nodetool com o usuário e a senha do Cassandra.
$ nodetool status -u cassandra -pw cassandra
Resumo:
Este tutorial explica sobre a segurança no Cassandra e a configuração do arquivo Cassandra.yaml para habilitar a segurança. Além disso, também explica como uma nova conta de usuário pode ser criada, atribuição de permissão, configuração do firewall e assim por diante.