シークレット

シークレットは、シークレット マテリアルを格納するキーと値のペアであり、キー名はシークレット スコープ内で一意です。 各スコープは、1000 個のシークレットに制限されています。 許可されるシークレット値の最大サイズは 128 KB です。

Secrets API に関するページも参照してください。

シークレットの作成

シークレットの名前は大文字と小文字が区別されません。

シークレットを作成する方法は、ユーザーが Azure Key Vault でサポートされるスコープを使用しているか、Databricks でサポートされるスコープを使用しているかによって異なります。

Azure Key Vault でサポートされるスコープにシークレットを作成する

Azure Key Vault でシークレットを作成するには、Azure Set Secret REST API または Azure portal UI を使用します。

Azure Key Vault

Databricks でサポートされるスコープにシークレットを作成する

Databricks CLI (バージョン 0.205 以上) を使用して、Databricks でサポートされるスコープでシークレットを作成するには、以下のようにします。

databricks secrets put-secret --json '{
  "scope": "<scope-name>",
  "key": "<key-name>",
  "string_value": "<secret>"
}'

複数行のシークレットを作成する場合は、標準入力を使ってシークレットを渡すことができます。 次に例を示します。

(cat << EOF
this
is
a
multi
line
secret
EOF
) | databricks secrets put-secret <secret_scope> <secret_key>

ファイルからシークレットを指定することもできます。 シークレットの記述の詳細については、「Databricks CLI とは?」を参照してください。.

シークレットのリスト

特定のスコープ内のシークレットを一覧表示するには、次のようにします。

databricks secrets list-secrets <scope-name>

応答には、シークレットのキー名など、シークレットに関するメタデータ情報が表示されます。 このメタデータを一覧表示するには、ノートブックまたはジョブでシークレット ユーティリティ (dbutils.secrets) を使用します。 次に例を示します。

dbutils.secrets.list('my-scope')

シークレットを読み取ります

REST API または CLI を使用してシークレットを作成しますが、シークレットを読み取るには、ノートブックまたはジョブでシークレット ユーティリティ (dbutils.secrets) を使用する必要があります。

シークレットを削除します

Databricks CLI を使用してスコープからシークレットを削除するには:

databricks secrets delete-secret <scope-name> <key-name>

Secrets API を使用することもできます。

Azure Key Vault によってサポートされるスコープからシークレットを削除するには、Azure SetSecret REST API または Azure portal UI を使用します。

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

重要

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

Note

Databricks Runtime 6.4 以降の拡張サポートで使用できます。

Spark の構成プロパティまたは環境変数のシークレットを参照できます。 取得したシークレットは、ノートブックの出力、Spark ドライバー、および実行ログから編集されます。

重要

Spark 構成プロパティまたは環境変数にシークレットを参照する場合は、次のセキュリティへの影響に留意してください:

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

  • テーブルのアクセス制御が有効になっている場合であっても、クラスターでのアタッチ可能アクセス許可またはノートブックでの実行アクセス許可を持つユーザーは、ノートブック内からクラスター環境変数を読み取ることができます。 Databricks では、クラスター環境変数がクラスター上のすべてのユーザーから使用できない場合、クラスター環境変数にシークレットを格納することはお勧めしません。

  • シークレットは、Spark ドライバーのログ stdout および stderr からは "編集されません"。 機密データを保護するため、既定では、ジョブに対する "管理可能" アクセス許可、シングル ユーザー アクセス モード、共有アクセス モード クラスターを設定されたユーザーのみが、Spark ドライバーのログを表示できます。 "アタッチ可能" または "再起動可能" アクセス許可を持つユーザーがこれらのクラスターのログを表示できるようにするには、クラスター構成で次の Spark 構成プロパティを設定します: spark.databricks.acl.needAdminPermissionToViewLogs false

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

要件と制限

Spark 構成プロパティと環境変数でシークレットを参照する場合は、次の要件と制限が適用されます:

  • クラスター所有者には、シークレット スコープに対する CAN READ アクセス許可が必要です。
  • クラスター所有者だけが、Spark 構成プロパティまたは環境変数でシークレットに参照を追加し、既存のスコープと名前を編集できます。 所有者は、Secrets API を使用してシークレットを変更します。 シークレットを再度取り出すには、クラスターを再起動する必要があります。
  • クラスターに対する CAN MANAGE アクセス許可を持つユーザーは、シークレットの Spark 構成プロパティまたは環境変数を削除できます。

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

任意の有効な変数名または Spark 構成プロパティを使用してシークレットを参照できます。 Azure Databricks では、変数名ではなく、設定されている値の構文に基づいてシークレットを参照する変数に対して特別な動作が可能になります。

Spark 構成プロパティまたは環境変数値の構文は、{{secrets/<scope-name>/<secret-name>}} である必要があります。 値は {{secrets/ で始まり、}} で終わる必要があります。

Spark 構成プロパティまたは環境変数の変数部分は次のとおりです。

  • <scope-name>: シークレットが関連付けられているスコープの名前。
  • <secret-name>: スコープ内のシークレットの一意の名前。

たとえば、「 {{secrets/scope1/key1}} 」のように入力します。

注意

  • 中かっこの間にスペースを入れないでください。 スペースがある場合は、スコープまたはシークレットの名前の一部として扱われます。

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

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

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

任意の Spark 構成 <property-name> でシークレットを参照できます。 各 Spark 構成プロパティは 1 つのシークレットのみを参照できますが、シークレットを参照するように複数の Spark プロパティを構成できます。

次に例を示します。

シークレットを参照するように 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

シークレットのアクセス許可を管理する

このセクションでは、Databricks CLI (バージョン 0.205 以降) を使ってシークレットのアクセス制御を管理する方法について説明します。 Secrets API または Databricks Terraform プロバイダーを使うこともできます。 シークレットのアクセス許可レベルについては、シークレット ACL に関する記事を参照してください

シークレット ACL を作成する

Databricks CLI (レガシ)」 を使用して、特定のシークレット スコープのシークレット ACL を作成するには、次のようにします

databricks secrets put-acl <scope-name> <principal> <permission>

既に適用されているアクセス許可を持つプリンシパルに対して put 要求を行うと、既存のアクセス許可レベルが上書きされます。

principal フィールドは、既存の Azure Databricks プリンシパルを指定します。 ユーザーは、メールアドレス、その applicationId 値を使用したサービス プリンシパル、およびグループ名を使用したグループを使用して指定されます。

シークレット ACL を表示する

特定のシークレット スコープのシークレット ACL をすべて表示するには、次のようにします。

databricks secrets list-acls <scope-name>

特定のシークレット スコープのプリンシパルに適用されるシークレット ACL を取得するには、次のようにします。

databricks secrets get-acl <scope-name> <principal>

指定されたプリンシパルとスコープに対して ACL が存在しない場合、この要求は失敗します。

シークレット ACL を削除する

特定のシークレット スコープのプリンシパルに適用されているシークレット ACL を削除するには、次のようにします。

databricks secrets delete-acl <scope-name> <principal>