シークレットの管理
データにアクセスするために、JDBC 経由で外部データ ソースに対する認証が必要になる場合があります。 資格情報をノートブックに直接入力する代わりに、Azure Databricks シークレットを使用して資格情報を格納し、ノートブックとジョブで参照することができます。 この記事では、Azure Databricks シークレットの概要について説明します。
シークレットの概要
シークレットを構成して使用するには、次の手順を実行します。
- シークレットのスコープを作成します。 シークレットのスコープとは、名前によって識別されるシークレットのコレクションです。
- シークレットをスコープに追加する
- シークレット スコープに対するアクセス許可を割り当てます。
- Databricks ユーティリティを使用してシークレットにアクセスする方法については、「 Secrets ユーティリティ (dbutils.secrets)」を参照してください。
ワークフローでシークレットを使用する方法のエンド ツー エンドの例については、「 Tutorial: Databricks シークレットの作成と使用を参照してください。 Spark 構成プロパティまたは環境変数でシークレットを使用するには、「 Spark 構成プロパティまたは環境変数でシークレットを使用するを参照してください。
警告
管理者、シークレット作成者、およびアクセス許可を付与されたユーザーは、Azure Databricks シークレットを読み取ることができます。 Databricks はノートブックに表示される可能性のあるシークレット値を編集しようと努力していますが、そのようなユーザーがシークレットを読み取るのを防ぐことはできません。 「 Secret redactionを参照してください。
シークレット スコープを管理する
シークレットのスコープとは、名前によって識別されるシークレットのコレクションです。 Databricks では、シークレットのスコープを個人ではなくロールまたはアプリケーションに配置することをお勧めします。
シークレット スコープには、次の 2 種類があります。
- Azure Key Vault に基づく: Azure Key Vault でサポートされるシークレット スコープを使用してazure Key Vault に格納されているシークレットを参照できます。 Azure Key Vault でサポートされるシークレット スコープは、Key Vault への読み取り専用インターフェイスです。 Azure の Azure Key Vault に基づくシークレット スコープでシークレットを管理する必要があります。
- Databricks に基づく: Databricks ベースのシークレット スコープは、Azure Databricks によって所有および管理されている暗号化されたデータベースに格納されます。
シークレット スコープを作成したら、アクセス許可を割り当てて、scret スコープの読み取り、書き込み、管理へのアクセス権をユーザーに付与できます。
Azure Key Vault でサポートされるシークレット スコープを作成する
このセクションでは、Azure portal と Azure Databricks ワークスペース UI を使用して、Azure Key Vault でサポートされるシークレット スコープを作成する方法について説明します。 Databricks CLI を使用して、Azure Key Vault でサポートされるシークレットのスコープを作成することもできます。
要件
- Azure Key Vault インスタンスが必要です。 Key Vault インスタンスがない場合は、Azure portal を使用した Key Vault の作成に関する記事に記載されている手順に従ってください。
- シークレット スコープをバックアップするために使用する Azure Key Vault インスタンスに対する Key Vault 共同作成者、共同作成者、または所有者ロールが必要です。
Note
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 キー コンテナー インスタンスを構成する
Azure Portal にログインし、Azure キー コンテナー インスタンスを見つけて選択します。
[ Settings で、 Access 構成 タブをクリックします。
[アクセス許可モデル] を [Vault アクセス ポリシー] に設定します。
Note
Azure Key Vault がサポートするシークレット スコープ ロールを作成すると、キー コンテナー アクセス ポリシーを使用して、Azure Databricks サービスのリソース ID に Get および List アクセス許可が付与されます。 Azure ロールベースのアクセス制御アクセス許可モデルは、Azure Databricks ではサポートされていません。
[設定] で [ネットワーク] を選択します。
[ファイアウォールと仮想ネットワーク] で、[次からのアクセスを許可する:] を [特定の仮想ネットワークと IP アドレスからのパブリック アクセスを許可する] に設定します。
[例外] で、[信頼された Microsoft サービスがこのファイアウォールをバイパスすることを許可します] を選択します。
Note
次からのアクセスを許可する: を すべてのネットワークからのパブリック アクセスを許可する に設定することもできます。
Azure Key Vault でサポートされるシークレット スコープを作成する
「
https://<databricks-instance>#secrets/createScope
」を参照してください。<databricks-instance>
を Azure Databricks デプロイのワークスペース URL に置き換えます。 この URL では大文字と小文字が区別されます。 たとえば、createScope
内のscope
は大文字のS
) を使用する必要があります。シークレットのスコープの名前を入力します。 シークレットのスコープの名前は大文字と小文字が区別されません。
Manage Principal でCreator または All workspace users を選択して、シークレット スコープに対する MANAGE アクセス許可を持つユーザーを指定します。
MANAGE アクセス許可を使用すると、ユーザーはスコープに対するアクセス許可を読み取り、書き込み、および許可できます。 Creatorを選択するには、アカウントに Premium プランが必要です。
[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 の [設定 > プロパティ] タブで使用できます。
Create をクリックしてください。
Databricks CLI の
databricks secrets list-scopes
コマンドを使用して、スコープが正常に作成されたことを確認します。
Databricks を利用するシークレットのスコープを作成する
このセクションでは、Databricks CLI の を使用してシークレット スコープを作成する方法について説明します (バージョン 0.205 以降)。 Secrets API を使用することもできます。
シークレット スコープ名:
- ワークスペース内で一意である必要がある。
- 英数字、ダッシュ、アンダースコア、
@
、ピリオドで構成する必要があり、128 文字を超えることはできません。 - 大文字と小文字は区別されません。
シークレット スコープ名は機密性の高い名前と見なされ、ワークスペース内のすべてのユーザーが読み取ることができます。
Databricks CLI を使用してスコープを作成するには:
databricks secrets create-scope <scope-name>
既定では、スコープは、スコープを作成したユーザーに対する MANAGE アクセス許可付きで作成されます。 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 以降)。 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 を使用することもできます。
Azure Key Vault によってサポートされるスコープからシークレットを削除するには、Azure SetSecret REST API または Azure portal UI を使用します。
シークレット スコープのアクセス許可を管理する
既定では、シークレット スコープを作成するユーザーには MANAGE アクセス許可が付与されます。 これにより、スコープ作成者はスコープ内のシークレットを読み取り、スコープにシークレットを書き込み、スコープのアクセス許可を管理できます。
Note
シークレット 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()
を使用して読み取ったすべてのシークレット値を編集します。 ノートブックのセル出力に表示されるときに、シークレット値は [REDACTED]
に置き換えられます。
たとえば、dbutils.secrets.get()
を使用して変数をシークレット値に設定し、その変数を出力すると、その変数は [REDACTED]
に置き換えられます。
警告
ノートブック セル出力のシークレットの編集は、リテラルにのみ適用されます。 シークレットの編集機能は、シークレット リテラルの意図的および任意の変換を防ぎません。 シークレットを適切に制御するには、 アクセス制御リスト を使用してコマンドを実行するアクセス許可を制限する必要があります。 これにより、共有ノートブック コンテキストへの未承認のアクセスが防止されます。