シークレット管理

データにアクセスするには、 JDBCを介して外部データソースに対して認証する必要がある場合があります。 資格情報をノートブックに直接入力する代わりに、 Databricks シークレットを使用して資格情報を保存し、ノートブックとジョブで参照できます。 この記事では、Databricks シークレットの概要について説明します。

シークレットの概要

シークレットを設定して使用するには、次の操作を行います。

  1. シークレットスコープを作成します。 シークレットスコープは、名前で識別されるシークレットのコレクションです。

  2. スコープにシークレットを追加する

  3. シークレットスコープに対する権限を割り当てます。

  4. Databricks ユーティリティを使用したシークレットへのアクセスについては、Secrets ユーティリティ (dbutils.secrets)を参照してください。

ワークフローでシークレットを使用する方法のエンドツーエンドの例については、「 チュートリアル: Databricks シークレットを作成して使用する」を参照してください。 Spark 構成プロパティまたは環境変数でシークレットを使用するには、「 Spark 構成プロパティまたは環境変数でシークレットを使用する」を参照してください。

警告

管理者、シークレット作成者、 およびアクセス許可 を付与されたユーザーは、Databricks シークレットを読み取ることができます。 Databricks では、ノートブックに表示される可能性のあるシークレット値を編集する努力をしていますが、そのようなユーザーがシークレットを読み取るのを防ぐことはできません。 シークレット編集を参照してください。

Manage シークレットスコープ

シークレットのスコープは、名前によって識別されるシークレットの集まりです。 Databricksでは、シークレットスコープを個人ではなくロールまたはアプリケーションに合わせることを推奨しています。

シークレットスコープは、 Databricksが所有および管理する暗号化されたデータベースに格納されます。

シークレットスコープを作成した後、ユーザーに読み取り、書き込み、およびスクリートスコープの管理のアクセス権を付与するアクセス許可を割り当てることができます。

DatabricksでサポートされているSecretスコープを作成する

このセクションでは、What is the Databricks CLI (version 0.205 以降) を使用してシークレットスコープを作成する方法について説明します。Secrets API を使用することもできます。

シークレットスコープ names:

  • ワークスペース内で一意である必要があります。

  • 英数字、ダッシュ、アンダースコア、 @、ピリオドで構成する必要があり、128 文字を超えることはできません。

  • 大文字と小文字は区別されません。

シークレットスコープの名前は機密性がないと見なされ、ワークスペース内のすべてのユーザーが読み取ることができます。

Databricks CLIを使用してスコープを作成するには、次の手順を実行します。

databricks secrets create-scope <scope-name>

デフォルトでは、スコープは、スコープを作成したユーザーの MANAGE 権限で作成されます。 Databricksbacked シークレットスコープを作成したら、シークレットを追加できます。

シークレットスコープをリストする

CLIを使用してワークスペース内の既存のスコープを一覧表示するには、次の手順を実行します。

databricks secrets list-scopes

Secrets API を使用してシークレットスコープを一覧表示することもできます。

シークレットスコープを削除する

シークレットスコープを削除すると、スコープに適用されているすべてのシークレットと ACL が削除されます。 CLI を使用してスコープを削除するには、次のコマンドを実行します。

databricks secrets delete-scope <scope-name>

Secrets APIを使用してシークレットスコープを削除することもできます。

シークレットを管理する

シークレットは、シークレットスコープ内で一意のキー名を使用して機密資料を保存するキーと値のペアです。

このセクションでは、What is the Databricks CLI (version 0.205 以降) を使用してシークレットスコープを作成する方法について説明します。Secrets API を使用することもできます。シークレットの名前では、大文字と小文字は区別されません。

シークレットを作成する

このセクションでは、「 Databricks CLI とは」 (バージョン 0.205 以降) を使用するか、 ノートブックで Databricks SDK for Python を使用してシークレットを作成する方法について説明します。 Secrets API を使用することもできます。シークレットの名前では、大文字と小文字は区別されません。

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>")

シークレットを読み取る

ノートブックまたはジョブでシークレットを読み込むには、 シークレット・ユーティリティ (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]に置き換えられます。

警告

ノートブック セル出力のシークレット編集は、リテラルにのみ適用されます。 シークレット編集機能は、シークレットリテラルの意図的かつ任意の変換を防ぐものではありません。 シークレットを適切に制御するには、 アクセス制御リスト を使用して、コマンドを実行するアクセス許可を制限する必要があります。 これにより、共有ノートブック コンテキストへの不正アクセスが防止されます。