我们正在使用云服务配置 https://learn.microsoft.com/en-us/previous-versions/azure/reference/jj156212(v%3Dazure.100)存储应用程序设置。但我们想保护一些应用程序设置,例如用户凭据、数据库连接字符串等。建议的方法是什么?
我们正在从网络和辅助角色中读取此配置。因此使用aspnet_regiis https://msdn.microsoft.com/en-us/library/dtkwfdky(v=vs.100).aspx实用程序不是一个选项,因为它在辅助角色中不可用,因为辅助角色中未安装 iis。
我们还考虑过使用 Key Vault,但我们最终遇到了保护 Key Vault 密钥的相同情况。
不幸的是,Azure云服务不支持托管服务身份 https://azure.microsoft.com/en-in/blog/keep-credentials-out-of-code-introducing-azure-ad-managed-service-identity/
我们也考虑过使用 Key Vault,但最终结果相同
保护密钥保管库密钥的情况。
问题陈述
尽管您可以将所有敏感信息移出到 Azure Key Vault,但要访问 Azure Key Vault,您需要 clientID 和客户端密钥(以建立云服务和 Key Vault 的身份以了解谁正在访问它)。
这意味着您的应用程序的客户端密钥将位于云服务配置中,这几乎相当于首先位于云服务配置中的所有敏感信息:)。
解决方法
托管服务身份将是访问 Azure Key Vault 并避免将客户端密钥保留在云服务配置中的方法。
如果没有经典云服务的托管服务身份,您可以使用用于应用程序身份验证的证书凭证 https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-certificate-credentials帮助建立应用程序身份并访问密钥库以读取密钥、机密等。
详细信息和示例代码
- 您注册一个 Azure AD 应用程序来代表您的云服务。
- 在 Key Vault 的访问策略中授予对此 Azure AD 应用程序的适当访问权限(获取密钥/机密等的能力)。
- 现在,您无需生成常规客户端密钥,而是按照以下步骤操作用于应用程序身份验证的证书凭证 https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-certificate-credentials,将证书凭据与 Azure AD 中的客户端应用程序关联。
- 通过将其包含在服务定义文件 (CSDEF) 中,确保将此证书部署到您的所有云服务实例中
- 使用应用程序的客户端 ID 和此证书获取令牌并开始从 Azure Key Vault 读取敏感信息。
示例代码可在此处获取:使用证书在守护程序应用程序中向 Azure AD 进行身份验证 https://github.com/Azure-Samples/active-directory-dotnet-daemon-certificate-credential#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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)