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 та розкоментуйте рядки, що стосуються внутрішньої автентифікації та авторизації, як показано нижче.

Рядки автентифікатора та авторизатора cassandra.yaml без коментарів

  • У cassandra.yaml за замовчуванням значення автентифікатора — «AllowAllAuthenticator». Змініть це значення автентифікатора з «AllowAllAuthenticator» на «com.datastax.bdp.cassandra.auth.PasswordAuthenticator».
  • Аналогічно, у cassandra.yaml за замовчуванням значенням авторизатора буде «AllowAllAuthorizer». Змініть це значення авторизатора з «AllowAllAuthorizer» на «com.datastax.bdp.cassandra.auth».CassandraУповноважений'.

Ці дві назви класів є значеннями DataStax Enterprise. На відкритому коді Apache Cassandra ті ж самі налаштування PasswordAuthenticator та CassandraAuthorizer, а облікові дані потім залишаються в system_auth ключовий простір, коефіцієнт реплікації якого слід підвищити вище одиниці.

Вхід у систему

Тепер автентифікацію ввімкнено, якщо ви спробуєте отримати доступ до будь-якого простору ключів, Cassandra поверне помилку.

За замовчуванням Cassandra надає суперакаунту ім’я користувача «Кассандра» та пароль «Кассандра». Увійшовши в обліковий запис «Кассандра», ви можете робити все, що забажаєте.

Давайте подивимося на скріншот нижче для цього, де вам не дозволять увійти, якщо ви не використовуєте стандартний Cassandra «ім’я користувача» та «пароль».

Вхід відхилено в cqlsh, якщо не використовуються облікові дані за замовчуванням

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

Успішний вхід до cqlsh з використанням облікових даних Cassandra за замовчуванням

Ви також можете створити іншого користувача з цим обліковим записом. Рекомендується змінити пароль зі стандартного. Ось приклад входу від імені Cassandra користувача та зміна пароля за замовчуванням.

alter user cassandra with password 'newpassword';

Створити нового користувача

Нові облікові записи можна створювати за допомогою облікового запису «Кассандра».

Для створення нового користувача вказуються логін і пароль, а також чи є користувач суперкористувачем чи ні. Тільки суперкористувач може створювати нових користувачів.

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. ALL
  2. АЛЬТЕР
  3. АВТОРИЗАЦІЯ
  4. CREATE
  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, тому й було повернуто помилку.

Помилка повертається, коли laura запитує таблицю emp_bonus без дозволу

select* form emp_bonus;

Ви можете отримати список усіх дозволів, призначених користувачеві. Ось приклад отримання інформації про дозволи.

Вивід списку всіх дозволів Лаури

list all permissions of laura;

Ви також можете перерахувати всі дозволи для ресурсу. Ось приклад отримання дозволу з таблиці.

Вивід списку всіх дозволів на 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 Веб-сайт OpsCenter. http-запит браузера.

Cassandra Порти OpsCenter

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

Поточні драйвери використовують лише 9042; порт 9160 обслуговує застарілий інтерфейс Thrift і може залишатися закритим на нових кластерах.

Увімкнення автентифікації JMX

З налаштуваннями за замовчуванням Cassandra, доступ до JMX можливий лише з локального хоста. Якщо ви хочете отримати доступ до JMX віддалено, змініть налаштування LOCAL_JMX у cassandra-env.sh та увімкніть автентифікацію або SSL.

Увімкнувши автентифікацію JMX, переконайтеся OpsCenter і 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. перезапуск Cassandra.
  7. Запустіть nodetool за допомогою Cassandra користувача та пароль.
    $ nodetool status -u cassandra -pw cassandra

Поширені запитання

Обидва знаходяться в просторі ключів 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переглянути кожен згенерований грант з мінімальними привілеями перед запуском його в реальному часі кластер.

Підсумуйте цей пост за допомогою: