Cassandra Аутентификация и авторизация JMX: создать пользователя

⚡ Умное резюме

Cassandra Безопасность обеспечивается внутренней аутентификацией, правами доступа к ролям, правилами брандмауэра и контролем доступа JMX. На этой странице показано, как включить каждый уровень, создать пользователей, предоставить права доступа и обеспечить безопасный удаленный доступ к nodetool.

  • 🔐 Два слоя: Аутентификация подтверждает личность пользователя; авторизация определяет, что этот пользователь может делать.
  • ⚙️ Включить его: Оба параметра по умолчанию отключены и включаются через настройки аутентификатора и авторизатора.
  • 👤 Аккаунт по умолчанию: Встроенный суперпользователь Cassandra создает все остальные учетные записи, поэтому немедленно смените пароль для него.
  • 🔑 Модель гранта: Права доступа, такие как SELECT, MODIFY и ALTER, предоставляются для каждого ресурса с помощью команды GRANT.
  • 📡 Портовый контроль: Откройте порты 7000, 7001, 7199 и 9042 между узлами и поддерживайте аутентификацию JMX.

Cassandra Аутентификация и авторизация JMX

В системе существует два типа безопасности. Apache Cassandra и DataStax Enterprise.

  • Внутренняя аутентификация
  • Авторизация

Что такое внутренняя аутентификация и авторизация

Внутренняя аутентификация, по сути, представляет собой проверку подключения пользователя. Пользователь аутентифицируется с помощью логина и пароля. Все учетные записи пользователей управляются в Cassandra внутренне.

Внутренняя авторизация определяет права пользователя и то, какие действия он может выполнять. Например, мы можем установить права доступа, которые разрешат пользователю только читать данные, права на запись данных и права на удаление данных.

Однако аутентификацию также можно контролировать извне с помощью Kerberos (Kerberos используется для безопасного управления учетными данными) и LDAP (LDAP используется для хранения авторитетной информации об учетных записях, например, о том, к чему им разрешен доступ).

Внешняя аутентификация — это аутентификация, поддерживаемая Kerberos и LDAP. Apache Cassandra не поддерживает внешнюю аутентификацию.

Только DataStax Enterprise поддерживает внешнюю аутентификацию с использованием Kerberos и LDAP, тогда как внутренняя аутентификация поддерживается обоими способами. Apache Cassandra а также DataStax Enterprise.

Настройка аутентификации и авторизации

In CassandraПо умолчанию параметры аутентификации и авторизации отключены. Для включения аутентификации и авторизации необходимо настроить файл cassandra.yaml.

Откройте файл cassandra.yaml и раскомментируйте строки, отвечающие за внутреннюю аутентификацию и авторизацию, как показано ниже.

Строки authenticator и authorizer в файле cassandra.yaml раскомментированы.

  • В файле cassandra.yaml по умолчанию значение параметра authenticator равно 'AllowAllAuthenticator'. Измените это значение с 'AllowAllAuthenticator' на 'com.datastax.bdp.cassandra.auth.PasswordAuthenticator'.
  • Аналогично, в файле cassandra.yaml по умолчанию значение параметра authorizer будет равно 'AllowAllAuthorizer'. Измените это значение параметра authorizer с 'AllowAllAuthorizer' на 'com.datastax.bdp.cassandra.auth'.CassandraАвторизатор».

Эти два имени класса — значения DataStax Enterprise. В открытом исходном коде Apache Cassandra те же самые настройки PasswordAuthenticator и CassandraAuthorizerи учетные данные затем хранятся в system_auth пространство ключей, коэффициент репликации которого должен быть выше единицы.

Вход в систему

Теперь аутентификация включена, если вы попытаетесь получить доступ к любому пространству ключей, Cassandra вернет ошибку.

По умолчанию Cassandra Предоставляет супераккаунт с именем пользователя 'cassandra' и паролем 'cassandra'. Войдя в аккаунт 'cassandra', вы можете делать все, что захотите.

