Azure 資料探索器會對儲存帳戶中的所有資料進行靜態加密。 根據預設,資料是以使用 Microsoft 管理的金鑰加密。 若要進一步控制加密金鑰,您可以提供客戶管理的金鑰,以用於數據加密。
客戶管理的金鑰必須儲存在 Azure Key Vault 中。 您可以建立自己的金鑰,並將其儲存在密鑰保存庫中,或使用 Azure Key Vault API 來產生金鑰。 Azure 資料總管叢集和密鑰保存庫必須位於相同的區域,但它們可以位於不同的訂用帳戶中。 如需客戶自控密鑰的詳細說明,請參閱 使用 Azure Key Vault 來管理客戶管理的密鑰。
本文說明如何設定客戶管理的金鑰。
若要使用 Azure 資料總管設定客戶管理的金鑰,您必須 在密鑰保存庫上設定兩個屬性: 虛刪除 和 不要清除。 預設不會啟用這些屬性。 若要啟用這些屬性,請在新的或現有的金鑰保存庫上,於 PowerShell 或 Azure CLI 中執行啟用虛刪除和啟用清除保護。 僅支援大小為 2048 的 RSA 金鑰。 如需金鑰的詳細資訊,請參閱 Key Vault 金鑰。
將受管理的身分分配給叢集
若要為叢集啟用客戶管理的密鑰,請先將系統指派或使用者指派的受控識別指派給叢集。 您將使用此受控識別來授與叢集存取金鑰保存庫的許可權。 若要設定受控識別,請參閱 受控識別。
使用客戶管理的金鑰啟用加密
下列步驟說明如何使用 Azure 入口網站來啟用客戶管理的密鑰加密。 根據預設,Azure 資料總管加密會使用Microsoft管理的密鑰。 將 Azure 資料總管叢集設定為使用客戶管理的金鑰,並指定要與叢集建立關聯的密鑰。
在 Azure 入口網站中,移至 您的 Azure 數據總管叢集 資源。
選取入口網站左窗格中的 [ 設定>加密 ]。
在 [加密] 窗格中,針對 [客戶管理的密鑰] 設定選取 [開啟]。
按兩下 [選取金鑰]。
在 [ 從 Azure Key Vault 選取金鑰 ] 視窗中,從下拉式清單中選取現有的 密鑰保存庫 。 如果您選取 [ 新建 ] 以 建立新的 Key Vault,則會路由傳送至 [ 建立密鑰保存庫 ] 畫面。
選取 [金鑰]。
版本:
- 若要確保此金鑰一律使用最新的金鑰版本,請選取 [ 永遠使用目前的金鑰版本] 複選框。
- 否則,請選取 [ 版本]。
按一下 [選取]。
在 [身分識別類型] 底下,選取 [系統指派] 或 [使用者指派]。
如果您選取 [ 使用者指派],請從下拉式清單中挑選使用者指派的身分識別。
在現在包含金鑰的 [加密 ] 窗格中,選取 [ 儲存]。 CMK 建立成功時,您會在 通知中看到成功訊息。
如果您在為 Azure 資料總管叢集啟用客戶管理的金鑰時選取系統指派的身分識別,則如果沒有系統指派的身分識別,您將會為叢集建立系統指派的身分識別。 此外,您會在選取的 Key Vault 上,將所需的 get、wrapKey 和 unwrapKey 許可權提供給 Azure 數據總管叢集,並取得 Key Vault 屬性。
備註
選取 關閉 以在已建立後移除客戶管理的金鑰。
下列各節說明如何使用 Azure 數據總管 C# 客戶端來設定客戶管理的金鑰加密。
安裝套件
認證
若要執行本文中的範例,請建立可存取資源的 Azure AD 應用程式和 服務主體。 您可以在訂閱範圍新增角色指派,並取得必要的 Azure AD Directory (tenant) ID
、Application ID
和 Application Secret
。
下列代碼段示範如何使用 Microsoft 驗證連結庫 (MSAL) 取得 Azure AD 應用程式令牌來存取叢集。 若要讓流程成功,應用程式必須向 Azure AD 註冊,而且您必須具備應用程式驗證的認證,例如 Azure AD 簽發的應用程式密鑰或 Azure AD 註冊的 X.509v2 憑證。
根據預設,Azure 資料總管加密會使用Microsoft管理的密鑰。 將 Azure 資料總管叢集設定為使用客戶管理的金鑰,並指定要與叢集建立關聯的密鑰。
使用下列程式代碼更新叢集:
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Azure AD Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Application ID
var clientSecret = "PlaceholderClientSecret"; // Application secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
// Create a confidential authentication client for Azure AD:
var authClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority($"https://login.microsoftonline.com/{tenantId}")
.WithClientSecret(clientSecret) // can be replaced by .WithCertificate to authenticate with an X.509 certificate
.Build();
// Acquire application token
var result = authClient.AcquireTokenForClient(
new[] { "https://management.core.windows.net/.default" } // Define scopes for accessing Azure management plane
).ExecuteAsync().Result;
var credentials = new TokenCredentials(result.AccessToken, result.TokenType);
var kustoManagementClient = new KustoManagementClient(credentials) { SubscriptionId = subscriptionId };
var resourceGroupName = "testrg";
var clusterName = "mykustocluster";
var clusterPatch = new ClusterUpdate(
keyVaultProperties: new KeyVaultProperties(
keyName: "<keyName>",
keyVersion: "<keyVersion>", // Optional, leave as NULL for the latest version of the key.
keyVaultUri: "https://<keyVaultName>.vault.azure.net/",
userIdentity: "/subscriptions/<identitySubscriptionId>/resourcegroups/<identityResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>" // Use NULL if you want to use system assigned identity.
)
);
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterPatch);
執行下列命令來檢查叢集是否已成功更新:
var clusterData = await kustoManagementClient.Clusters.GetAsync(resourceGroupName, clusterName);
如果結果中包含 ProvisioningState
和 Succeeded
值,則您的叢集已成功更新。
下列步驟說明如何使用 Azure CLI 用戶端來啟用客戶管理的密鑰加密。 根據預設,Azure 資料總管加密會使用Microsoft管理的密鑰。 將 Azure 資料總管叢集設定為使用客戶管理的金鑰,並指定要與叢集建立關聯的密鑰。
執行下列命令以登入 Azure:
az login
請選擇叢集註冊時所使用的訂閱帳戶。 將 MyAzureSub 取代為您要使用的 Azure 訂用帳戶名稱。
az account set --subscription MyAzureSub
執行下列命令,以使用叢集系統指派的身分識別來設定新的密鑰
az kusto cluster update --cluster-name "mytestcluster" --resource-group "mytestrg" --key-vault-properties key-name="<key-name>" key-version="<key-version>" key-vault-uri="<key-vault-uri>"
或者,使用使用者指派的身分識別來設定新的金鑰。
az kusto cluster update --cluster-name "mytestcluster" --resource-group "mytestrg" --key-vault-properties key-name="<key-name>" key-version="<key-version>" key-vault-uri="<key-vault-uri>" key-user-identity="<user-identity-resource-id>"
執行下列命令並檢查 『keyVaultProperties』 屬性,以確認叢集已成功更新。
az kusto cluster show --cluster-name "mytestcluster" --resource-group "mytestrg"
下列步驟說明如何使用PowerShell來啟用客戶管理的密鑰加密。 根據預設,Azure 資料總管加密會使用Microsoft管理的密鑰。 將 Azure 資料總管叢集設定為使用客戶管理的金鑰,並指定要與叢集建立關聯的密鑰。
執行下列命令以登入 Azure:
Connect-AzAccount
設定叢集註冊所在的訂用帳戶。
Set-AzContext -SubscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
執行下列命令,以使用系統指派的身分識別來設定新的密鑰。
Update-AzKustoCluster -ResourceGroupName "mytestrg" -Name "mytestcluster" -KeyVaultPropertyKeyName "<key-name>" -KeyVaultPropertyKeyVaultUri "<key-vault-uri>" -KeyVaultPropertyKeyVersion "<key-version>"
或者,使用使用者指派的身分識別來設定新的金鑰。
Update-AzKustoCluster -ResourceGroupName "mytestrg" -Name "mytestcluster" -KeyVaultPropertyKeyName "<key-name>" -KeyVaultPropertyKeyVaultUri "<key-vault-uri>" -KeyVaultPropertyKeyVersion "<key-version>" -KeyVaultPropertyUserIdentity "user-assigned-identity-resource-id"
執行下列命令並檢查 'KeyVaultProperty...'屬性可確認叢集已成功更新。
Get-AzKustoCluster -Name "mytestcluster" -ResourceGroupName "mytestrg" | Format-List
下列步驟說明如何使用 Azure Resource Manager 範本來設定客戶管理的密鑰。 根據預設,Azure 資料總管加密會使用Microsoft管理的密鑰。 在此步驟中,將 Azure 數據總管叢集設定為使用客戶管理的密鑰,並指定要與叢集建立關聯的密鑰。
如果您想要使用系統指派的身分識別來存取金鑰保存庫,請保留 userIdentity
空白。 否則,請設定身分識別的資源識別碼。
您可以使用 Azure 入口網站或 PowerShell 來部署 Azure Resource Manager 範本。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"clusterName": {
"type": "string",
"defaultValue": "[concat('kusto', uniqueString(resourceGroup().id))]",
"metadata": {
"description": "Name of the cluster to create"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"variables": {},
"resources": [
{
"name": "[parameters('clusterName')]",
"type": "Microsoft.Kusto/clusters",
"sku": {
"name": "Standard_E8ads_v5",
"tier": "Standard",
"capacity": 2
},
"apiVersion": "2019-09-07",
"location": "[parameters('location')]",
"properties": {
"keyVaultProperties": {
"keyVaultUri": "<keyVaultUri>",
"keyName": "<keyName>",
"keyVersion": "<keyVersion>",
"userIdentity": "<userIdentity>"
}
}
}
]
}
更新金鑰版本
當您建立新版本的金鑰時,您必須更新叢集以使用新版本。 首先,呼叫 Get-AzKeyVaultKey
以取得最新版的密鑰。 然後更新叢集的金鑰保存庫屬性以使用新版本的金鑰,如 使用客戶管理的金鑰啟用加密所示。
後續步驟