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

时间:2018-07-26 13:50:36

标签: c# azure azure-functions azure-keyvault

我有一些客户端应用程序,它们会生成在设备上加密的数据。加密密钥通过HTTPS发送到Azure函数,该函数使用Azure密钥保管库存储加密密钥,以便其他授权的客户端可以获取它们并解密数据。

这是我的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?

2 个答案:

答案 0 :(得分:2)

是的,Azure Key Vault是用于存储密钥/机密的,因此这是一个完美的有效用例。根据您的客户是谁,以及他们具有什么权限,您可以摆脱中间件,让客户端将加密密钥添加到Vault中。但是通常您不想授予客户对Vault的权限,因此使用Azure Function看起来也很好。

答案 1 :(得分:1)

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

您可能希望进一步依靠keyvault的功能。

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

使用wrapKey / unwrapKey意味着可以使用有关其键操作的访问策略为您的客户端授予特定权限。

您可能还希望对加密的内容进行签名和验证,以确保在传输过程中未对其进行任何处理。

如果您还没有走这条路,您可能希望研究可以代表用户或服务主体的Native App AD身份验证https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-scenarioshttps://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-objects,从而提供一个很好的层次有关密钥库访问控制可能如何工作的信息。...但是我将不作详细介绍,因为我将跟踪原始问题。值得注意的是,密钥保管库最多可以有16个访问策略,因此,对于应用程序组而言,更多的是针对个人安装或用户的。