次の方法で共有


シークレットの管理

JDBC を介して外部データ ソースにアクセスする場合、多くの場合、認証が必要になります。 資格情報をノートブックに直接入力するのではなく、Databricks シークレットを使用して資格情報を安全に格納し、ノートブックとジョブで参照することができます。 この方法により、セキュリティが強化され、資格情報の管理が簡略化されます。 このページでは、Databricks シークレットの概要について説明します。

メモ

Databricks では、Unity カタログを使用してクラウド ストレージ内のデータへのアクセスを構成することをお勧めします。 Unity カタログを使用したクラウド オブジェクト ストレージへの接続を参照してください。

シークレットの概要

シークレットを構成して使用するには、次の手順を実行します。

  1. シークレット スコープを作成する。 シークレット スコープとは、名前によって識別されるシークレットのコレクションです。
  2. シークレットをスコープに追加する
  3. シークレットのスコープにアクセス許可を割り当てる。
  4. コード内のシークレットを参照する。

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

警告

ワークスペース管理者、シークレット作成者、アクセス許可が付与されているユーザーは、Databricks シークレットにアクセスして読み取ることができます。 Databricks はノートブックの出力でシークレット値の編集を試みますが、これらのユーザーがシークレットの内容を完全に表示できないようにすることはできません。 機密情報を保護するには、常にシークレット アクセス許可を慎重に割り当てます。

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

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

シークレット スコープには、次の 2 種類があります。

  • Azure Key Vault でサポート: Azure Key Vault でサポートされるシークレット スコープを使用して、Azure Key Vault に格納されているシークレットを参照できます。 Azure Key Vault でサポートされるシークレット スコープは、その Key Vault への読み取り専用インターフェイスです。 Azure Key Vault でサポートされるシークレット スコープ内のシークレットは、Azure 内で管理する必要があります。
  • Databricks でサポート: Databricks でサポートされるシークレット スコープは、Azure Databricks によって所有および管理される暗号化されたデータベースに格納されます。

シークレット スコープを作成したら、アクセス許可を割り当てて、シークレット スコープの読み取り、書き込み、管理へのアクセス権をユーザーに付与できます。

Azure Key Vault でサポートされるシークレット スコープを作成する

このセクションでは、Azure portal と Azure Databricks ワークスペース UI を使用して、Azure Key Vault でサポートされるシークレット スコープを作成する方法について説明します。 Databricks CLI を使用して、Azure Key Vault でサポートされるシークレット スコープを作成することもできます。

必要条件

  • Azure Key Vault インスタンスが必要です。 Key Vault インスタンスがない場合は、「Azure portal を使用してキー コンテナーを作成する」に記載されている手順に従ってください。
  • シークレット スコープをサポートするために使用する Azure Key Vault インスタンス上の Key Vault 共同作成者、共同作成者、または所有者のロールが必要です。

メモ

Azure Key Vault でサポートされるシークレット スコープを作成するには、Azure キー コンテナー インスタンスに対する共同作成者または所有者のロールが必要です。これは、Azure Databricks サービスが以前にそのキー コンテナーへのアクセスを許可されている場合でも必要です。

キー コンテナーが Azure Databricks ワークスペースとは異なるテナントに存在する場合、シークレット スコープを作成する Azure AD ユーザーは、キー コンテナーのテナントに サービス プリンシパルを作成するアクセス許可 を持っている必要があります。 そうでないと、次のエラーが発生します。

