次の方法で共有


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

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

重要

この機能はパブリック プレビュー段階にあります。

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

Databricks では、クラスター環境変数がクラスター上のすべてのユーザーから使用できない場合、クラスター環境変数にシークレットを格納することはお勧めしません。 Spark 構成プロパティまたは環境変数にシークレットを参照する場合は、次のセキュリティへの影響に留意してください:

  • クラスターに対する CAN ATTACH TO アクセス許可またはノートブックでの実行アクセス許可を持つユーザーは、ノートブック内からクラスター環境変数を読み取ることができます。

  • クラスターでテーブル アクセス制御が有効になっていない場合、クラスターに対する CAN ATTACH TO アクセス許可を持つユーザー、またはノートブックで実行アクセス許可を持つユーザーは、ノートブック内から Spark 構成プロパティを読み取ることができます。 これには、シークレットを読み取るための直接のアクセス許可がないユーザーも含まれます。

  • シークレットは、Spark ドライバー ログ stdout および stderr ストリームから編集されません。 機密データを保護するため、既定では、ジョブに対する "管理可能" アクセス許可、シングル ユーザー アクセス モード、共有アクセス モード クラスターを設定されたユーザーのみが、Spark ドライバーのログを表示できます。

    "分離なし" 共有アクセス モード クラスターでは、"アタッチ可能" または "管理可能" アクセス許可を持つユーザーが Spark ドライバーのログを表示できます。 ログを閲覧できるユーザーを "管理可能" アクセス許可を持つユーザーのみに制限するには、spark.databricks.acl.needAdminPermissionToViewLogstrue に設定します。

要件

次の要件は、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