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.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}}

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

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