Cassandra مصادقة JMX وتفويضها: إنشاء مستخدم

⚡ ملخص ذكي

Cassandra يعتمد الأمن على المصادقة الداخلية، وصلاحيات الأدوار، وقواعد جدار الحماية، والتحكم في الوصول عبر JMX. توضح هذه الصفحة كيفية تفعيل كل طبقة، وإنشاء المستخدمين، ومنح الصلاحيات، وتأمين الوصول عن بُعد إلى أداة nodetool.

  • 🔐 طبقتان: تُثبت عملية المصادقة هوية المستخدم؛ بينما تحدد عملية التفويض ما يمكن لهذا المستخدم فعله.
  • ⚙️ قم بتفعيله: كلاهما معطلان افتراضياً ويتم تشغيلهما من خلال إعدادات المصادقة والتفويض.
  • 👤 الحساب الافتراضي: يقوم المستخدم الخارق المدمج في كاساندرا بإنشاء كل حساب آخر، لذا قم بتغيير كلمة المرور الخاصة به على الفور.
  • 🔑 نموذج المنحة: يتم منح الأذونات مثل 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" وكلمة المرور "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;

يعرض الناتج قائمة بجميع الحسابات مع علامة المستخدم المتميز الخاصة بها.

مخرجات أمر قائمة المستخدمين تُظهر الحسابات وعلامات المستخدم المتميز

من الممكن إسقاط المستخدمين باستخدام الصيغة التالية.

drop user laura;

ترخيص

التفويض هو منح الإذن للمستخدمين، وتحديد الإجراء الذي يمكن لمستخدم معين القيام به.

فيما يلي بناء الجملة العام لتعيين الإذن للمستخدمين.

GRANT permission ON resource TO user

هناك الأنواع التالية من الأذونات التي يمكن منحها للمستخدم.

  1. الكل
  2. ALTER
  3. تفويض
  4. خلق
  5. إسقاط
  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".

هذا مثالٌ حيث تحاول المستخدمة "لورا" الوصول إلى جدول emp_bonus. لا تملك لورا سوى صلاحية الوصول إلى جدول dev.emp، وليس لديها أي صلاحية على جدول dev.emp_bonus، ولهذا السبب ظهر خطأ.

حدث خطأ عند قيام لورا بالاستعلام عن جدول emp_bonus بدون إذن.

select* form emp_bonus;

يمكنك الحصول على قائمة بجميع الصلاحيات الممنوحة للمستخدم. إليك مثال على كيفية الحصول على معلومات الصلاحيات.

مخرجات الأمر "list all permissions" الخاص بـ 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 توفير منفذ العميل

Cassandra منافذ الرمز الداخلي

منفذ رقم الوصف
7000 Cassandra اتصالات بين العقد
7001 Cassandra اتصالات بين مجموعات العقد SSL
7199 Cassandra منفذ مراقبة JMX

المنافذ العامة

منفذ رقم الوصف
22 ميناء SSH
8888 موقع أوبس سنتر. طلب http للمتصفح

Cassandra منافذ OpsCenter

منفذ رقم الوصف
61620 منفذ مراقبة OpsCenter.
61621 منفذ وكيل Opcenter

تستخدم برامج التشغيل الحالية المنفذ 9042 فقط؛ أما المنفذ 9160 فيخدم واجهة Thrift القديمة ويمكن أن يظل مغلقًا على المجموعات الجديدة.

تمكين مصادقة JMX

مع الإعدادات الافتراضية لـ Cassandraلا يمكن الوصول إلى JMX إلا ​​من الجهاز المحلي. إذا كنت ترغب في الوصول إلى JMX عن بُعد، فغيّر إعداد LOCAL_JMX في ملف cassandra-env.sh وقم بتمكين المصادقة أو SSL.

بعد تمكين مصادقة JMX، تأكد مركز العمليات وتم تكوين أداة العقدة لاستخدام المصادقة.

العملية

هناك الخطوات التالية لتمكين مصادقة 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. قم بتشغيل أداة العقدة مع Cassandra المستخدم وكلمة المرور.
    $ nodetool status -u cassandra -pw cassandra

الأسئلة الشائعة

كلاهما موجودان في مساحة مفاتيح system_auth، في جدولي الأدوار و role_permissions. ولأن فقدان نسخة من system_auth قد يؤدي إلى حرمان الجميع من الوصول، يجب رفع عامل النسخ قبل تفعيل المصادقة في بيئة الإنتاج.

حلت أدوار CQL محل صيغة المستخدم القديمة. يمتلك الدور صلاحيات ويمكن منحها لأدوار أخرى، لذا فإن الأمر CREATE ROLE يحل محل الأمر CREATE USER في الإصدارات الحالية، التي تحتفظ بأوامر المستخدم كأسماء مستعارة.

لا. المصادقة تثبت الهوية فقط؛ كلمات المرور لا تزال تُنقل عبر الشبكة بشكل غير مشفر ما لم يتم تفعيل خيار تشفير العميل. فعّل بروتوكول TLS بشكل منفصل لحركة البيانات بين العميل والعقدة وبين العقدة والعقدة.

أنشئ حساب مستخدم فائق مخصص، ثم غيّر كلمة مرور كاساندرا المدمجة أو احذف الحساب. يُعدّ ترك زوج كاساندرا/كاساندرا الموثق نشطًا هو الإجراء الأكثر شيوعًا. Cassandra التهيئة الخاطئة.

يتم تخزين الأذونات مؤقتًا. لا يسري التغيير إلا بعد انتهاء صلاحية الأذونات، لذا قم بتقصير هذا الإعداد في ملف cassandra.yaml أو أعد تشغيل العقدة عند اختبار منح أو إلغاء الأذونات.

يسمح JMX غير المصادق عليه على المنفذ 7199 بالتحكم الكامل في العقدة، بما في ذلك إيقاف التشغيل. Cassandra لذلك يتم ربطه محليًا، ويجب فتح الوصول عن بعد فقط باستخدام ملف كلمة مرور أو بروتوكول SSL.

تقوم نماذج التعلم الآلي بتحليل أنماط الاستعلامات المعتادة، وأوقات تسجيل الدخول، وعناوين المصادر لكل دور، ثم تُشير إلى الانحرافات مثل قراءة حساب تطبيق لمساحة مفاتيح غير ذات صلة. وهذا يكشف عن إساءة استخدام بيانات الاعتماد التي تغفلها القواعد الثابتة.

يقوم برنامج Copilot بصياغة عبارات CREATE ROLE و GRANT بسرعة من تعليق، ولكنه يميل إلى اقتراح أذونات واسعة النطاق. Revراجع كل منح تم إنشاؤه وفقًا لمبدأ أقل الامتيازات قبل تشغيله على بيئة إنتاجية حقيقية. كتلة.

تلخيص هذه التدوينة بـ: