Databricksにおけるシークレットの管理のコンテンツです。
Secrets | Databricks on AWS [2021/4/12時点]の翻訳です。
シークレットは機密情報を格納するキーバリュー形式の情報です。キーの名前はシークレットスコープにおいて一意である必要があります。一つのスコープには1,000のシークレットを格納できます。シークレットの最大サイズは128KBです。
シークレットの作成
シークレットの名前は大文字小文字を区別しません。
Databricks CLI(バージョン0.7.1以降)を使用して、Databricks管理のシークレットを作成するには以下を実行します。
databricks secrets put --scope <scope-name> --key <key-name>
エディターが開き、以下の内容が表示されます。
# ----------------------------------------------------------------------
# Do not edit the above line. Everything that follows it will be ignored.
# Please input your secret value above the line. Text will be stored in
# UTF-8 (MB4) form and any trailing new line will be stripped.
# Exit without saving will abort writing secret.
横線の上にシークレットの値を貼り付け、保存後エディターを終了します。スコープ内にキーとバリューのセットとして保存されます。
すでにキーが存在するものに対して書き込みを行うと、新たな値で更新されます。
ファイルやコマンドラインからシークレットを指定することも可能です。詳細はSecrets CLIを参照ください。
シークレットの一覧
特定のスコープのシークレットを表示するには以下を実行します。
databricks secrets list --scope <scope-name>
結果には、シークレットのキーや最終更新のタイムスタンプなどのシークレットのメタデータ情報が表示されます。ノートブックやジョブでシークレットを読み込むにはSecrets utilitiesを使用します。
databricks secrets list --scope jdbc
Key name Last updated
---------- --------------
password 1531968449039
username 1531968408097
シークレットの読み込み
シークレットはREST APIやCLIで作成できますが、ノートブックやジョブからシークレットを読み込むためにはSecrets utilitiesを使用します。
Spark設定と環境変数におけるシークレットのパス
プレビュー
本機能はパブリックプレビューです。
注意
Databricksランタイム6.1以降で利用できます。
Sparkの設定や環境変数にシークレットへのパスを含めることができます。取得されたシークレットはノートブックの出力やSparkドライバー、エグゼキューターのログからは削除されます。
重要!
シークレットはstdout、stderrからは削除されません。ワークアラウンドとしては、Sparkの設定でspark.databricks.acl.needAdminPermissionToViewLogs true
を指定することで、stdoutページをMANAGE
権限を持つユーザーのみが参照できるようにするというものです。
要件及び制限
- クラスターの作成者はシークレットスコープに対する
Read
権限を持つ必要があります。 - クラスターの作成者のみが、Spark設定や環境変数にシークレットのパスを指定することができ、既存のスコープ名を編集することができます。Put secret APIを用いてシークレットを変更します。その後、クラスターを再起動してシークレットを再取得する必要があります。
- クラスターに対する
Can Manage
権限を持つユーザーは、シークレットや環境変数を削除することができます。
パスの値
Spark設定や環境変数におけるパスの値は、{{secrets/<scope-name>/<secret-name>}}
の書式で指定される必要があります。
値は、{{secrets/
で始まり、}}
で終わる必要があります。設定および環境変数における変数値は以下の通りとなります。
-
<secret-prop-name>
: Spark設定におけるシークレットのプロパティ -
<scope-name>
: シークレットが関連づけられているスコープ名 -
<secret-name>
: スコープに含まれるシークレット名
注意
{}
の間にスペースを含めることはできません。スペースが含まれている場合、スコープやシークレット名の一部として取り扱われます。
- 書式が正しくない場合、例えば、
{{
や}}
で閉じられていない場合、値はSpark設定や環境変数として取り扱われます。
Spark設定にシークレットへのパスを含める
AWS configurationsで、以下の書式でシークレットパスを指定することができます。
spark.<secret-prop-name> <path-value>
spark.<secret-prop-name>
は、シークレットのパスにマッピングされるSpark設定のプロパティ名となります。シークレットのプロパティ名が一意である限り、複数のシークレットをSpark設定に含めることができます。
例
spark.password {{secrets/testScope/testKey1}}
ノートブックでシークレットを参照するには、spark.conf.get("spark.<secret-name>")
を実行します。
spark.conf.get("spark.password")
環境変数にシークレットへのパスを含める
シークレットのパスをenvironment variableに含め、cluster-scoped init scriptで使用することが可能です。Sparkで実行されているプログラムから環境変数にアクセスすることはできません。
SPARKPASSWORD=<path-value>
init scriptでシークレットにアクセするには、$SPARKPASSWORD
で参照します。
if [[ $SPARKPASSWORD ]]; then
use $SPARKPASSWORD
fi
シークレットの削除
スコープからシークレットを削除するには以下を実行します。
databricks secrets delete --scope <scope-name> --key <key-name>
シークレットが削除された後に、Databricks Utilitiesによって当該のキーに対するリクエストがあった場合には、処理は失敗します。