シークレット
シークレットは、シークレット マテリアルを格納するキーと値のペアであり、 シークレットスコープ内で一意のキー名を持ちます。 各スコープは 1000 個のシークレットに制限されています。 許可されるシークレット値の最大サイズは 128 KB です。 Databricks ユーティリティを使用してシークレットにアクセスするには、Secrets ユーティリティ (dbutils.secrets)を参照してください。
「Secrets API」も参照してください。
シークレットを作成する
シークレット名では大文字と小文字が区別されません。
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を使用することもできます。
Spark構成プロパティまたは環境変数でシークレットを使用する
プレビュー
この機能はパブリックプレビュー段階です。
注
Databricks Runtime 6.4延長サポート以降で利用可能です。
Spark構成プロパティや環境変数でシークレットを参照することができます。取得されたシークレットは、ノートブックの出力、Sparkドライバーおよびエグゼキューターのログではマスキングされます。
重要
Spark構成プロパティや環境変数でシークレットを参照する場合は、以下のセキュリティへの影響に留意してください。
クラスターでテーブルアクセスコントロールが有効になっていない場合、クラスターに対する [アタッチ可能] アクセス許可またはノートブックに対する [実行] アクセス許可を持つユーザーは、ノートブック内から Spark 構成プロパティを読み取ることができます。 これには、シークレットを読み取る直接のアクセス許可を持たないユーザーが含まれます。 Databricks では、すべてのクラスターで テーブルアクセスコントロール を有効にするか、シークレット スコープを使用してシークレットへのアクセスを管理することをお勧めします。
テーブルアクセスコントロールが有効になっている場合でも、クラスターに対するCan Attach To権限またはノートブックに対するRun権限を持つユーザーは、ノートブック内からクラスター環境変数を読み取ることができます。Databricksでは、クラスター上のすべてのユーザーがシークレットを利用できるようにする必要がない場合、クラスター環境変数にシークレットを保存することはお勧めしていません。
シークレットは、Spark ドライバー ログ
stdout
およびstderr
ストリームから編集されません。 機密データを保護するために、デフォルトでは、Spark ドライバー ログは、ジョブ、シングル ユーザー アクセス モード、および共有アクセス モードのクラスターに対する CAN MANAGE 権限を持つユーザーのみが表示できます。 Can Attach Toまたは「 Can Restart権限を持つユーザーがこれらの クラスター 上のログを表示できるようにするには、 クラスター 構成で次のSpark構成プロパティを設定します:spark.databricks.acl.needAdminPermissionToViewLogs false
。分離なしの共有アクセス モード クラスターでは、Spark Can Attach Toまたは 権限を持つユーザーが ドライバーCAN MANAGE ログを表示できます。ログを読み取ることができるユーザーを CAN MANAGE 権限を持つユーザーのみに制限するには、
spark.databricks.acl.needAdminPermissionToViewLogs
をtrue
に設定します。
要件と制限
Spark構成プロパティや環境変数でシークレットを参照する場合、以下の要件と制限が適用されます:
クラスターの所有者は、シークレットスコープに対してCAN READ権限を持っている必要があります。
クラスター所有者のみが、Spark構成プロパティまたは環境変数にシークレットへの参照を追加し、既存のスコープと名前を編集できます。所有者はSecrets APIを使用してシークレットを変更します。シークレットを再度取得するには、クラスターを再起動する必要があります。
クラスターに対する CAN MANAGE 権限を持つユーザーは、シークレット Spark 構成プロパティまたは環境変数を削除できます。
Spark構成プロパティまたは環境変数でシークレットを参照するための構文
シークレットは、任意の有効な変数名またはSpark構成プロパティを使用して参照できます。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}}
ノートブック内のシークレットを取得して使用します。
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
シークレットのアクセス許可を管理する
このセクションでは、「 Databricks CLI とは何か?」 (バージョン 0.205 以降) を使用してシークレット アクセス制御を管理する方法について説明します。 Secrets APIまたはDatabricks Terraform プロバイダーを使用することもできます。 シークレットのアクセス許可レベルについては、「 シークレット ACL」を参照してください。
シークレットACLを作成する
Databricks CLI を使用して特定のシークレットスコープのシークレットACLを作成するにはDatabricks CLI )
databricks secrets put-acl <scope-name> <principal> <permission>
既にアクセス許可が適用されているプリンシパルに対して put 要求を行うと、既存のアクセス許可レベルが上書きされます。
principal
フィールドは既存の Databricks プリンシパルを指定します。 ユーザーは電子メール アドレスを使用して指定され、サービス プリンシパルはそのapplicationId
値を使用して指定され、グループはグループ名を使用して指定されます。 詳細については、 「プリンシパル」を参照してください。