Spark 構成プロパティまたは環境変数でシークレットを使用する
この記事では、Spark 構成プロパティまたは環境変数でシークレットを参照する方法について詳しく説明します。 取得したシークレットは、ノートブックの出力と Spark ドライバーとエグゼキューターのログから編集されます。
プレビュー
この機能は パブリック プレビュー段階です。
セキュリティに関する考慮事項
Databricksでは、クラスター上のすべてのユーザーがシークレットを利用できるようにする必要がない場合、クラスター環境変数にシークレットを保存することはお勧めしていません。 Spark構成プロパティや環境変数でシークレットを参照する場合は、以下のセキュリティへの影響に留意してください。
-
クラスターに対する Can Attach To 権限またはノートブックに対する実行権限を持つユーザは、ノートブック内からクラスター 環境変数を読み取ることができます。
-
クラスター上でテーブルアクセスコントロールが有効になっていない場合、クラスター上で「接続可能」権限またはノートブック上で「実行」権限を持つユーザーは、ノートブック内からSpark構成プロパティを読み取ることができます。これには、シークレットを読み取る直接権限を持たないユーザーも含まれます。
-
シークレットは、Spark ドライバーのログ
stdout
ストリームとstderr
ストリームから編集されません。 機密データを保護するために、by Default では、 Spark ドライバー ログは、ジョブ、専用アクセス モード、および標準アクセス モード クラスターに対する CAN MANAGE 権限を持つユーザーのみが表示できます。分離なしの共有アクセス モード クラスターでは、Spark Can Attach Toまたは アクセス許可を持つユーザーが ドライバーCAN MANAGE ログを表示できます。ログを読み取ることができるユーザーを CAN MANAGE 権限を持つユーザーのみに制限するには、
spark.databricks.acl.needAdminPermissionToViewLogs
をtrue
に設定します。
必要条件
Spark 構成プロパティと環境変数でのシークレットの参照には、次の要件が適用されます。
- クラスターの所有者は、シークレットスコープに対する CAN READ 権限を持っている必要があります。
- クラスターの所有者である必要があるのは、 Spark 設定プロパティまたは環境変数のシークレットを追加または編集することです。
- シークレットが更新された場合は、クラスターを再起動してシークレットを再度フェッチする必要があります。
- CAN MANAGEシークレット 構成プロパティまたは環境変数を削除するには、クラスターに対するSpark 権限が必要です。
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}}
ノートブック内のシークレットを取得して使用します。
- Python
- SQL
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