Sdílet prostřednictvím


Šifrování provozu mezi pracovními uzly clusteru

Důležité

Ukázkový inicializační skript , na který odkazuje tento článek, odvozuje sdílený šifrovací tajný klíč z hodnoty hash úložiště klíčů uloženého v DBFS. Pokud tajný kód otočíte aktualizací souboru úložiště klíčů v DBFS, musí se restartovat všechny spuštěné clustery. Jinak se pracovní procesy Sparku nemusí podařit ověřit ovladač Sparku kvůli nekonzistentnímu sdílenému tajnému kódu, což způsobuje zpomalení úloh. Vzhledem k tomu, že sdílený tajný klíč je uložený v DBFS, může každý uživatel s přístupem k DBFS načíst tajný kód pomocí poznámkového bloku.

Požadavky

  • Tato funkce vyžaduje plán Premium. Další informace získáte od týmu účtu Databricks.

Jak funguje inicializační skript

Důležité

Ukázkový inicializační skript , na který odkazuje tento článek, odvozuje sdílený šifrovací tajný klíč z hodnoty hash úložiště klíčů uloženého v DBFS. Pokud tajný kód otočíte aktualizací souboru úložiště klíčů v DBFS, musí se restartovat všechny spuštěné clustery. Jinak se pracovní procesy Sparku nemusí podařit ověřit ovladač Sparku kvůli nekonzistentnímu sdílenému tajnému kódu, což způsobuje zpomalení úloh. Vzhledem k tomu, že sdílený tajný klíč je uložený v DBFS, může každý uživatel s přístupem k DBFS načíst tajný kód pomocí poznámkového bloku.

Dotazy a transformace uživatelů se obvykle posílají do clusterů přes šifrovaný kanál. Ve výchozím nastavení se ale data vyměňovaná mezi pracovními uzly v clusteru nešifrují. Pokud vaše prostředí vyžaduje, aby se data vždy zašifrovala bez ohledu na to, jestli jsou neaktivní uložená nebo přenášená, můžete vytvořit inicializační skript, který nakonfiguruje clustery tak, aby šifroval provoz mezi pracovními uzly pomocí 256bitového šifrování AES přes připojení TLS 1.3.

Poznámka:

I když AES umožňuje kryptografické rutiny využívat hardwarovou akceleraci, je v porovnání s nešifrovaným provozem k dispozici penalizace výkonu. Výsledkem této pokuty může být, že dotazy na šifrovaný cluster trvá déle v závislosti na množství dat prohazovaných mezi uzly.

Povolení šifrování provozu mezi pracovními uzly vyžaduje nastavení parametrů konfigurace Sparku prostřednictvím inicializačního skriptu. Pokud chcete, aby všechny clustery v pracovním prostoru používaly šifrování pracovních procesů, můžete použít inicializační skript s oborem clusteru pro jeden cluster nebo přidat inicializační skript s oborem clusteru do zásad clusteru.

Jednou zkopírujte soubor úložiště klíčů do adresáře v DBFS. Pak vytvořte inicializační skript, který použije nastavení šifrování.

Inicializační skript musí provádět následující úlohy:

  1. Získejte soubor a heslo úložiště klíčů JKS.
  2. Nastavte konfiguraci exekutoru Sparku.
  3. Nastavte konfiguraci ovladače Sparku.

Poznámka:

Soubor úložiště klíčů JKS používaný k povolení protokolu SSL/HTTPS se dynamicky generuje pro každý pracovní prostor. Heslo souboru úložiště klíčů JKS je pevně zakódované a není určeno k ochraně důvěrnosti úložiště klíčů.

Následuje příklad inicializačního skriptu, který implementuje tyto tři úlohy pro generování konfigurace šifrování clusteru.

Ukázkový inicializační skript

#!/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"

Po dokončení inicializace ovladačů a pracovních uzlů se veškerý provoz mezi těmito uzly zašifruje pomocí souboru úložiště klíčů.

Příklad poznámkového bloku: Instalace šifrovacího inicializačního skriptu

Tento následující poznámkový blok zkopíruje soubor úložiště klíčů a vygeneruje inicializační skript v DBFS. Inicializační skript můžete použít k vytvoření nových clusterů s povoleným šifrováním.

Instalace poznámkového bloku inicializačního skriptu šifrování

Získat poznámkový blok

Zakázání šifrování mezi pracovními uzly

Pokud chcete zakázat šifrování mezi pracovními uzly, odeberte inicializační skript z konfigurace clusteru a restartujte cluster.