مشاركة عبر


تشفير نسبة استخدام الشبكة بين عقد عامل نظام المجموعة

هام

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

المتطلبات

  • تتطلب هذه الميزة خطة Premium. اتصل بفريق حساب Databricks للحصول على مزيد من المعلومات.

كيفية عمل البرنامج النصي init

هام

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

عادة ما يتم إرسال استعلامات المستخدم والتحويلات إلى مجموعاتك عبر قناة مشفرة. ومع ذلك، بشكل افتراضي، لا يتم تشفير البيانات المتبادلة بين العقد العاملة في نظام مجموعة. إذا كانت بيئتك تتطلب تشفير البيانات في جميع الأوقات، سواء كانت ثابتة أو أثناء النقل، يمكنك إنشاء برنامج نصي init يقوم بتكوين مجموعاتك لتشفير نسبة استخدام الشبكة بين العقد العاملة، باستخدام تشفير AES 256 بت عبر اتصال TLS 1.3.

إشعار

على الرغم من أن AES تمكن إجراءات التشفير من الاستفادة من تسريع الأجهزة، هناك عقوبة أداء مقارنة بنسبة استخدام الشبكة غير المشفرة. يمكن أن تؤدي هذه العقوبة إلى استعلامات تستغرق وقتا أطول على مجموعة مشفرة، اعتمادا على كمية البيانات التي تم تبديلها بين العقد.

يتطلب تمكين تشفير حركة المرور بين العقد العاملة تعيين معلمات تكوين Spark من خلال برنامج نصي init. يمكنك استخدام برنامج نصي init على نطاق المجموعة لمجموعة واحدة أو إضافة برنامج نصي init ذي نطاق نظام مجموعة إلى نهج نظام المجموعة إذا كنت تريد أن تستخدم جميع المجموعات في مساحة العمل الخاصة بك تشفيرا من عامل إلى عامل.

مرة واحدة، انسخ ملف مخزن المفاتيح إلى دليل في DBFS. ثم قم بإنشاء البرنامج النصي init الذي يطبق إعدادات التشفير.

يجب أن يقوم البرنامج النصي init بالمهام التالية:

  1. احصل على ملف مخزن مفاتيح JKS وكلمة المرور.
  2. تعيين تكوين منفذ Spark.
  3. تعيين تكوين برنامج تشغيل Spark.

إشعار

يتم إنشاء ملف مخزن مفاتيح JKS المستخدم لتمكين SSL/HTTPS ديناميكيا لكل مساحة عمل. كلمة مرور ملف مخزن مفاتيح JKS مشفرة ولا تهدف إلى حماية سرية مخزن المفاتيح.

فيما يلي مثال على البرنامج النصي init الذي ينفذ هذه المهام الثلاث لإنشاء تكوين تشفير نظام المجموعة.

مثال على البرنامج النصي init

#!/bin/bash

set -euo pipefail

keystore_dbfs_file="/dbfs/<keystore-directory>/jetty_ssl_driver_keystore.jks"

## Wait till keystore file is available via Fuse

max_attempts=30
while [ ! -f ${keystore_dbfs_file} ];
do
  if [ "$max_attempts" == 0 ]; then
    echo "ERROR: Unable to find the file : $keystore_dbfs_file .Failing the script."
    exit 1
  fi
  sleep 2s
  ((max_attempts--))
done
## Derive shared internode encryption secret from the hash of the keystore file
sasl_secret=$(sha256sum $keystore_dbfs_file | cut -d' ' -f1)

if [ -z "${sasl_secret}" ]; then
  echo "ERROR: Unable to derive the secret.Failing the script."
  exit 1
fi

# The JKS keystore file used for enabling SSL/HTTPS
local_keystore_file="$DB_HOME/keys/jetty_ssl_driver_keystore.jks"
# Password of the JKS keystore file. This jks password is hardcoded and is not intended to protect the confidentiality
# of the keystore. Do not assume the keystore file itself is protected.
local_keystore_password="gb1gQqZ9ZIHS"

## Updating spark-branch.conf is only needed for driver

if [[ $DB_IS_DRIVER = "TRUE" ]]; then
  driver_conf=${DB_HOME}/driver/conf/spark-branch.conf
  echo "Configuring driver conf at $driver_conf"

  if [ ! -e $driver_conf ] ; then
    touch $driver_conf
  fi

cat << EOF >>  $driver_conf
  [driver] {
    // Configure inter-node authentication
  "spark.authenticate" = true
  "spark.authenticate.secret" = "$sasl_secret"
  // Configure AES encryption
  "spark.network.crypto.enabled" = true
  "spark.network.crypto.saslFallback" = false
  // Configure SSL
  "spark.ssl.enabled" = true
  "spark.ssl.keyPassword" = "$local_keystore_password"
  "spark.ssl.keyStore" = "$local_keystore_file"
  "spark.ssl.keyStorePassword" = "$local_keystore_password"
  "spark.ssl.protocol" ="TLSv1.3"
  "spark.ssl.standalone.enabled" = true
  "spark.ssl.ui.enabled" = true
  }
EOF
  echo "Successfully configured driver conf at $driver_conf"
fi

# Setting configs in spark-defaults.conf for the spark master and worker

spark_defaults_conf="$DB_HOME/spark/conf/spark-defaults.conf"
echo "Configuring spark defaults conf at $spark_defaults_conf"
if [ ! -e $spark_defaults_conf ] ; then
  touch $spark_defaults_conf
fi

cat << EOF >>  $spark_defaults_conf
spark.authenticate true
spark.authenticate.secret $sasl_secret
spark.network.crypto.enabled true
spark.network.crypto.saslFallback false

spark.ssl.enabled true
spark.ssl.keyPassword $local_keystore_password
spark.ssl.keyStore $local_keystore_file
spark.ssl.keyStorePassword $local_keystore_password
spark.ssl.protocol TLSv1.3
spark.ssl.standalone.enabled true
spark.ssl.ui.enabled true
EOF

echo "Successfully configured spark defaults conf at $spark_defaults_conf"

بمجرد اكتمال تهيئة عقد برنامج التشغيل والعامل، يتم تشفير كافة نسبة استخدام الشبكة بين هذه العقد باستخدام ملف مخزن المفاتيح.

مثال دفتر الملاحظات: تثبيت برنامج نصي لتشفير init

ينسخ دفتر الملاحظات التالي ملف مخزن المفاتيح وينشئ البرنامج النصي init في DBFS. يمكنك استخدام البرنامج النصي init لإنشاء مجموعات جديدة مع تمكين التشفير.

تثبيت دفتر ملاحظات البرنامج النصي لتشفير init

الحصول على دفتر الملاحظات

تعطيل التشفير بين العقد العاملة

لتعطيل التشفير بين العقد العاملة، قم بإزالة البرنامج النصي init من تكوين نظام المجموعة، ثم أعد تشغيل نظام المجموعة.