Spark の構成プロパティまたは環境変数のシークレットを使用する
この記事では、Spark 構成プロパティまたは環境変数でシークレットを参照する方法について詳しく説明します。 取得したシークレットは、ノートブックの出力、Spark ドライバー、および実行ログから編集されます。
重要
この機能はパブリック プレビュー段階にあります。
セキュリティに関する考慮事項
Databricks では、クラスター環境変数がクラスター上のすべてのユーザーから使用できない場合、クラスター環境変数にシークレットを格納することはお勧めしません。 Spark 構成プロパティまたは環境変数にシークレットを参照する場合は、次のセキュリティへの影響に留意してください:
クラスターに対する CAN ATTACH TO アクセス許可またはノートブックでの実行アクセス許可を持つユーザーは、ノートブック内からクラスター環境変数を読み取ることができます。
クラスターでテーブル アクセス制御が有効になっていない場合、クラスターに対する CAN ATTACH TO アクセス許可を持つユーザー、またはノートブックで実行アクセス許可を持つユーザーは、ノートブック内から Spark 構成プロパティを読み取ることができます。 これには、シークレットを読み取るための直接のアクセス許可がないユーザーも含まれます。
シークレットは、Spark ドライバー ログ
stdout
およびstderr
ストリームから編集されません。 機密データを保護するため、既定では、ジョブに対する "管理可能" アクセス許可、シングル ユーザー アクセス モード、共有アクセス モード クラスターを設定されたユーザーのみが、Spark ドライバーのログを表示できます。"分離なし" 共有アクセス モード クラスターでは、"アタッチ可能" または "管理可能" アクセス許可を持つユーザーが Spark ドライバーのログを表示できます。 ログを閲覧できるユーザーを "管理可能" アクセス許可を持つユーザーのみに制限するには、
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}}
ノートブックのシークレットを取り出して使用するには、次のようにします。
Python
spark.conf.get("spark.password")
SQL
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