Seguridad de Cassandra: Crear usuario & Autenticación con JMX

Tabla de contenido:

Anonim

Hay dos tipos de seguridad en Apache Cassandra y Datastax Enterprise.

  • Autenticación interna
  • Autorización

En este tutorial, aprenderá,

  • ¿Qué es la autenticación y autorización internas?
  • Configurar autenticación y autorización
  • Iniciando sesión
  • Crear nuevo usuario
  • Autorización
  • Configurar el cortafuegos
  • Habilitación de la autenticación JMX

¿Qué es la autenticación y autorización internas?

La autenticación interna consiste básicamente en validar la conexión del usuario. El usuario está autenticado con nombre de usuario y contraseña. Todas las cuentas de usuario se administran en Cassandra internamente.

La autorización interna se ocupa del permiso del usuario. Se trata de las acciones que puede realizar el usuario. Por ejemplo, podemos otorgar permiso al usuario, como qué usuario solo tiene permiso de lectura de datos, qué usuario tiene permiso de escritura de datos y qué usuario tiene permiso de eliminación de datos.

Sin embargo, la autenticación también se puede controlar externamente con Kerberos (Kerberos se usa para administrar las credenciales de forma segura) y LDAP (LDAP se usa para mantener información autorizada sobre las cuentas, como lo que tienen permitido acceder).

La autenticación externa es la autenticación compatible con Kerberos y LDAP. Apache Cassandra no admite la autenticación externa.

Solo la empresa Datastax admite la autenticación externa con Kerberos y LDAP. Mientras que la autenticación interna se admite tanto en Apache Cassandra como en Datastax Enterprise.

Configurar autenticación y autorización

En Cassandra, las opciones de autenticación y autorización están deshabilitadas de forma predeterminada. Debe configurar el archivo Cassandra.yaml para habilitar la autenticación y la autorización.

Abra el archivo Cassandra.yaml y descomente las líneas que se ocupan de la autenticación y autorización internas.

  • En el archivo Cassandra.yaml, de forma predeterminada, el valor del autenticador es 'AllowAllAuthenticator'. Cambie este valor de autenticador de 'AllowAllAuthenticator' a 'com.datastax.bdp.cassandra.auth.PasswordAuthenticator'.
  • De manera similar, en el archivo Cassandra.yaml, de forma predeterminada, el valor del autorizador será 'AllowAllAuthorizor'. Cambie este valor de autorizador de 'AllowAllAuthorizor' a 'com.datastax.bdp.cassandra.auth.CassandraAuthorizor'.

Iniciando sesión

Ahora la autenticación está habilitada, si intenta acceder a cualquier espacio de claves, Cassandra devolverá un error.

De forma predeterminada, Cassandra proporciona a la supercuenta el nombre de usuario 'cassandra' y la contraseña 'cassandra'. Al iniciar sesión en la cuenta 'Cassandra', puede hacer lo que quiera.

Veamos la siguiente captura de pantalla para esto, donde no le permitirá iniciar sesión si no está utilizando el "nombre de usuario" y la "contraseña" predeterminados de Cassandra.

Ahora, en la segunda captura de pantalla, puede ver que después de usar la credencial de inicio de sesión predeterminada de Cassandra, puede iniciar sesión.

También puede crear otro usuario con esta cuenta. Se recomienda cambiar la contraseña predeterminada. Este es el ejemplo de inicio de sesión de usuario de Cassandra y cambio de contraseña predeterminada.

alter user cassandra with password 'newpassword';

Crear nuevo usuario

Se pueden crear nuevas cuentas con la cuenta 'Cassandra'.

Para crear un nuevo usuario, inicie sesión, la contraseña se especifica junto con si el usuario es superusuario o no. Solo el superusuario puede crear nuevos usuarios.

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

Puede obtener una lista de todos los usuarios mediante la siguiente sintaxis.

list users;

Los usuarios pueden ser eliminados por la siguiente sintaxis.

drop user laura;

Autorización

La autorización es la asignación de permisos a los usuarios sobre qué acción puede realizar un usuario en particular.

Aquí está la sintaxis genérica para asignar permisos a los usuarios.