Давайте посмотрим на скриншот ниже, где вы не сможете войти в систему, если вы не используете настройки по умолчанию. Cassandra "имя пользователя и пароль".

Вход в cqlsh отклоняется, если не используются учетные данные по умолчанию.

Теперь на втором скриншоте вы можете увидеть, что произошло после использования Cassandra учетные данные для входа по умолчанию, вы можете войти в систему.

Успешный вход в cqlsh с использованием учетных данных Cassandra по умолчанию.

Вы также можете создать другого пользователя с этой учетной записью. Рекомендуется изменить пароль, отличный от пароля по умолчанию. Вот пример входа в систему под этой учетной записью. Cassandra пользователь и изменение пароля по умолчанию.

alter user cassandra with password 'newpassword';

Создать нового пользователя

Новые учетные записи можно создавать с помощью учетной записи 'cassandra'.

Для создания нового пользователя указываются логин и пароль, а также информация о том, является ли пользователь суперпользователем или нет. Создавать новых пользователей могут только суперпользователи.

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

Вы можете получить список всех пользователей, используя следующий синтаксис.

list users;

В выходных данных отображается список всех учетных записей вместе с флагом суперпользователя.

Вывод команды list users, отображающий учетные записи и флаги суперпользователей.

Пользователей можно удалить с помощью следующего синтаксиса.

drop user laura;

Авторизация

Авторизация — это присвоение пользователям прав доступа, определение того, какие действия может выполнять конкретный пользователь.

Вот общий синтаксис для назначения разрешений пользователям.

GRANT permission ON resource TO user

Существуют следующие типы разрешений, которые могут быть предоставлены пользователю.

  1. BCE
  2. ALTER
  3. РАЗРЕШИТЬ
  4. СОЗДАТЬ
  5. DROP
  6. ИЗМЕНИТЬ
  7. ВЫБОР

Ниже приведены примеры назначения разрешений пользователю.

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;

Новый пользователь «laura» создается с паролем «newhire».

Вот пример, где пользователь 'laura' пытается получить доступ к таблице emp_bonus. У Laura есть только разрешение на доступ к таблице dev.emp и нет разрешений на доступ к таблице dev.emp_bonus, поэтому была возвращена ошибка.

Ошибка возникает, когда Лаура запрашивает данные из таблицы emp_bonus без необходимых разрешений.

select* form emp_bonus;

Вы можете получить список всех разрешений, назначенных пользователю. Вот пример получения информации о разрешениях.

Результат выполнения команды `list all permissions of laura`

list all permissions of laura;

Вы также можете перечислить все разрешения для ресурса. Вот пример получения разрешений из таблицы.

Результат выполнения команды `list all permissions on dev.emp`

list all permissions on dev.emp;

Настройка межсетевого экрана

Если брандмауэр работает, для связи между узлами должны быть открыты следующие порты, включая некоторые Cassandra порты. Если Cassandra порты не будут открыты, Cassandra Узлы будут выступать в качестве автономных серверов баз данных, а не присоединяться к кластеру баз данных.

Cassandra Клиентские порты

Номер порта Описание
9042 Cassandra Клиентский порт
9160 Cassandra Клиентский порт Thrift

Cassandra Межузловые порты

Номер порта Описание
7000 Cassandra межузловая связь кластера
7001 Cassandra Межузловая связь кластера SSL
7199 Cassandra Порт мониторинга JMX

Публичные порты

Номер порта Описание
22 SSH порт
8888 Сайт Операционного центра. HTTP-запрос браузера.

Cassandra Порты Операционного центра

Номер порта Описание
61620 Порт мониторинга OpsCenter.
61621 Порт агента Opscenter

В настоящее время драйверы используют только порт 9042; порт 9160 обслуживает устаревший интерфейс Thrift и может оставаться закрытым в новых кластерах.

