【问题标题】:Is Azure Key Vault appropriate to store encryption keys generated on client applications?Azure Key Vault 是否适合存储在客户端应用程序上生成的加密密钥?
【发布时间】:2019-01-03 13:07:56
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我同意 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,它们可以代表用户或服务主体工作,从而为如何访问 keyvault 提供一个很好的故事control 可能会起作用....但我不会详细介绍,因为我要跟踪原始问题。值得注意的是,密钥保管库限制为 16 个访问策略,因此更多的是针对应用程序组,而不是针对单个安装或用户。

      【讨论】:

        猜你喜欢
        • 2021-03-16
        • 2021-04-18
        • 2016-05-01
        • 2017-09-12
        • 2019-07-28
        • 2019-12-24
        • 2018-04-25
        • 1970-01-01
        • 2021-11-30
        相关资源
        最近更新 更多