配置客户管理的密钥

Azure 数据资源管理器对静态存储帐户中的所有数据进行加密。 默认情况下,数据使用 Microsoft 管理的密钥进行加密。 为了更进一步控制加密密钥,可以提供客户管理的密钥来用于对数据进行加密。

客户管理的密钥必须存储在 Azure 密钥保管库中。 可以创建自己的密钥并将其存储在 Key Vault 中,或者使用 Azure Key Vault API 来生成密钥。 Azure 数据资源管理器群集和密钥保管库必须在同一个区域中,但可以在不同的订阅中。 有关客户管理的密钥的详细说明,请参阅客户管理的密钥与 Azure 密钥保管库

本文将介绍如何配置客户管理的密钥。

有关基于以前的 SDK 版本的代码示例,请参阅存档的文章

配置 Azure Key Vault

若要使用 Azure 数据资源管理器配置客户管理的密钥,必须在密钥保管库上设置两个属性:“软删除”和“不清除” 。 默认情况下未启用这些属性。 若要启用这些属性,请在 PowerShell 或 Azure CLI 中对新的或现有的密钥保管库执行“启用软删除”和“启用清除保护” 。 仅支持大小为 2048 的 RSA 密钥。 有关密钥的详细信息,请参阅密钥保管库密钥

备注

有关在主群集和子群集上使用客户托管密钥的限制,请参阅限制

为群集分配托管标识

若要为群集启用客户管理的密钥,请先将系统分配的托管标识或用户分配的托管标识分配给该群集。 你将使用此托管标识授予群集访问密钥保管库的权限。 若要配置托管标识,请参阅托管标识

使用客户托管密钥启用加密

以下部分说明如何使用 Azure 数据资源管理器 C# 客户端配置客户管理密钥加密。

安装包

身份验证

若要运行本文中的示例,请创建 Microsoft Entra 应用程序和可以访问资源的服务主体。 可以在订阅范围添加角色分配,并获取所需的 Microsoft Entra Directory (tenant) IDApplication IDApplication Secret

以下代码片段演示如何使用 Microsoft 身份验证库 (MSAL) 获取 Microsoft Entra 应用程序令牌以访问你的群集。 若要此流成功,应用程序必须注册到 Microsoft Entra ID,并且你必须有用于应用程序身份验证的凭据,例如 Microsoft Entra ID 颁发的应用程序密钥或向 Microsoft Entra 注册的 X.509v2 证书。

配置客户管理的密钥

默认情况下,Azure 数据资源管理器加密使用 Microsoft 托管密钥。 将 Azure 数据资源管理器群集配置为使用客户托管密钥,并指定要与群集关联的密钥。

  1. 使用以下代码更新群集:

    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";
    var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
    var resourceManagementClient = new ArmClient(credentials, subscriptionId);
    var resourceGroupName = "testrg";
    var clusterName = "mykustocluster";
    var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
    var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
    var clusters = resourceGroup.GetKustoClusters();
    var cluster = (await clusters.GetAsync(clusterName)).Value;
    var clusterPatch = new KustoClusterPatch(cluster.Data.Location)
    {
        KeyVaultProperties = new KustoKeyVaultProperties
        {
            KeyName = "<keyName>",
            KeyVersion = "<keyVersion>", // Optional, leave as NULL for the latest version of the key.
            KeyVaultUri = new Uri("https://<keyVaultName>.vault.azure.cn/"),
            UserIdentity = "/subscriptions/<identitySubscriptionId>/resourcegroups/<identityResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>" // Use NULL if you want to use system assigned identity.
        }
    };
    await cluster.UpdateAsync(WaitUntil.Completed, clusterPatch);
    
  2. 运行以下命令,检查群集是否已成功更新:

    var clusterData = (await resourceGroup.GetKustoClusterAsync(clusterName)).Value.Data;
    

    如果结果包含带 Succeeded 值的 ProvisioningState,则表示已成功更新群集。

更新密钥版本

创建密钥的新版本时,需将群集更新为使用新版本。 首先调用 Get-AzKeyVaultKey 以获取最新密钥版本。 然后,将群集的密钥保管库属性更新为使用新的密钥版本,如使用客户管理的密钥启用加密中所示。