Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 workery Sparku nemusí být schopni autentizovat u Spark driveru kvůli nekonzistentnímu sdílenému tajnému klíči, což vede ke 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.
Jako alternativu můžete použít Azure šifrování virtuální sítě, které automaticky šifruje provoz mezi Azure virtuálními počítači bez nutnosti další konfigurace.
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 workeři Sparku nemusí být schopni ověřit vůči driveru Sparku kvůli nekonzistentnímu sdílenému tajnému klíči, což může způsobit 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 byla data neustále šifrována, ať už v klidu, nebo při přenosu, můžete vytvořit inicializační skript, který nakonfiguruje klastry tak, aby šifrovaly komunikaci mezi pracovními uzly pomocí 256bitového šifrování AES přes spojení TLS 1.3.
Poznámka:
Ačkoli AES umožňuje kryptografickým rutinám využívat hardwarovou akceleraci, dochází k výkonnostnímu poklesu v porovnání s nešifrovaným provozem. Tato nevýhoda může způsobit, že dotazy v šifrovaném clusteru budou trvat déle v závislosti na množství dat přenášených mezi uzly.
Povolení šifrování provozu mezi pracovními uzly vyžaduje nastavení parametrů konfigurace Sparku prostřednictvím inicializačního skriptu. Pro konkrétní cluster můžete použít inicializační skript na úrovni clusteru, nebo můžete inicializační skript na úrovni clusteru přidat do zásad clusterů, pokud chcete, aby všechny clustery ve vašem pracovním prostoru používaly šifrování komunikace mezi workery.
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:
- Získejte soubor a heslo úložiště klíčů JKS.
- Nastavte konfiguraci exekutoru Sparku.
- 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í
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.