A fürt munkavégző csomópontjai közötti forgalom titkosítása (elavult)

Követelmények

Ez a funkció nem érhető el minden Azure Databricks előfizetéshez. Hozzáférés kéréséhez forduljon Microsoft- vagy Databricks-fiók képviselőjéhez.

Az init szkript működése

Fontos

Ez a funkció elavult. A cikkben hivatkozott init példaszkvóta a kulcstár kivonatából származtatja a közös titkos kulcsot. Ez azt okozhatja, hogy a végrehajtók nem Azure Databricks hitelesítést, és a nem hitelesített végrehajtók költségei merülnek fel. A Databricks azt javasolja, hogy ne engedélyezi a titkosítást a munkavégző csomópontok között. Ha engedélyeznie kell a funkciót, az Ön feladata a titkos kulcsok tárolása és rotása.

A felhasználói lekérdezések és átalakítások általában titkosított csatornán keresztül vannak elküldve a fürtöknek. Alapértelmezés szerint azonban a fürt munkavégző csomópontjai között cserélt adatok nem titkosítottak. Ha a környezet megköveteli, hogy az adatok mindig titkosítva legyen, akár jelenleg, akár átvitel alatt állnak, létrehozhat egy iniktív szkriptet, amely úgy konfigurálja a fürtöt, hogy a munkavégző csomópontok közötti forgalmat titkosítsa 128 bites AES-titkosítással egy TLS 1.2-kapcsolaton keresztül.

Megjegyzés

Bár az AES lehetővé teszi a titkosítási rutinok számára, hogy kihasználják a hardvergyorsítás előnyeit, teljesítménybeli büntetést jelent a titkosítatlan forgalomhoz képest. Ez a büntetés azt eredményezheti, hogy a lekérdezések a csomópontok közötti adatelosztástól függően tovább tarthatnak a titkosított fürtökön.

A munkavégző csomópontok közötti forgalom titkosításának engedélyezéséhez Spark-konfigurációs paramétereket kell konfigurálni egy init szkripten keresztül. Fürthatókörű iniktív szkriptet használhat egyetlen fürthöz, vagy egy globális iniktív szkriptet, ha azt szeretné, hogy a munkaterületen lévő összes fürt feldolgozók között titkosítást használjon.

Egyszer másolja a kulcstárfájlt a DBFS egyik könyvtárába. Ezután hozza létre az init szkriptet, amely alkalmazza a titkosítási beállításokat.

Az init szkriptnek a következő feladatokat kell elvégeznie:

  1. Szerezze be a JKS kulcstárfájlját és jelszavát.
  2. Állítsa be a Spark-végrehajtó konfigurációját.
  3. Állítsa be a Spark-illesztő konfigurációját.

Megjegyzés

Az SSL/HTTPS engedélyezéséhez használt JKS-kulcstárfájl dinamikusan jön létre minden munkaterülethez. A JKS kulcstárfájl jelszava szoftveres, és nem célja a kulcstár titkosságának védelme.

Az alábbiakban egy iniktív példaszkprogramot mutatunk be, amely ezt a három feladatot implementálja a fürttitkosítási konfiguráció létrehozásához.

Példa init szkriptre

#!/bin/bash

keystore_file="/dbfs/<keystore_directory>/jetty_ssl_driver_keystore.jks"
keystore_password="gb1gQqZ9ZIHS"
sasl_secret=$(sha256sum $keystore_file | cut -d' ' -f1)

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

  head -n 1 ${DB_HOME}/driver/conf/spark-branch.conf >> $driver_conf

  echo "  // Authenticate">> $driver_conf
  echo "  \\"spark.authenticate\\" = true" >> $driver_conf
  echo "  \\"spark.authenticate.secret\\" = \\"$sasl_secret\\"" >> $driver_conf

  echo "  // Configure AES encryption">> $driver_conf
  echo "  \\"spark.network.crypto.enabled\\" = true" >> $driver_conf
  echo "  \\"spark.network.crypto.saslFallback\\" = false" >> $driver_conf

  echo "  // Configure SSL">> $driver_conf
  echo "  \\"spark.ssl.enabled\\" = true" >> $driver_conf
  echo "  \\"spark.ssl.keyPassword\\" = \\"$keystore_password\\"" >> $driver_conf
  echo "  \\"spark.ssl.keyStore\\" = \\"$keystore_file\\"" >> $driver_conf
  echo "  \\"spark.ssl.keyStorePassword\\" = \\"$keystore_password\\"" >> $driver_conf
  echo "  \\"spark.ssl.protocol\\" = \\"TLSv1.2\\"" >> $driver_conf
  echo "  \\"spark.ssl.standalone.enabled\\" = true" >> $driver_conf
  echo "  \\"spark.ssl.ui.enabled\\" = true" >> $driver_conf
  echo " }"  >> $driver_conf
  echo "Successfully configured driver conf at $driver_conf"
fi

spark_defaults_conf="$DB_HOME/spark/conf/spark-defaults.conf"
echo "Configuring spark defaults conf at $spark_default_conf"
if [ ! -e $spark_defaults_conf ] ; then
  touch $spark_defaults_conf
fi
echo "spark.authenticate true" >> $spark_defaults_conf
echo "spark.authenticate.secret $sasl_secret" >> $spark_defaults_conf

echo "spark.network.crypto.enabled true" >> $spark_defaults_conf
echo "spark.network.crypto.saslFallback false" >> $spark_defaults_conf

echo "spark.ssl.enabled true" >> $spark_defaults_conf
echo "spark.ssl.keyPassword $keystore_password" >> $spark_defaults_conf
echo "spark.ssl.keyStore $keystore_file" >> $spark_defaults_conf
echo "spark.ssl.keyStorePassword $keystore_password" >> $spark_defaults_conf
echo "spark.ssl.protocol TLSv1.2" >> $spark_defaults_conf
echo "spark.ssl.standalone.enabled true" >> $spark_defaults_conf
echo "spark.ssl.ui.enabled true" >> $spark_defaults_conf
echo "Successfully configured spark defaults conf at $spark_default_conf"

Ha az illesztő és a munkavégző csomópontok inicializálása befejeződött, a csomópontok közötti összes forgalom titkosítva lesz a kulcstárfájllal.

Az alábbi jegyzetfüzet átmásolja a kulcstárfájlt, és létrehozza az init szkriptet a DBFS-ben. Az init szkript használatával új fürtök hozhatók létre engedélyezett titkosítással.

Titkosítási init szkript jegyzetfüzetének telepítése

Jegyzetfüzet beszerzése

Munkavégző csomópontok közötti titkosítás letiltása

A feldolgozó csomópontok közötti titkosítás letiltásához távolítsa el az init szkriptet a fürtkonfigurációból, majd indítsa újra a fürtöt.