メインコンテンツまでスキップ

Spark 構成プロパティまたは環境変数でシークレットを使用する

この記事では、Spark 構成プロパティまたは環境変数でシークレットを参照する方法について詳しく説明します。 取得したシークレットは、ノートブックの出力と Spark ドライバーとエグゼキューターのログから編集されます。

備考

プレビュー

この機能は パブリック プレビュー段階です。

セキュリティに関する考慮事項

Databricksでは、クラスター上のすべてのユーザーがシークレットを利用できるようにする必要がない場合、クラスター環境変数にシークレットを保存することはお勧めしていません。 Spark構成プロパティや環境変数でシークレットを参照する場合は、以下のセキュリティへの影響に留意してください。

  • クラスターに対する Can Attach To 権限またはノートブックに対する実行権限を持つユーザは、ノートブック内からクラスター 環境変数を読み取ることができます。

  • クラスター上でテーブルアクセスコントロールが有効になっていない場合、クラスター上で「接続可能」権限またはノートブック上で「実行」権限を持つユーザーは、ノートブック内からSpark構成プロパティを読み取ることができます。これには、シークレットを読み取る直接権限を持たないユーザーも含まれます。

  • シークレットは、Spark ドライバーのログ stdout ストリームと stderr ストリームから編集されません。 機密データを保護するために、デフォルトでは、 Spark ドライバー ログは、ジョブ、専用アクセス モード、および標準アクセス モード クラスターに対する CAN MANAGE 権限を持つユーザーのみが表示できます。

    分離なしの共有アクセス モード クラスターでは、Spark Can Attach Toまたは アクセス許可を持つユーザーが ドライバーCAN MANAGE ログを表示できます。ログを読み取ることができるユーザーを CAN MANAGE 権限を持つユーザーのみに制限するには、 spark.databricks.acl.needAdminPermissionToViewLogstrueに設定します。

必要条件

Spark 構成プロパティと環境変数でのシークレットの参照には、次の要件が適用されます。

  • クラスターの所有者は、シークレットスコープに対する CAN READ 権限を持っている必要があります。
  • クラスターの所有者である必要があるのは、 Spark 設定プロパティまたは環境変数のシークレットを追加または編集することです。
  • シークレットが更新された場合は、クラスターを再起動してシークレットを再度フェッチする必要があります。
  • CAN MANAGEシークレット 構成プロパティまたは環境変数を削除するには、クラスターに対するSpark 権限が必要です。

Spark 構成プロパティを使用したシークレットの参照

シークレットへの参照は、 Spark 構成プロパティ で次の形式で指定します。

ini
spark.<property-name> {{secrets/<scope-name>/<secret-name>}}

以下のように置き換えてください。

  • <scope-name> をシークレットスコープの名前に置き換えます。
  • <secret-name> は、スコープ内のシークレットの一意の名前に置き換えます。
  • <property-name> を Spark 構成プロパティで

各Spark構成プロパティは1つのシークレットしか参照できませんが、複数のSparkプロパティでシークレットを参照するように構成できます。

例えば:

ini
spark.password {{secrets/scope1/key1}}

ノートブック内のシークレットを取得して使用します。

Python
spark.conf.get("spark.password")

環境変数でシークレットを参照する

シークレットパスは、 環境変数 で次の形式で指定します。

ini
<variable-name>={{secrets/<scope-name>/<secret-name>}}

シークレットを参照するときは、任意の有効な変数名を使用できます。 環境変数で参照されるシークレットへのアクセスは、クラスターを設定したユーザーのパーミッションによって決まります。 環境変数に格納されたシークレットは、すべてのクラスター ユーザーがアクセスできますが、他のシークレット参照と同様に、プレーンテキスト表示からは編集されます。

シークレットを参照する環境変数には、クラスタースコープのinitスクリプトからアクセスできます。 initスクリプトによる環境変数の設定と使用を参照してください。

例えば:

シークレットを参照する環境変数を設定します。

ini
SPARKPASSWORD={{secrets/scope1/key1}}

initスクリプトでシークレットを取得するには、以下のパターンを使用して$SPARKPASSWORDにアクセスします。

Bash
if [ -n "$SPARKPASSWORD" ]; then
# code to use ${SPARKPASSWORD}
fi