Azure Key Vault 访问权限和密钥安全
Azure Key Vault access permissions and key security
我正在开发一个将文件上传到 Azure 存储的 .NET 应用程序。我正在利用 https://azure.microsoft.com/en-us/documentation/articles/storage-encrypt-decrypt-blobs-key-vault/
教程中的客户端加密
应用程序有效,即我可以成功将加密的 blob 上传到选定的存储帐户和容器。
不过,我对 RSA 密钥的安全性有些担忧。如果客户端应用程序从 Key Vault 获取密钥以在 BlobEncryptionPolicy 中使用,该密钥可能会被泄露?应用程序真正需要的唯一东西是 RSA 对的 public 密钥,私钥应保留在服务器上(解密仅由受信任的 Web 应用程序进行)。
我担心的另一个问题是,从 app.config 获取 AAD 集成信息是微不足道的。如何解决这个问题?
(注意:上传应用 运行 所在的工作站不一定受信任)
对 https://azure.microsoft.com/en-us/documentation/articles/storage-encrypt-decrypt-blobs-key-vault/ 上的 Azure 存储和 Key Vault 演练文档的一些补充阅读提供了答案:
“存储客户端本身永远无法访问 KEK。”
KEK 是“密钥加密密钥”,它加密用于加密实际 blob 的实际一次性使用对称加密密钥。
您只需要一个 public 密钥来加密随机对称密钥并使用该对称密钥来加密您的数据。服务器进程(函数或类似进程)可以访问用于解密对称密钥的私钥,然后解密 blob。可以使用 RBAC 策略限制访问保存在 KV 中的私钥,并将托管标识应用于需要读取私钥的进程。
最后,public 密钥确实不应该是裸密钥,它应该在 X.509 证书中,以便您可以验证服务器端点的真实性。
我正在开发一个将文件上传到 Azure 存储的 .NET 应用程序。我正在利用 https://azure.microsoft.com/en-us/documentation/articles/storage-encrypt-decrypt-blobs-key-vault/
教程中的客户端加密应用程序有效,即我可以成功将加密的 blob 上传到选定的存储帐户和容器。
不过,我对 RSA 密钥的安全性有些担忧。如果客户端应用程序从 Key Vault 获取密钥以在 BlobEncryptionPolicy 中使用,该密钥可能会被泄露?应用程序真正需要的唯一东西是 RSA 对的 public 密钥,私钥应保留在服务器上(解密仅由受信任的 Web 应用程序进行)。
我担心的另一个问题是,从 app.config 获取 AAD 集成信息是微不足道的。如何解决这个问题?
(注意:上传应用 运行 所在的工作站不一定受信任)
对 https://azure.microsoft.com/en-us/documentation/articles/storage-encrypt-decrypt-blobs-key-vault/ 上的 Azure 存储和 Key Vault 演练文档的一些补充阅读提供了答案:
“存储客户端本身永远无法访问 KEK。”
KEK 是“密钥加密密钥”,它加密用于加密实际 blob 的实际一次性使用对称加密密钥。
您只需要一个 public 密钥来加密随机对称密钥并使用该对称密钥来加密您的数据。服务器进程(函数或类似进程)可以访问用于解密对称密钥的私钥,然后解密 blob。可以使用 RBAC 策略限制访问保存在 KV 中的私钥,并将托管标识应用于需要读取私钥的进程。
最后,public 密钥确实不应该是裸密钥,它应该在 X.509 证书中,以便您可以验证服务器端点的真实性。