シークレット管理
データにアクセスするには、 JDBCを介して外部データソースに対して認証する必要がある場合があります。 資格情報をノートブックに直接入力する代わりに、 Databricks シークレットを使用して資格情報を保存し、ノートブックとジョブで参照できます。 この記事では、Databricks シークレットの概要について説明します。
シークレットの概要
シークレットを設定して使用するには、次の操作を行います。
- シークレットスコープを作成します。 シークレットスコープは、名前で識別されるシークレットのコレクションです。
- スコープにシークレットを追加する
- シークレットスコープに対する権限を割り当てます。
- Databricks ユーティリティを使用したシークレットへのアクセスについては、Secrets ユーティリティ (dbutils.secrets)を参照してください。
ワークフローでシークレットを使用する方法のエンドツーエンドの例については、「 チュートリアル: Databricks シークレットを作成して使用する」を参照してください。 Spark 構成プロパティまたは環境変数でシークレットを使用するには、「 Spark 構成プロパティまたは環境変数でシークレットを使用する」を参照してください。
Manage シークレットスコープ
シークレットのスコープは、名前によって識別されるシークレットの集まりです。 Databricksでは、シークレットスコープを個人ではなくロールまたはアプリケーションに合わせることを推奨しています。
シークレットスコープは、 Databricksが所有および管理する暗号化されたデータベースに格納されます。
シークレットスコープを作成した後、ユーザーに読み取り、書き込み、およびスクリートスコープの管理のアクセス権を付与するアクセス許可を割り当てることができます。
シークレットスコープを作成する
このセクションでは、Databricks CLI (バージョン 0.205 以降) または Databricks ワークスペース UI を使用してシークレットスコープを作成する方法について説明します。Secrets API を使用することもできます。
シークレットスコープ names:
- ワークスペース内で一意である必要があります。
- 英数字、ダッシュ、アンダースコア、
@
、ピリオドで構成する必要があり、128 文字を超えることはできません。 - 大文字と小文字は区別されません。
シークレットスコープの名前は機密性がないと見なされ、ワークスペース内のすべてのユーザーが読み取ることができます。
- Databricks CLI
- Databricks workspace UI
To create a scope using the Databricks CLI:
databricks secrets create-scope <scope-name>
By default, scopes are created with MANAGE permission for the user who created the scope. After you have created a Databricks-backed secret scope, you can add secrets to it.
-
Go to
https://<databricks-instance>#secrets/createScope
. Replace<databricks-instance>
with the workspace URL of your Databricks deployment. This URL is case sensitive. For example,scope
increateScope
must use an uppercaseS
). -
Enter the name of the secret scope. Secret scope names are case insensitive.
-
In Manage Principal select Creator or All workspace users to specify which users have the MANAGE permission on the secret scope.
The MANAGE permission allows users to read, write, and grant permissions on the scope. Your account must have the Premium plan or above to choose Creator.
-
Click Create.
-
Use the Databricks CLI
databricks secrets list-scopes
command to verify that the scope was created successfully.
シークレットスコープを一覧表示する
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
When you create a secret in a Databricks-backed scope, you can specify the secret value in one of three ways:
- Specify the value as a string using the –string-value flag.
- Input the secret when prompted interactively (single-line secrets).
- Pass the secret using standard input (multi-line secrets).
For example:
databricks secrets put-secret --json '{
"scope": "<scope-name>",
"key": "<key-name>",
"string_value": "<secret>"
}'
If you are creating a multi-line secret, you can pass the secret using standard input. For example:
(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>")
シークレットを読む
ノートブックまたはジョブでシークレットを読み込むには、 シークレット・ユーティリティ (dbutils.secrets) を使用する必要があります。 例えば:
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
値で、グループはグループ名で指定します。 詳細については、「 プリンシパル」を参照してください。
View シークレットスコープ permissions
特定のシークレットスコープのすべてのシークレットスコープのアクセス許可を表示するには:
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()
を使用して読み取られるすべてのシークレット値を編集します。 ノートブックのセル出力に表示されると、シークレット値は [REDACTED]
に置き換えられます。
たとえば、 dbutils.secrets.get()
を使用して変数をシークレット値に設定し、その変数を印刷すると、その変数は [REDACTED]
に置き換えられます。
ノートブック セル出力のシークレット編集は、リテラルにのみ適用されます。 シークレット編集機能は、シークレットリテラルの意図的かつ任意の変換を防ぐものではありません。 シークレットを適切に制御するには、 アクセス制御リスト を使用して、コマンドを実行するアクセス許可を制限する必要があります。 これにより、共有ノートブック コンテキストへの不正アクセスが防止されます。