保护Azure云服务配置中的敏感信息

时间:2018-09-18 09:33:16

标签: azure security azure-cloud-services

我们正在使用Cloud Service configuration存储应用程序设置。但是我们想保护一些应用程序设置,例如用户凭据,数据库连接字符串等。推荐的设置方法是什么?

我们正在从网络角色和辅助角色中读取此配置。因此,不能选择使用aspnet_regiis实用程序,因为在工作角色中该功能不可用,因为未在工作角色中安装iis。

我们也考虑过使用Key Vault,但是最终会遇到保护Key Vault密钥的情况。

不幸的是,Azure云服务不支持managed service indentities

1 个答案:

答案 0 :(得分:4)

  

我们也考虑过使用Key Vault,但最终还是一样   密钥库密钥的保护情况。

问题陈述

即使您可以将所有敏感信息移至Azure Key Vault,但是要访问Azure Key Vault,您需要clientID和client密钥(以建立云服务和Key Vault的身份以了解谁在访问它)。

这意味着您的应用程序的客户端密钥将位于云服务配置中,这几乎等同于首先位于云服务配置中的所有敏感信息:)。

解决方案

托管服务身份将成为访问Azure Key Vault并避免在云服务配置中保留客户端密钥的一种方式。

在没有传统云服务的托管服务身份的情况下,您可以使用Certificate Credentials for application authentication帮助建立应用程序身份并访问密钥库以读取密钥,机密等。

详细信息和示例代码

  1. 您注册了一个Azure AD应用程序来代表您的云服务。
  2. 在Key Vault的访问策略中对此Azure AD应用程序进行适当的访问(获取密钥/秘密等的能力)。
  3. 现在,您无需生成常规的客户端机密,而是按照Certificate credentials for application authentication中的步骤将证书凭据与Azure AD中的客户端应用程序相关联。
  4. 通过将该证书包含在服务定义文件(CSDEF)中,确保将该证书与所有云服务实例一起部署
  5. 使用应用程序的客户端ID和此证书来获取令牌,并开始从Azure Key Vault中读取敏感信息。

可以在此处找到示例代码: Authenticating to Azure AD in daemon apps with certificates

重要的代码片段

// Initialize the Certificate Credential to be used by ADAL.
X509Certificate2 cert = ReadCertificateFromStore(certName);

// Then create the certificate credential client assertion.
certCred = new ClientAssertionCertificate(clientId, cert);

// Acquire Auth token for talking to Azure KeyVault..
result = await authContext.AcquireTokenAsync(todoListResourceId, certCred);