Azure Key Vault 是否适合存储在客户端应用程序上生成的加密密钥?

Is Azure Key Vault appropriate to store encryption keys generated on client applications?

我有客户端应用程序生成在设备上加密的数据。加密密钥通过 HTTPS 发送到使用 Azure Key Vault 存储加密密钥的 Azure Functions,以便其他授权客户端可以获得它们并解密数据。

这是我的 Azure 函数中的一段代码,用于执行在密钥库中保存加密密钥(秘密)的工作:

    public async Task InsertEncryptionKeyAsync(EncryptionKeyContract encryptionKey)
    {
        Guard.CheckForNull(encryptionKey, nameof(encryptionKey));

        //  Serializes the encryption key information.
        string serializedEncryptionKey = JsonConvert.SerializeObject(encryptionKey);

        //  Pushes the encryption to the Key-Vault.
        var client = new KeyVaultClient(/* Key-vault- access otken*/, new HttpClient());

        await client.SetSecretAsync(Constants.Vault.Url, encryptionKey.FileId.ToKey(), serializedEncryptionKey);
    }

问题

此设计是否适合使用 Azure Key Vault?

是的,Azure Key Vault 用于存储密钥/机密,因此这是一个完美的有效用例。根据您的客户是谁以及他们拥有什么权限,您可以摆脱中间件并让客户将加密密钥添加到保险库中。但通常您不想授予客户对保管库的权限,因此使用 Azure 函数这样做看起来也不错。

我同意 Martin 的观点,这是 KeyVault 的一个很好的用例。

您可能希望进一步了解 keyvault 的功能。

假设您在客户端使用对称加密,keyvault 具有用于存储密钥的 wrapKey。

使用 wrapKey / unwrapKey 意味着您的客户可以使用关于他们可以使用密钥做什么的访问策略获得特定权限。

您可能还希望对加密内容进行签名和验证,以确保其在传输过程中未被篡改。

如果您还没有走这条路,您可能希望研究 Native App AD 身份验证 https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-scenarios and https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects,它可以代表用户或服务主体工作,从而为如何访问 keyvault 提供一个很好的层次control 可能会工作....但我不会详细说明,因为我要跟踪原始问题。值得注意的是,Key Vault 有 16 个访问策略的限制,因此它更适合应用程序组而不是个人安装或用户。