Unable to grant read/list permission to Databricks service principal to KeyVault 'https://xxxxx.vault.azure.net/': Status code 403, {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."},"requestId":"XXXXX","date":"YYYY-MM-DDTHH:MM:SS"}}

Azure Databricks 用に Azure キー コンテナー インスタンスを構成する

  1. Azure portal にログインし、Azure キー コンテナー インスタンスを見つけて選択します。

  2. [設定] の下の [アクセス構成] タブをクリックします。

  3. [アクセス許可モデル][Vault アクセス ポリシー] に設定します。

    メモ

    Azure Key Vault でサポートされるシークレット スコープ ロールを作成すると、キー コンテナー アクセス ポリシーを使用して、Azure Databricks サービスのリソース ID に Get および List アクセス許可が付与されます。 Azure ロールベースのアクセス制御アクセス許可モデルは、Azure Databricks ではサポートされていません。

  4. [設定] で、[ネットワーク] を選択します。

  5. [ファイアウォールと仮想ネットワーク] で、[次からのアクセスを許可する:][特定の仮想ネットワークと IP アドレスからのパブリック アクセスを許可する] に設定します。

    [例外] で、[信頼された Microsoft サービスがこのファイアウォールをバイパスすることを許可します] を選択します。

    メモ

    [次からのアクセスを許可する:][すべてのネットワークからのパブリック アクセスを許可する] に設定することもできます。

Azure Key Vault でサポートされるシークレット スコープを作成する

  1. https://<databricks-instance>#secrets/createScope にアクセスします。 <databricks-instance> をお使いの Azure Databricks デプロイのワークスペース URL に置き換えます。 この URL では大文字と小文字が区別されます。 たとえば、scopecreateScope は大文字の S を使用する必要があります。

    スコープの作成

  2. シークレット スコープの名前を入力します。 シークレット スコープの名前は大文字と小文字が区別されません。

  3. [プリンシパルの管理] で、[作成者] または [すべてのワークスペース ユーザー] を選択し、シークレット スコープに対する管理アクセス許可を持つユーザーを指定します。

    管理アクセス許可により、ユーザーはスコープの読み取り、書き込み、アクセス許可の付与を行うことができます。 [作成者] を選択するには、アカウントが Premium プランである必要があります。

  4. [DNS 名] (例: https://databrickskv.vault.azure.net/) と [リソース ID] を入力します。次に例を示します。

    /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/databricks-rg/providers/Microsoft.KeyVault/vaults/databricksKV
    

    これらのプロパティは、Azure portal 内の Azure Key Vault の [設定] > [プロパティ] タブから使用できます。

  5. [作成] をクリックします。

  6. Databricks CLIdatabricks secrets list-scopes コマンドを使用して、スコープが正常に作成されたことを確認します。

Databricks でサポートされるシークレット スコープを作成する

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

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

  • ワークスペース内で一意である必要があります。
  • 英数字、ダッシュ、アンダースコア、@、ピリオドで構成されている必要があり、128 文字を超えることはできません。
  • 大文字と小文字が区別されません。

シークレット スコープ名は、機密ではないと見なされ、ワークスペース内のすべてのユーザーが読み取り可能です。

Databricks CLI を使用してスコープを作成するには、次のようにします。

databricks secrets create-scope <scope-name>

既定では、スコープは、スコープを作成したユーザーに対する管理アクセス許可付きで作成されます。 Databricks でサポートされるシークレット スコープを作成したら、シークレットを追加できます。

シークレット スコープを一覧表示する

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

databricks secrets list-scopes

Secrets API を使用して、既存のスコープを一覧表示することもできます。

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

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

databricks secrets delete-scope <scope-name>

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

シークレットを管理する

シークレットは、シークレット スコープ内で一意のキー名を使用して機密マテリアルを格納するキーと値のペアです。

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

シークレットを作成する

シークレットを作成する方法は、ユーザーが Azure Key Vault でサポートされるスコープを使用しているか、Databricks でサポートされるスコープを使用しているかによって異なります。

Azure Key Vault でサポートされるスコープにシークレットを作成する

Azure Key Vault にシークレットを作成するには、Azure portal または Azure Set Secret REST API を使用します。 例については、「手順 4: クライアント シークレットを Azure Key Vault に追加する」を参照してください。

Databricks でサポートされるスコープにシークレットを作成する

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

Databricks コマンドラインインターフェース (CLI)

Databricks でサポートされるスコープにシークレットを作成する場合は、次の 3 つの方法のいずれかでシークレット値を指定できます。

  • –string 値フラグを使用して、値を文字列として指定します。
  • 対話形式でプロンプトが表示されたら、シークレットを入力します (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>

Databricks SDK for Python

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.secrets.put_secret("<secret_scope>","<key-name>",string_value ="<secret>")

シークレットを読み取る

このセクションでは、Databricks CLI (バージョン 0.205 以降) を使用して、または Secrets ユーティリティ (dbutils.secrets) を使用してノートブックでシークレットを読み取る方法について説明します。

Databricks コマンドラインインターフェース (CLI)

Databricks CLI を使用してシークレットの値を読み取るには、base64 でエンコードされた値をデコードする必要があります。 jq を使用して値を抽出し、base --decode を使用してデコードできます。

databricks secrets get-secret <scope-name> <key-name> | jq -r .value | base64 --decode

Secrets ユーティリティ (dbutils.secrets)

password = dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")

シークレットを一覧表示する

特定のスコープ内のシークレットを一覧表示するには、次のようにします。

databricks secrets list-secrets <scope-name>

応答には、シークレットのキー名など、シークレットに関するメタデータ情報が表示されます。 このメタデータを一覧表示するには、ノートブックまたはジョブで Secrets ユーティリティ (dbutils.secrets) を使用します。 次に例を示します。

dbutils.secrets.list('my-scope')

シークレットを削除する

Databricks CLI を使用してスコープからシークレットを削除するには、次のようにします。

databricks secrets delete-secret <scope-name> <key-name>

Secrets API を使用することもできます。

Azure Key Vault によってサポートされるスコープからシークレットを削除するには、Azure SetSecret REST API または Azure portal UI を使用します。

シークレット スコープのアクセス許可を管理する

既定では、シークレット スコープを作成するユーザーには管理アクセス許可が付与されます。 これにより、スコープ作成者はスコープ内のシークレットの読み取り、スコープへのシークレットの書き込み、スコープに対する権限の管理を行うことができます。

メモ

シークレット ACL はスコープ レベルで適用されます。 Azure Key Vault でサポートされるスコープを使用する場合、スコープへのアクセスが許可されているユーザーは、Azure Key Vault 内のすべてのシークレットにアクセスできます。 アクセスを制限するには、個別の Azure キー コンテナー インスタンスを使用します。

このセクションでは、Databricks CLI (バージョン 0.205 以降) を使用してシークレット アクセス制御を管理する方法について説明します。 Secrets API を使用することもできます。 シークレットのアクセス許可レベルについては、「シークレット ACL」を参照してください

シークレット スコープに対するアクセス許可をユーザーに付与する

Databricks CLI を使用してシークレット スコープに対するアクセス許可をユーザーに付与するには、次のようにします。

databricks secrets put-acl <scope-name> <principal> <permission>

既にアクセス許可が適用されているプリンシパルに対して put 要求を行うと、既存の権限レベルが上書きされます。

principal フィールドは、既存の Azure Databricks プリンシパルを指定します。 ユーザーはそのメール アドレスで、サービス プリンシパルはその applicationId 値で、グループはそのグループ名で指定されます。 詳細については、「プリンシパル」を参照してください。

シークレット スコープのアクセス許可を表示する

特定のシークレット スコープのすべてのシークレット スコープのアクセス許可を表示するには、次のようにします。

databricks secrets list-acls <scope-name>

特定のシークレット スコープのプリンシパルに適用されたシークレット スコープのアクセス許可を取得するには、次のようにします。

databricks secrets get-acl <scope-name> <principal>

指定されたプリンシパルとスコープに対して ACL が存在しない場合、この要求は失敗します。

シークレット スコープのアクセス許可を削除する

特定のシークレット スコープのプリンシパルに適用されたシークレット スコープのアクセス許可を削除するには、次のようにします。

databricks secrets delete-acl <scope-name> <principal>

シークレットの編集

資格情報を Azure Databricks シークレットとして格納すると、ノートブックとジョブを実行するときに資格情報を簡単に保護できます。 ただし、シークレットを標準出力バッファーに誤って出力したり、変数の割り当て中に値を表示したりすることは簡単に起こります。

これを防ぐために、Azure Databricks は、 dbutils.secrets.get() を使用して読み取られ、Spark 構成プロパティで参照されるすべてのシークレット値を編集します。 表示されると、シークレット値は [REDACTED]に置き換えられます。

たとえば、dbutils.secrets.get() を使用して変数をシークレット値に設定し、その変数を出力すると、その変数は [REDACTED] に置き換えられます。

警告

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

SQL でのシークレットの編集

Azure Databricks は、参照されるビューやユーザー定義関数など、シークレット関数を呼び出すすべての SQL DQL (データ クエリ言語) コマンドを編集しようとします。 secret関数を使用すると、出力は可能な限り[REDACTED]に置き換えられます。 ノートブックの編集と同様に、これはリテラル値にのみ適用され、変換または間接的に参照されるシークレットには適用されません。

SQL DML (データ操作言語) コマンドの場合、Azure Databricks では、シークレットが安全と見なされる場合 (たとえば、 sha()aes_encrypt()などの暗号化関数にラップされている場合など)、シークレット参照が許可され、未加工の値が暗号化されずに格納されなくなります。

SQL でのシークレットの検証

Azure Databricks では、暗号化されていないシークレットがテーブルに保存される可能性がある SQL DML コマンドをブロックするための検証も適用されます。 クエリ アナライザーは、これらのシナリオを特定して防止しようとします。これにより、プレーンテキストで機密情報が誤って保存されるのを防ぐことができます。