Включение аутентификации JMX

С настройками по умолчанию CassandraДоступ к JMX возможен только с локального хоста. Если вы хотите получить доступ к JMX удаленно, измените параметр LOCAL_JMX в файле cassandra-env.sh и включите аутентификацию или SSL.

После включения аутентификации JMX убедитесь, что Операционный центр и nodetool настроены на использование аутентификации.

Метод

Чтобы включить аутентификацию JMX, выполните следующие действия.

  1. В файле cassandra-env.sh добавьте или обновите следующие строки.
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"

    Кроме того, измените параметр LOCAL_JMX в файле cassandra-env.sh.

    LOCAL_JMX=no
  2. Скопируйте файл jmxremote.password.template из /jdk_install_location/lib/management/ в /etc/cassandra/ и переименуйте его в jmxremote.password.
    cp /jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password
  3. Измените право собственности на jmxremote.password на пользователя, которого вы запускаете. Cassandra и изменить права доступа на «только для чтения».
    chown cassandra:cassandra /etc/cassandra/jmxremote.password 
    chmod 400 /etc/cassandra/jmxremote.password
  4. Отредактируйте jmxremote.password и добавьте пользователя и пароль для JMX-совместимых утилит:
    monitorRole QED 
    controlRole R&D 
    cassandra cassandrapassword
  5. Добавьте Cassandra пользователь с разрешением на чтение и запись в /jdk_install_location/lib/management/jmxremote.access
    monitorRole readonly
    cassandra readwrite
    controlRole readwrite \
    create javax.management.monitor.,javax.management.timer. \ 
    unregister
  6. Restart Cassandra.
  7. Запустите nodetool с помощью Cassandra пользователь и пароль.
    $ nodetool status -u cassandra -pw cassandra

Часто задаваемые вопросы (FAQ)

Оба объекта находятся в пространстве ключей system_auth, в таблицах roles и role_permissions. Поскольку потеря реплики system_auth может заблокировать доступ всем пользователям, перед включением аутентификации в производственной среде следует повысить коэффициент репликации.

Роли CQL заменили старый синтаксис пользователей. Роль содержит права доступа и может быть предоставлена ​​другим ролям, поэтому команда CREATE ROLE заменяет CREATE USER в текущих версиях, где команды пользователей сохраняются в виде псевдонимов.

Нет. Аутентификация подтверждает только личность; пароли по-прежнему передаются по сети в открытом виде, если не включен параметр client_encryption_options. Включайте TLS отдельно для трафика между клиентом и узлом, и для трафика между узлами.

Создайте выделенного суперпользователя, затем измените встроенный пароль Cassandra или удалите учетную запись. Наиболее распространенный вариант — оставить активной описанную пару Cassandra/Cassandra. Cassandra неправильная конфигурация.

Права доступа кэшируются. Изменения вступают в силу только после истечения срока действия прав доступа, поэтому сократите этот период в файле cassandra.yaml или перезапустите узел при проверке предоставления или отзыва прав.

Неаутентифицированный JMX на порту 7199 позволяет осуществлять полный контроль над узлом, включая вывод его из эксплуатации. Cassandra Следовательно, он привязывается локально, и удаленный доступ следует открывать только при наличии файла паролей или SSL-соединения.

Модели машинного обучения анализируют стандартные формы запросов, время входа в систему и исходные адреса для каждой роли, а затем отмечают отклонения, такие как чтение учетной записью приложения несвязанного пространства ключей. Это позволяет выявить случаи неправомерного использования учетных данных, которые не учитываются статическими правилами.

Copilot быстро создает запросы CREATE ROLE и GRANT на основе комментариев, но, как правило, предполагает широкие права доступа. RevПеред запуском в рабочей среде просмотрите все сгенерированные разрешения, предоставленные в соответствии с принципом минимальных привилегий. кластер.

Подведем итог этой публикации следующим образом: