管理サービス用にカスタマー マネージド キーを有効にする
注意
この機能を使用するには、Premium プランが必要です。
データをさらに制御するために、独自のキーを追加して、一部のデータの型へのアクセスを保護および制御できます。 Azure Databricks には、複数のカスタマー マネージド キー機能があります。 関連する機能を比較するには、「暗号化用のカスタマー マネージド キー」を参照してください。
ヒント
この記事では、マネージド サービス用の Azure Key Vault コンテナーから独自のキーを構成する方法について説明します。 Azure Key Vault マネージド HSM からのキーの使用手順については、「管理サービス用に HSM カスタマー マネージド キーを有効にする」を参照してください。
Azure Databricks コントロール プレーン内の管理サービス データは、保存時に暗号化されます。 次の種類の暗号化されたデータへのアクセスを保護および制御するために、管理サービスのカスタマー マネージド キーを追加できます。
- Azure Databricks コントロール プレーンのノートブック ソース。
- ノートブックのノートブック結果は、コントロール プレーンに格納されている (ジョブとしてではなく) 対話形式で実行されます。 既定では、より大きな結果がワークスペースのルート バケットにも格納されます。 すべての対話型ノートブックの結果をクラウド アカウントに格納するように Azure Databricks を構成できます。
- シークレット マネージャー API によって格納されるシークレット。
- Databricks SQL クエリとクエリ履歴。
- Databricks Git フォルダーによる Git 統合の設定のために使用される個人用アクセス トークン (PAT) またはその他の資格情報。
ワークスペースにカスタマー マネージド キー暗号化を追加すると、Azure Databricks はキーを使用して、ワークスペースのマネージド サービス データに対する今後の書き込み操作を暗号化するキーへのアクセスを制御します。 既存のデータは再暗号化されません。 データ暗号化キーは、いくつかの読み取りおよび書き込み操作のためにメモリにキャッシュされ、一定の間隔でメモリから削除されます。 そのデータに対する新しい要求には、クラウド サービスのキー管理システムに対する別の要求が必要です。 キーを削除するか取り消すと、保護されたデータの読み取りまたは書き込みは、キャッシュ時間間隔の終了時に失敗します。
後でカスタマー マネージド キーをローテーション (更新) できます。 「 後でキーをロテーションする」を参照してください。
この機能では、コントロール プレーンの外部の格納データは暗号化されません。 カスタマー マネージド キーのその他の機能については、「暗号化用のカスタマー マネージド キー」を参照してください
要件
これらのタスクに Azure CLI を使用するには、 Azure CLI ツールをインストール し、Databricks 拡張機能をインストールします。
az extension add --name databricks
これらのタスクに Powershell を使用するには、Azure PowerShellをインストールし、Databricks Powershell モジュールをインストールします。 また、ログインが必要です。
Connect-AzAccount
ユーザーとして Azure アカウントにログインするには、「Azure Databricks ユーザー アカウントで PowerShell にログインする」を参照してください。 Azure アカウントにサービス プリンシパルとしてログインするには、「Microsoft Entra ID サービス プリンシパルを使用した PowerShell ログイン」を参照してください。
手順 1: キー コンテナーを設定する
Azure Key Vault インスタンスを作成し、そのアクセス許可を設定する必要があります。 これは、Azure portal、CLI、または API 経由で実行できます。
重要
Key Vault は、Azure Databricks ワークスペースと同じ Azure テナント内にある必要があります。
以下の手順では、複数のデプロイ オプションの詳細を説明します。
Azure portal を使用する
- 次のようにキー コンテナーを作成または選択します。
- キー コンテナーを作成するには、キー コンテナーを作成するための Azure portal ページにアクセスします。 [+ 作成] をクリックします。 リソース グループ名、キー コンテナー名、リージョン、価格レベルを入力します。 [確認および作成] をクリックして、[作成] をクリックします。
- 既存のキー コンテナーを使用するには、次の手順のためにそのキー コンテナー名をコピーします。
- AzureDatabricks アプリケーションのオブジェクト ID を取得します。
- Azure portal で、[Microsoft Entra ID] に移動します。
- サイドバー メニューの [エンタープライズ アプリケーション] を選びます。
AzureDatabricks
を検索し、結果でエンタープライズ アプリケーションをクリックします。- [プロパティ] で、オブジェクト ID をコピーします。
- Azure portal を使用して、Key Vault にアクセス ポリシーを追加します。
ワークスペースのマネージド サービス用カスタマー マネージド キーの構成に使用する Azure Key Vault に移動します。
左側のパネルの [アクセス ポリシー] タブをクリックします。
ページの上部にある [作成] ボタンを選択します。
[アクセス許可] タブの [キーのアクセス許可] セクションで、[取得]、[キーの折り返しを解除]、[キーを折り返す] を有効にします。
[次へ] をクリックします。
[プリンシパル] タブで、
AzureDatabricks
と入力し、アプリケーション IDが2ff814a6-3304-4ab8-85cb-cd0e6f879c1d
の最初のエンタープライズ アプリケーションの結果までスクロールして、それを選択します。[確認および作成] タブに進み、b をクリックします。
Azure CLI を使用する
Azure CLI を使用して、次の手順を実行します。
Key Vault を作成するか、既存の Key Vault を選択します。
Key Vault を作成するには、次の Azure CLI コマンドで、角かっこ内の項目を自分の地域、Key Vault 名、リソース グループ名、ロケーションに置き換えます。
az keyvault create --location <region> \ --name <key-vault-name> \ --resource-group <resource-group-name> \ --location <location> \ --enable-purge-protection
既存のキー コンテナーを使用するには、次の手順のためにキー コンテナー名をコピーします。
Azure CLI を使用して、AzureDatabricks アプリケーションのオブジェクト ID を取得します。
az ad sp show --id "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d" \ --query "id" \ --output tsv
正しい Azure サブスクリプションを使用していることを確認します。
az account set --subscription {subscription_id}
Azure PowerShell を使用する
新しい Key Vault を作成することも、既存の Key Vault を使用することもできます。
Key Vault を作成する:
$keyVault = New-AzKeyVault -Name <key-vault-name> \
-ResourceGroupName <resource-group-name> \
-Location <location> \
-sku <sku> \
-EnablePurgeProtection
既存の Key Vault を使用する:
$keyVault = Get-AzKeyVault -VaultName <key-vault-name>
手順 2: キーを準備する
キーを作成するか、既存のキーを使用できます。 Azure portal、Azure CLI などのツールのうち、使用したいどのツールでも使用できます。
Azure CLI の使用
キー コンテナーの下にキーを作成します。 KeyType は RSA である必要があります。
CLI でキーを作成するには、次のコマンドを実行します。
az keyvault key create --name <key-name> \
--vault-name <key-vault-name> \
--protection software
以下の値をメモしておきます。これらの値は、応答で kid
プロパティのキー ID から取得できます。 これは後の手順で使用します。
- キー コンテナー URL: キー コンテナー名を含むキー ID の先頭部分。 形式は
https://<key-vault-name>.vault.azure.net
です。 - キー名: お使いのキーの名前。
- キーのバージョン: そのキーのバージョン。
完全なキー ID の形式は通常 https://<key-vault-name>.vault.azure.net/keys/<key-name>/<key-version>
になります。 パブリック クラウド以外の Azure Key Vault キーの形式は異なります。
キーを作成する代わりに既存のキーを使用する場合は、次の手順で使用できるよう、お使いのキーについてこれらの値を取得してコピーしておきます。 次に進む前に、既存のキーが有効になっていることを確認してください。
Azure PowerShell の使用
キーを作成する予定の場合は、キーを作成した方法と時期に応じて、アクセス ポリシーの設定が必要になる場合があります。 たとえば、PowerShell を使用して最近キー コンテナーを作成した場合、新しいキー コンテナーにキーの作成に必要なアクセス ポリシーがない可能性があります。 次の例では、
EmailAddress
パラメーターを使用してポリシーを設定します。 関連する詳細については、Set-AzKeyVaultAccessPolicy に関する Microsoft の記事を参照してください。新しいキー コンテナーにアクセス ポリシーを設定します。
Set-AzKeyVaultAccessPolicy \ -VaultName $keyVault.VaultName \ -PermissionsToKeys all \ -EmailAddress <email-address>
キーを作成することも、既存のキーを取得することもできます。
キーを作成します。
$key = Add-AzKeyVaultKey \ -VaultName $keyVault.VaultName \ -Name <key-name> \ -Destination 'Software'
既存のキーを取得する。
$key = Get-AzKeyVaultKey \ -VaultName $keyVault.VaultName \ -Name <key-name>
アクセス許可を持つアクセス ポリシーを Key Vault に追加します。
$managedService = Get-AzureADServicePrincipal \ -Filter "appId eq '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d'" Set-AzKeyVaultAccessPolicy -VaultName $keyVault.VaultName \ -ObjectId $managedService.ObjectId \ -PermissionsToKeys wrapkey,unwrapkey,get
手順 3: ワークスペースにキーを追加する
マネージド サービス用カスタマー マネージド キーを使用して新しいワークスペースをデプロイすることも、キーを既存のワークスペースに追加することもできます。 いずれも、Azure CLI、Powershell、ARM テンプレート、Azure portal、またはその他のツールを使用して実行できます。 このセクションでは、複数のデプロイ オプションの詳細を説明します。
- テンプレートなしで Azure portal を使用する
- テンプレートなしで Azure CLI を使用する
- テンプレートなしで PowerShell を使用する
- ARM テンプレートを使用して変更を適用する
テンプレートなしで Azure portal を使用する
Azure portal ホームページにアクセスします。
ページの左上隅の [リソースの作成] をクリックします。
検索バーに「
Azure Databricks
」と入力し、[Azure Databricks] オプションをクリックします。Azure Databricks ウィジェットの [作成] をクリックします。
[基本] と [ネットワーク] タブの入力フィールドの値を入力します。
[暗号化] タブに移動したら、次のようにします。
- ワークスペースを作成するには、[マネージド サービス] セクションで [独自のキーを使用する] を有効にします。
- ワークスペースを更新するには、[マネージド サービス] を有効にします。
暗号化フィールドを設定します。
- [キー識別子] フィールドに、Azure Key Vault キーのキー識別子を貼り付けます。
- [サブスクリプション] ドロップダウンに、Azure Key Vault キーのサブスクリプション名を入力します。
残りのタブに入力し、[確認および作成] (新しいワークスペースの場合) または [保存] (ワークスペースを更新する場合) をクリックします。
重要
キーをローテーションした場合、古いキーを 24 時間使用可能な状態にしておく必要があります。
テンプレートなしで Azure CLI を使用する
次のコマンドを使用して、キー コンテナーにアクセス ポリシーを追加します。
<key-vault-name>
を前の手順で使用したコンテナー名に置き換え、<object-id>
をAzureDatabricks
アプリケーションのオブジェクト ID に置き換えます。az keyvault set-policy -n <key-vault-name> \ --key-permissions get wrapKey unwrapKey \ --object-id <object-id>
ワークスペースを作成または更新します。
作成と更新のいずれの場合も、次のフィールドをコマンドに追加します。
managed-services-key-name
: キー名managed-services-key-vault
: Key Vault の URImanaged-services-key-version
: キーのバージョン
これらのフィールドを使用したワークスペース作成例:
az databricks workspace create --name <workspace-name> \ --resource-group <resource-group-name> \ --location <location> \ --sku premium \ --managed-services-key-name <key-name> \ --managed-services-key-vault <key-vault-uri> \ --managed-services-key-version <key-version>
これらのフィールドを使用したワークスペース更新例:
az databricks workspace update --name <workspace-name> \ --resource-group <resource-group-name> \ --managed-services-key-name <key-name> \ --managed-services-key-vault <key-vault-uri> \ --managed-services-key-version <key-version>
重要
キーをローテーションした場合、古いキーを 24 時間使用可能な状態にしておく必要があります。
テンプレートなしで PowerShell を使用する
ワークスペースを作成または更新するには、新しいキーのコマンドに次のパラメーターを追加します。
ManagedServicesKeyVaultPropertiesKeyName
: キー名ManagedServicesKeyVaultPropertiesKeyVaultUri
: キー URIManagedServicesKeyVaultPropertiesKeyVersion
: キーのバージョン
これらのフィールドを使用したワークスペース作成例:
New-AzDatabricksWorkspace -Name <workspace-name> \
-ResourceGroupName <resource-group-name> \
-location $keyVault.Location \
-sku premium \
-ManagedServicesKeyVaultPropertiesKeyName $key.Name \
-ManagedServicesKeyVaultPropertiesKeyVaultUri $keyVault.VaultUri \
-ManagedServicesKeyVaultPropertiesKeyVersion $key.Version
これらのフィールドを使用したワークスペース更新例:
Update-AzDatabricksWorkspace -Name <workspace-name> \
-ResourceGroupName <resource-group-name> \
-sku premium \
-ManagedServicesKeyVaultPropertiesKeyName $key.Name \
-ManagedServicesKeyVaultPropertiesKeyVaultUri $keyVault.VaultUri \
-ManagedServicesKeyVaultPropertiesKeyVersion $key.Version
重要
キーをローテーションした場合、古いキーを 24 時間使用可能な状態にしておく必要があります。
ARM テンプレートを使用して変更を適用する
次の ARM テンプレートは、リソース Microsoft.Databricks/workspaces
の API バージョン 2023-02-01
を使用して、カスタマー マネージド キーを持つ新しいワークスペースを作成します。 このテキストを databricks-cmk-template.json
という名前のファイルにローカル側で保存します。
このテンプレート例には、使用可能な Azure Databricks 機能のすべては含まれていません (ワークスペースをデプロイする独自の VNet の提供など)。
重要
既にテンプレートを使用している場合は、このテンプレートの追加のパラメーター、リソース、および出力を既存のテンプレートにマージしてください。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"workspaceName": {
"type": "string",
"metadata": {
"description": "The name of the Azure Databricks workspace to create."
}
},
"pricingTier": {
"type": "string",
"defaultValue": "premium",
"allowedValues": [
"standard",
"premium"
],
"metadata": {
"description": "The pricing tier of workspace."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"apiVersion": {
"type": "string",
"defaultValue": "2023-02-01",
"allowedValues":[
"2023-02-01",
"2021-04-01-preview"
],
"metadata": {
"description": "The api version to create the workspace resources"
}
},
"keyvaultUri": {
"type": "string",
"metadata": {
"description": "The Key Vault URI for customer-managed key for managed services"
}
},
"keyName": {
"type": "string",
"metadata": {
"description": "The key name used for customer-managed key for managed services"
}
},
"keyVersion": {
"type": "string",
"metadata": {
"description": "The key version used for customer-managed key for managed services"
}
}
},
"variables": {
"managedResourceGroupName": "[concat('databricks-rg-', parameters('workspaceName'), '-', uniqueString(parameters('workspaceName'), resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Databricks/workspaces",
"name": "[parameters('workspaceName')]",
"location": "[parameters('location')]",
"apiVersion": "[parameters('apiVersion')]",
"sku": {
"name": "[parameters('pricingTier')]"
},
"properties": {
"ManagedResourceGroupId": "[concat(subscription().id, '/resourceGroups/', variables('managedResourceGroupName'))]",
"encryption": {
"entities": {
"managedServices": {
"keySource": "Microsoft.Keyvault",
"keyVaultProperties": {
"keyVaultUri": "[parameters('keyvaultUri')]",
"keyName": "[parameters('keyName')]",
"keyVersion": "[parameters('keyVersion')]"
}
}
}
}
}
}
],
"outputs": {
"workspace": {
"type": "object",
"value": "[reference(resourceId('Microsoft.Databricks/workspaces', parameters('workspaceName')))]"
}
}
}
既に別のテンプレートを使用している場合は、このテンプレートのパラメーター、リソース、および出力を既存のテンプレートにマージできます。
このテンプレートを使用してワークスペースを作成または更新するには、次のいずれかのデプロイ オプションを選択します。
Azure CLI を使用してテンプレートを適用する
Azure CLI を使用して新しいワークスペースを作成するには、次のコマンドを実行します。
az deployment group create --resource-group <resource-group-name> \
--template-file <file-name>.json \
--parameters workspaceName=<new-workspace-name> \
keyvaultUri=<keyvaultUrl> \
keyName=<keyName> keyVersion=<keyVersion>
Azure CLI を使用して、カスタマー マネージド キーのワークスペースを使用するように既存のワークスペースを更新する (または既存のキーをローテーションする) には、次のようにします。
ワークスペースをデプロイした ARM テンプレートでカスタマー マネージド キーが追加されていない場合は、
resources.properties.encryption
セクションとそれに関連するパラメーターを追加します。 この記事の前の方のテンプレートを参照してください。- テンプレートから
resources.properties.encryption
セクションを追加します。 parameters
セクションで、テンプレートから 3 つの新しいパラメーターkeyvaultUri
、keyName
、およびkeyVersion
を追加します。parameters
セクションで、テンプレートから"type": "string",
を削除します。
- テンプレートから
新しいワークスペースを作成する場合と同じコマンドを実行します。 リソース グループ名とワークスペース名が既存のワークスペースと同じである限り、このコマンドは新しいワークスペースを作成するのではなく、既存のワークスペースを更新します。
az deployment group create --resource-group <existing-resource-group-name> \ --template-file <file-name>.json \ --parameters workspaceName=<existing-workspace-name> \ keyvaultUri=<keyvaultUrl> \ keyName=<keyName> keyVersion=<keyVersion>
キー関連パラメーターの変更以外にも、ワークスペースの作成に使用したものと同じパラメーターを使用してください。
重要
キーをローテーションした場合、古いキーを 24 時間使用可能な状態にしておく必要があります。
Azure portal を使用してテンプレートを適用する
Azure portal でテンプレートを使用してワークスペースを作成または更新するには、次のようにします。
[カスタム デプロイ] ページに進みます。
[エディターで独自のテンプレートをビルド] をクリックします。
JSON に貼り付けます。
[保存] をクリックします。
パラメーターを入力します。
既存のワークスペースを更新するには、そのワークスペースの作成に使用したのと同じパラメーターを使用します。 初めてキーを追加するには、キーに関連する 3 つのパラメーターを追加します。 キーをローテーションするには、キーに関連するパラメーターの一部またはすべてを変更します。 リソース グループ名とワークスペース名が、既存のワークスペースと同じであることを確認します。 同じである場合、このコマンドは新しいワークスペースを作成するのではなく、既存のワークスペースを更新します。
キー関連パラメーターの変更以外にも、ワークスペースの作成に使用したものと同じパラメーターを使用してください。
[Review + Create](レビュー + 作成) をクリックします。
検証の問題がない場合は、[作成] をクリックします。
重要
キーをローテーションした場合、古いキーを 24 時間使用可能な状態にしておく必要があります。
詳細については、Azure の記事「クイックスタート: Azure portal を使用して ARM テンプレートを作成およびデプロイする」を参照してください。
手順 4 (省略可能): ノートブックを再インポートする
既存のワークスペースの管理サービス向けに最初にキーを追加した後は、キーが使用されるのは、今後の書き込み操作のみです。 既存のデータは再暗号化されません。
すべてのノートブックをエクスポートしてから再インポートして、データを暗号化するキーがキーによって保護および制御されるようにすることができます。 ワークスペース API のエクスポートとインポートに関する記事を使用できます。
後でキーをロテーションする
管理サービスに既にカスタマー マネージド キーを使用している場合は、新しいキー バージョンまたはまったく新しいキーを使用してワークスペースを更新できます。 これは、"キーのローテーション" と呼ばれます。
Key Vault で新しいキーを作成するか、既存のキーをローテーションします。 「手順 1: キー コンテナーを設定する」を参照してください。
新しいキーに適切なアクセス許可があることを確認してください。
テンプレートの API バージョンが正しいことを確認します。
2021-04-01-preview
以上である必要があります。ポータル、CLI、または PowerShell を使用して、新しいキーでワークスペースを更新します。 「手順 3: ワークスペースにキーを追加する」を参照し、ワークスペースの更新の手順に従います。 新しいワークスペースを作成するのではなく、必ずリソース グループ名とワークスペース名に同じ値を使用して既存のワークスペースを更新するようにしてください。 キー関連パラメーターの変更以外にも、ワークスペースの作成に使用したものと同じパラメーターを使用してください。
重要
キーをローテーションした場合、古いキーを 24 時間使用可能な状態にしておく必要があります。
必要に応じて、既存のすべてのノートブックで新しいキーを使用するように、既存のノートブックをエクスポートして再インポートします。
トラブルシューティング
不注意によるキーの削除
Azure Key Vault でキーを削除した場合、ワークスペースのログインが失敗し始め、Azure Databricks でノートブックが読み取り不能になります。 これを回避するには、ソフト削除を有効にすることをお勧めします。 このオプションを使用すると、キーが削除された場合、30 日以内に復元できます。 ソフト削除が有効になっている場合は、問題を解決するためにキーを再び有効にするだけで済みます。
キー コンテナーのアクセス許可が原因のキー更新エラー
ワークスペースの作成で問題が発生した場合は、キー コンテナーに正しいアクセス許可があることを確認します。 Azure から返されるエラーは、これを根本原因として正しく示していない可能性があります。 また、必要なアクセス許可は、get
、wrapKey
、unwrapKey
です。 「手順 1: キー コンテナーを設定する」を参照してください。
紛失したキーが復元できない
キーを紛失し、復元できない場合、キーによって暗号化されたノートブック データはすべて復元できません。