我刚刚发现了CloudConfigurationManager
的一个模糊而又令人沮丧的错误。我正在寻找变通方法,并且(作为旁注)提示有关报告错误的最佳论坛。我猜这将是一个相对快速的解决方案。
我有一个Azure应用服务,通过名为DocumentDB.Endpoint
和DocumentDB.Key
的配置设置连接到DocumentDb。这些是在F#中使用
let endpoint = config.ReadConfigSetting<string>("DocumentDB.Endpoint")
let key = config.ReadConfigSetting<string>("DocumentDB.Key")
ReadConfigSetting
方法是一种便捷方法,可执行相关的类型转换和默认分配。在封面下,它使用CloudConfigurationManager.GetSetting
。出于我们的目的,将呼叫视为
let endpoint = CloudConfigurationManager.GetSetting("DocumentDB.Endpoint")
let key = CloudConfigurationManager.GetSetting("DocumentDB.Key")
我有一个webjob,可以在我的文档数据库集合上执行cron作业。 CloudConfigurationManager
首先从应用服务设置中获取设置,如果在应用服务设置中找不到该密钥,则会查看我的webjob的app.config
。
在我的质量检查环境中,我的网络工作正在选择正确的端点,但错误的密钥。这是因为DocumentDb.Endpoint
直接列在我的app.config
文件中,但DocumentDb.Key
位于.gitignore
d的单独文件中。我不想在Git仓库中使用敏感密钥,即使它是私有的,并且凭证仅在app.config和我的外部文件中列出,以方便我使用调试器在本地运行作业。
所以这是我的设置:
的App.config
<appSettings file="keys.config">
<add key="agentUserName" value="<Everyone can read this>" />
<add key="apiHost" value="<and this>" />
<add key="DocumentDB.Endpoint" value="<points to my remote develpment copy of DocumentDB -- looking forward to when I can get a local repo>" />
</appSettings>
keys.config
<appSettings>
<add key="DocumentDB.Key" value="<This is private, so it's in this gitignored file>" />
<add key="agentPassword" value="<I'm not telling you>" />
<add key="TestUserPassword" value="<I'd be an idiot to post this value in a SO question>" />
</appSettings>
你可以看到发生了什么。
查找DocumentDB.Key值时CloudConfigurationManager的预期行为
App.config
。keys.config
。CloudConfigurationManager的实际行为
keys.config
中是否有值?App.config
。我现在最好的解决方法是在发布网络作业时评论keys.config
中的值,但这很笨拙。有没有更好的方法来做到这一点?
记录此问题的最佳位置在哪里?
答案 0 :(得分:3)
您是否查看过Azure Key Vault?以下是Azure Key Vault的简介:https://azure.microsoft.com/en-us/documentation/articles/key-vault-get-started/
如果将DocumentDB机密存储在Azure Key Vault中,则可以授予对应用程序级别的机密的访问权限。这是另一篇文章,展示了如何在Web应用程序中执行此操作:https://azure.microsoft.com/en-us/documentation/articles/key-vault-use-from-web-application/
希望有所帮助。
感谢。
冷凝管