シークレット管理
データにアクセスするには、 JDBCを介して外部データソースに対して認証する必要がある場合があります。 資格情報をノートブックに直接入力する代わりに、 Databricks シークレットを使用して資格情報を保存し、ノートブックとジョブで参照できます。 この記事では、Databricks シークレットの概要について説明します。
シークレットの概要
シークレットを設定して使用するには、次の操作を行います。
シークレットスコープを作成します。 シークレットスコープは、名前で識別されるシークレットのコレクションです。
スコープにシークレットを追加する
シークレットスコープに対する権限を割り当てます。
Databricks ユーティリティを使用したシークレットへのアクセスについては、Secrets ユーティリティ (dbutils.secrets)を参照してください。
ワークフローでシークレットを使用する方法のエンドツーエンドの例については、「 チュートリアル: Databricks シークレットを作成して使用する」を参照してください。 Spark 構成プロパティまたは環境変数でシークレットを使用するには、「 Spark 構成プロパティまたは環境変数でシークレットを使用する」を参照してください。
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 以降) を使用してシークレットを作成する方法について説明します。 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 <secret_scope> <secret_key>
シークレットをリストする
特定のスコープ内のシークレットを一覧表示するには、以下の手順を実行します。
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を使用することもできます。
シークレットスコープ パーミッションの管理
デフォルトでは、シークレットスコープを作成するユーザーには MANAGE アクセス許可が付与されます。 これにより、スコープ作成者は、スコープ内のシークレットを読み取り、スコープにシークレットを書き込み、スコープに対するアクセス許可を管理できます。
このセクションでは、 Databricks CLI とは (バージョン 0.205 以降) を使用してシークレット アクセス制御を管理する方法について説明します。 Secrets API を使用することもできます。シークレットのアクセス許可レベルについては、「 シークレット ACL」を参照してください
シークレットスコープに対するユーザーの権限を付与する
Databricks CLIを使用してユーザーにシークレットスコープの権限を付与するには:
databricks secrets put-acl <scope-name> <principal> <permission>
すでにアクセス許可が適用されているプリンシパルに対して put リクエストを実行すると、既存のアクセス許可レベルが上書きされます。
principal
フィールドは、既存の Databricks プリンシパルを指定します。ユーザーは Eメール アドレスで、サービスプリンシパルは applicationId
値で、グループはグループ名で指定します。 詳細については、「 プリンシパル」を参照してください。
シークレットの編集
資格情報を Databricks シークレットとして保存すると、ノートブックやジョブを実行するときに資格情報を簡単に保護できます。 ただし、誤ってシークレットを標準出力バッファーに印刷したり、変数の代入中に値を表示したりするのは簡単です。
これを防ぐために、Databricks は dbutils.secrets.get()
を使用して読み取られるすべてのシークレット値を編集します。 ノートブックのセル出力に表示されると、シークレット値は [REDACTED]
に置き換えられます。
たとえば、 dbutils.secrets.get()
を使用して変数をシークレット値に設定し、その変数を印刷すると、その変数は [REDACTED]
に置き換えられます。
警告
ノートブック セル出力のシークレット編集は、リテラルにのみ適用されます。 シークレット編集機能は、シークレットリテラルの意図的かつ任意の変換を防ぐものではありません。 シークレットを適切に制御するには、 アクセス制御リスト を使用して、コマンドを実行するアクセス許可を制限する必要があります。 これにより、共有ノートブック コンテキストへの不正アクセスが防止されます。