シークレット管理
JDBCを介して外部データソースにアクセスする場合、多くの場合、認証が必要になります。資格情報をノートブックに直接入力するのではなく、Databricks シークレットを使用して資格情報を安全に保存し、ノートブックやジョブで参照できます。このアプローチにより、セキュリティが強化され、資格情報の管理が簡素化されます。このページでは、Databricks シークレットの概要について説明します。
Databricks では、Unity Catalog を使用してクラウド ストレージ内のデータへのアクセスを構成することをお勧めします。「Unity Catalog を使用してクラウド オブジェクト ストレージとサービスに接続する」を参照してください。
シークレットの概要
シークレットを設定して使用するには、次の操作を行います。
- シークレットスコープを作成します。 シークレットスコープは、名前で識別されるシークレットのコレクションです。
- スコープにシークレットを追加する
- シークレットスコープに対する権限を割り当てます。
- コード内のシークレットを参照します。
ワークフローでシークレットを使用する方法のエンドツーエンドの例については、「 チュートリアル: Databricks シークレットを作成して使用する」を参照してください。 Spark 構成プロパティまたは環境変数でシークレットを使用するには、「 Spark 構成プロパティまたは環境変数でシークレットを使用する」を参照してください。
ワークスペース管理者、シークレット作成者、およびアクセス許可が付与されたユーザーは、Databricks シークレットにアクセスして読み取ることができます。Databricks はノートブック出力のシークレット値を編集しようとしますが、これらのユーザーがシークレット コンテンツを表示するのを完全に防ぐことはできません。機密情報を保護するために、常にシークレット アクセス許可を慎重に割り当ててください。
シークレットスコープの管理
シークレットのスコープは、名前によって識別されるシークレットの集まりです。 Databricksでは、シークレットスコープを個人ではなくロールまたはアプリケーションに合わせることを推奨しています。
シークレットスコープは、 Databricksが所有および管理する暗号化されたデータベースに格納されます。
シークレットスコープを作成した後、ユーザーにシークレットスコープの読み取り、書き込み、管理のアクセス権を付与する権限を割り当てることができます。
シークレットスコープを作成する
このセクションでは、Databricks CLI (バージョン 0.205 以降) または Databricks ワークスペース UI を使用してシークレットスコープを作成する方法について説明します。Secrets API を使用することもできます。
シークレットスコープ の名前:
- ワークスペース内で一意である必要があります。
- 英数字、ダッシュ、アンダースコア、
@
、ピリオドで構成する必要があり、128 文字を超えることはできません。 - 大文字と小文字は区別されません。
シークレットスコープの名前は機密性がないと見なされ、ワークスペース内のすべてのユーザーが読み取ることができます。
- Databricks CLI
- Databricks workspace UI
Databricks CLIを使用してスコープを作成するには、次の手順を実行します。
databricks secrets create-scope <scope-name>
デフォルトでは、スコープは、スコープを作成したユーザーの MANAGE 権限で作成されます。 Databricksbacked シークレットスコープを作成したら、シークレットを追加できます。
-
https://<databricks-instance>#secrets/createScope
に移動します。<databricks-instance>
を Databricks デプロイのワークスペース URL に置き換えます。この URL では大文字と小文字が区別されます。たとえば、createScope
のscope
では、大文字のS
) を使用する必要があります。 -
シークレットスコープの名前を入力します。シークレットスコープの名前では、大文字と小文字は区別されません。
-
[プリンシパルの管理] で [Creator ] または [すべてのワークスペース ユーザー ] を選択して、シークレットスコープに対する MANAGE 権限を持つユーザーを指定します。
MANAGE パーミッションを使用すると、ユーザーはスコープに対する読み取り、書き込み、およびパーミッションの付与を行うことができます。 クリエイター を選択するには、アカウントがプレミアムプラン以上 である必要があります。
-
作成 をクリックします。
-
Databricks CLI
databricks secrets list-scopes
コマンドを使用して、スコープが正常に作成されたことを確認します。
シークレットスコープを一覧表示する
CLIを使用してワークスペース内の既存のスコープを一覧表示するには、次の手順を実行します。
databricks secrets list-scopes
Secrets API を使用してシークレットスコープを一覧表示することもできます。
シークレットスコープを削除する
シークレットスコープを削除すると、スコープに適用されているすべてのシークレットと ACL が削除されます。 CLI を使用してスコープを削除するには、次のコマンドを実行します。
databricks secrets delete-scope <scope-name>
Secrets APIを使用してシークレットスコープを削除することもできます。
シークレットを管理する
シークレットは、シークレットスコープ内で一意のキー名を使用して機密資料を保存するキーと値のペアです。
このセクションでは、Databricks CLI (バージョン0.205以降)を使用してシークレットスコープを作成する方法について説明します。Secrets API を使用することもできます。シークレットの名前では、大文字と小文字は区別されません。
シークレットを作成する
このセクションでは、 Databricks CLI (バージョン 0.205 以降) を使用してシークレットを作成する方法、または Databricks SDK for Python を使用してノートブックでシークレットを作成する方法について説明します。 Secrets API を使用することもできます。シークレットの名前では、大文字と小文字は区別されません。
- Databricks CLI
- Databricks SDK for Python
Databricks がサポートするスコープでシークレットを作成する場合は、次の 3 つの方法のいずれかでシークレット値を指定できます。
- -string-value フラグを使用して、値を文字列として指定します。
- 対話形式でプロンプトが表示されたら、シークレットを入力します (1 行のシークレット)。
- 標準入力 (複数行のシークレット) を使用してシークレットを渡します。
例えば:
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 <scope-name> <key-name>
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.secrets.put_secret("<secret_scope>","<key-name>",string_value ="<secret>")
シークレットの読み込み
このセクションでは、 Databricks CLI (バージョン 0.205 以降) を使用してシークレットを読み取る方法、または シークレット ユーティリティ (dbutils.secrets) を使用してノートブックでシークレットを読み取る方法について説明します。
- Databricks CLI
- Secrets utility (dbutils.secrets)
Databricks CLI を使用してシークレットの値を読み取るには、base64 でエンコードされた値をデコードする必要があります。jq
を使用して値を抽出し、base --decode
してデコードできます。
databricks secrets get-secret <scope-name> <key-name> | jq -r .value | base64 --decode
password = dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
シークレットを一覧表示する
特定のスコープ内のシークレットを一覧表示するには、以下の手順を実行します。
databricks secrets list-secrets <scope-name>
レスポンスには、シークレットキーの名前など、シークレットに関するメタデータ情報が表示されます。 シークレット・ユーティリティ (dbutils.secrets) を使用します。 ノートブックまたはジョブで、このメタデータを一覧表示します。 例えば:
dbutils.secrets.list('my-scope')
シークレットを削除する
Databricks CLIを使用してスコープからシークレットを削除するには、以下の手順を実行します。
databricks secrets delete-secret <scope-name> <key-name>
Secrets APIを使用することもできます。
シークレットスコープ 権限の管理
デフォルトでは、シークレットスコープを作成するユーザーには MANAGE アクセス許可が付与されます。 これにより、スコープ作成者は、スコープ内のシークレットを読み取り、スコープにシークレットを書き込み、スコープに対するアクセス許可を管理できます。
このセクションでは、 Databricks CLI (バージョン 0.205 以降) を使用してシークレット アクセス制御を管理する方法について説明します。 Secrets API を使用することもできます。シークレットのアクセス許可レベルについては、シークレット ACLを参照してください。
シークレットスコープに対するユーザーの権限を付与する
Databricks CLIを使用してユーザーにシークレットスコープの権限を付与するには:
databricks secrets put-acl <scope-name> <principal> <permission>
すでにアクセス許可が適用されているプリンシパルに対して put リクエストを実行すると、既存のアクセス許可レベルが上書きされます。
principal
フィールドは、既存の Databricks プリンシパルを指定します。ユーザーは Eメール アドレスで、サービスプリンシパルは applicationId
値で、グループはグループ名で指定します。 詳細については、「 プリンシパル」を参照してください。
シークレットスコープ 権限の参照
特定のシークレットスコープのすべてのシークレットスコープのアクセス許可を表示するには:
databricks secrets list-acls <scope-name>
特定のシークレットスコープのプリンシパルに適用されたシークレットスコープのアクセス許可を取得するには:
databricks secrets get-acl <scope-name> <principal>
指定されたプリンシパルとスコープの ACL が存在しない場合、この要求は失敗します。
シークレットスコープ アクセス許可を削除する
特定のシークレットスコープのプリンシパルに適用されたシークレットスコープのアクセス許可を削除するには:
databricks secrets delete-acl <scope-name> <principal>
シークレットの除外
資格情報を Databricks シークレットとして保存すると、ノートブックやジョブを実行するときに資格情報を簡単に保護できます。 ただし、誤ってシークレットを標準出力バッファーに印刷したり、変数の代入中に値を表示したりことは簡単に起こりえます。
これを防ぐために、Databricks は、 dbutils.secrets.get()
を使用して読み取られ、Spark 構成プロパティで参照されるすべてのシークレット値を編集します。表示されると、シークレット値は [REDACTED]
に置き換えられます。
たとえば、 dbutils.secrets.get()
を使用して変数をシークレット値に設定し、その変数を印刷すると、その変数は [REDACTED]
に置き換えられます。
ノートブック セル出力のシークレット除外は、リテラルにのみ適用されます。 シークレット除外機能は、シークレットリテラルの意図的かつ任意の変換を防ぐものではありません。 シークレットを適切に制御するには、 アクセス制御リスト を使用して、コマンドを実行するアクセス許可を制限する必要があります。 これにより、共有ノートブック コンテキストへの不正アクセスが防止されます。