保护 Azure 云服务配置中的敏感信息
Securing sensitive information in Azure Cloud Service Configuration
我们正在使用 Cloud Service configuration 来存储应用程序设置。但是我们想保护一些应用程序设置,例如用户凭据、数据库连接字符串等。推荐的方法是什么?
我们正在从网络和辅助角色读取此配置。因此,使用 aspnet_regiis 实用程序不是一个选项,因为这在辅助角色中不可用,因为 iis 未安装在辅助角色中。
我们也考虑过使用 Key Vault,但我们最终遇到了保护 Key Vault 密钥的相同情况。
很遗憾,Azure 云服务不支持managed service indentities
We also considered using Key vault, but we end up in the same
situation of securing the key vault key.
问题陈述
即使您可以将所有敏感信息移出到 Azure Key Vault,但要访问 Azure Key Vault,您需要 clientID 和客户端密钥(以建立您的云服务和 Key Vault 的身份以了解谁是访问它)。
这意味着您的应用程序的客户端密钥将位于云服务配置中,这几乎等同于所有敏感信息首先位于云服务配置中:)。
解决方法
托管服务身份本来是访问 Azure Key Vault 并避免在云服务配置中保留客户端密钥的方式。
如果没有经典云服务的托管服务标识,您可以使用Certificate Credentials for application authentication帮助建立应用程序标识并访问密钥库以读取密钥、机密等
详细信息和示例代码
- 您注册一个 Azure AD 应用程序来代表您的云服务。
- 在 Key Vault 的访问策略中授予对此 Azure AD 应用程序的适当访问权限(能够获得 keys/secrets 等)。
- 现在您无需生成常规客户端密码,而是按照 Certificate credentials for application authentication 中的步骤将证书凭据与 Azure AD 中的客户端应用程序相关联。
- 通过将此证书包含在服务定义文件 (CSDEF) 中,确保该证书与您的所有云服务实例一起部署
- 使用应用程序的客户端 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);
我们正在使用 Cloud Service configuration 来存储应用程序设置。但是我们想保护一些应用程序设置,例如用户凭据、数据库连接字符串等。推荐的方法是什么?
我们正在从网络和辅助角色读取此配置。因此,使用 aspnet_regiis 实用程序不是一个选项,因为这在辅助角色中不可用,因为 iis 未安装在辅助角色中。
我们也考虑过使用 Key Vault,但我们最终遇到了保护 Key Vault 密钥的相同情况。
很遗憾,Azure 云服务不支持managed service indentities
We also considered using Key vault, but we end up in the same situation of securing the key vault key.
问题陈述
即使您可以将所有敏感信息移出到 Azure Key Vault,但要访问 Azure Key Vault,您需要 clientID 和客户端密钥(以建立您的云服务和 Key Vault 的身份以了解谁是访问它)。
这意味着您的应用程序的客户端密钥将位于云服务配置中,这几乎等同于所有敏感信息首先位于云服务配置中:)。
解决方法
托管服务身份本来是访问 Azure Key Vault 并避免在云服务配置中保留客户端密钥的方式。
如果没有经典云服务的托管服务标识,您可以使用Certificate Credentials for application authentication帮助建立应用程序标识并访问密钥库以读取密钥、机密等
详细信息和示例代码
- 您注册一个 Azure AD 应用程序来代表您的云服务。
- 在 Key Vault 的访问策略中授予对此 Azure AD 应用程序的适当访问权限(能够获得 keys/secrets 等)。
- 现在您无需生成常规客户端密码,而是按照 Certificate credentials for application authentication 中的步骤将证书凭据与 Azure AD 中的客户端应用程序相关联。
- 通过将此证书包含在服务定义文件 (CSDEF) 中,确保该证书与您的所有云服务实例一起部署
- 使用应用程序的客户端 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);