Spark構成プロパティまたは環境変数でシークレットを使用する
この記事では、Spark 構成プロパティまたは環境変数でシークレットを参照する方法について詳しく説明します。 取得したシークレットは、ノートブックの出力と Spark ドライバーとエグゼキューターのログから編集されます。
プレビュー
この機能はパブリックプレビュー段階です。
セキュリティに関する考慮事項
Databricksでは、クラスター上のすべてのユーザーがシークレットを利用できるようにする必要がない場合、クラスター環境変数にシークレットを保存することはお勧めしていません。 Spark構成プロパティや環境変数でシークレットを参照する場合は、以下のセキュリティへの影響に留意してください。
クラスターに対する Can Attach To アクセス許可を持つユーザー、またはノートブックに対する実行アクセス許可を持つユーザーは、ノートブック内からクラスター 環境変数を読み取ることができます。
クラスター上でテーブルアクセスコントロールが有効になっていない場合、クラスター上で「接続可能」権限またはノートブック上で「実行」権限を持つユーザーは、ノートブック内からSpark構成プロパティを読み取ることができます。これには、シークレットを読み取る直接権限を持たないユーザーも含まれます。
シークレットは、Spark ドライバーのログ
stdout
ストリームとstderr
ストリームから編集されません。 機密データを保護するために、デフォルトでは、Spark ドライバーのログは、ジョブ、シングルユーザーアクセスモード、および共有アクセスモードクラスターに対する CAN MANAGE 権限を持つユーザーのみが表示できます。No Isolation Shared アクセス モード クラスターでは、 または アクセス許可を持つユーザーが ドライバーSpark Can Attach ToCAN MANAGEログを表示できます。ログを読み取ることができるユーザーを CAN MANAGE 権限を持つユーザーのみに制限するには、
spark.databricks.acl.needAdminPermissionToViewLogs
をtrue
に設定します。
要件
Spark 構成プロパティと環境変数でのシークレットの参照には、次の要件が適用されます。
クラスター オーナーは CAN READ シークレットスコープに対する権限を持っている必要があります。
Spark 構成プロパティまたは環境変数でシークレットを追加または編集するには、クラスター所有者である必要があります。
シークレットが更新された場合は、クラスターを再起動してシークレットを再度フェッチする必要があります。
シークレットの Spark 設定プロパティまたは環境変数を削除するには、クラスターに対する CAN MANAGE アクセス許可が必要です。
Spark構成プロパティを使用してシークレットを参照する
シークレットへの参照は、 Spark 構成プロパティ で次の形式で指定します。
spark.<property-name> {{secrets/<scope-name>/<secret-name>}}
以下のように置き換えてください。
<scope-name>
をシークレットスコープの名前に置き換えます。<secret-name>
は、スコープ内のシークレットの一意の名前に置き換えます。<property-name>
を Spark 構成プロパティで
各Spark構成プロパティは1つのシークレットしか参照できませんが、複数のSparkプロパティでシークレットを参照するように構成できます。
例:
spark.password {{secrets/scope1/key1}}
ノートブック内のシークレットを取得して使用します。
spark.conf.get("spark.password")
SELECT ${spark.password};
環境変数でシークレットを参照する
シークレットパスは、 環境変数 で次の形式で指定します。
<variable-name>={{secrets/<scope-name>/<secret-name>}}
シークレットを参照するときは、任意の有効な変数名を使用できます。 環境変数で参照されるシークレットへのアクセスは、クラスターを設定したユーザーのアクセス許可によって決まります。 環境変数に格納されたシークレットは、すべてのクラスター ユーザーがアクセスできますが、他のシークレット参照と同様に、プレーンテキスト表示からは編集されます。
シークレットを参照する環境変数には、クラスタースコープのinitスクリプトからアクセスできます。initスクリプトで環境変数を設定および使用するを参照してください。
例:
シークレットを参照する環境変数を設定します。
SPARKPASSWORD={{secrets/scope1/key1}}
initスクリプトでシークレットを取得するには、以下のパターンを使用して$SPARKPASSWORD
にアクセスします。
if [ -n "$SPARKPASSWORD" ]; then
# code to use ${SPARKPASSWORD}
fi