GRANT permission ON resource TO user

Existen los siguientes tipos de permisos que se pueden otorgar al usuario.

  1. TODOS
  2. ALTERAR
  3. AUTORIZAR
  4. CREAR
  5. SOLTAR
  6. MODIFICAR
  7. SELECCIONE

A continuación, se muestran ejemplos de cómo asignar permisos al usuario.

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;

Se crea un nuevo usuario 'laura' con la contraseña 'newhire'.

Aquí está el ejemplo donde el usuario 'laura' intenta acceder a la tabla emp_bonus. Laura solo tiene permiso para acceder a dev.emp y no tiene permiso para esta tabla dev.emp_bonus, por eso se devolvió un error.

select* form emp_bonus;

Puede obtener una lista de todos los permisos asignados al usuario. Este es el ejemplo de cómo obtener información sobre permisos.

list all permissions of laura;

También puede enumerar todos los permisos del recurso. Este es el ejemplo de cómo obtener permiso de una mesa.

list all permissions on dev.emp;

Configurar el cortafuegos

Si el firewall se está ejecutando, se deben abrir los siguientes puertos para la comunicación entre nodos, incluidos algunos puertos de Cassandra. Si los puertos de Cassandra no se abren, los nodos de Cassandra actuarán como un servidor de base de datos independiente en lugar de unirse al clúster de la base de datos.

Puertos del cliente de Cassandra

Número de puerto

Descripción

9042

Puerto de cliente de Cassandra

9160

Port Thrift del cliente de Cassandra

Puertos internos de Cassandra

Número de puerto

Descripción

7000

Comunicación del racimo de entrenudos de Cassandra

7001

Comunicación de clúster de entrenudos SSL de Cassandra

7199

Puerto de monitoreo Cassandra JMX

Puertos públicos

Número de puerto

Descripción

22

Puerto SSH

8888

Sitio web de OpsCenter. Solicitud http del navegador.

Puertos de Cassandra OpsCenter

Número de puerto

Descripción

61620

Puerto de monitoreo OpsCenter.

61621

Puerto de agente de Opscenter

Habilitación de la autenticación JMX

Con la configuración predeterminada de Cassandra, solo se puede acceder a JMX desde el host local. Si desea acceder a JMX de forma remota, cambie la configuración LOCAL_JMX en Cassandra-env.sh y habilite la autenticación o SSL.

Después de habilitar la autenticación JMX, asegúrese de que OpsCenter y nodetool estén configurados para usar la autenticación.

Procedimiento

Existen los siguientes pasos para habilitar la autenticación JMX.

  1. En el archivo cassandra-env.sh, agregue o actualice las siguientes líneas.
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"

Además, cambie la configuración LOCAL_JMX en Cassandra-env.sh

LOCAL_JMX=no
  1. Copie jmxremote.password.template de / jdk_install_location / lib / management / a / etc / cassandra / y cámbiele el nombre a jmxremote.password.
cp />jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password
  1. Cambie la propiedad de jmxremote.password al usuario con el que ejecuta Cassandra y cambie el permiso a solo lectura
chown cassandra:cassandra /etc/cassandra/jmxremote.passwordchmod 400 /etc/cassandra/jmxremote.password
  1. Edite jmxremote.password y agregue el usuario y la contraseña para las utilidades compatibles con JMX:
monitorRole QEDcontrolRole R&Dcassandra cassandrapassword
  1. Agregue el usuario de Cassandra con permiso de lectura y escritura a /jdk_install_location/lib/management/jmxremote.access
monitorRole readonlycassandra readwritecontrolRole readwrite \create javax.management.monitor.,javax.management.timer. \unregister
  1. Reiniciar Cassandra
  2. Ejecute nodetool con el usuario y la contraseña de Cassandra.
$ nodetool status -u cassandra -pw cassandra

Resumen:

Este tutorial explica la seguridad en Cassandra y la configuración del archivo Cassandra.yaml para habilitar la seguridad. Además de esto, también explica cómo se puede crear una nueva cuenta de usuario, la asignación de permisos, la configuración del firewall, etc.