CloudConfigurationManager不会覆盖外部文件

时间:2016-08-16 18:05:51

标签: c# azure f# azure-web-sites azure-cosmosdb

我刚刚发现了CloudConfigurationManager的一个模糊而又令人沮丧的错误。我正在寻找变通方法,并且(作为旁注)提示有关报告错误的最佳论坛。我猜这将是一个相对快速的解决方案。

我有一个Azure应用服务,通过名为DocumentDB.EndpointDocumentDB.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的预期行为

  1. 查看DocumentDB.Key
  2. 值的基础应用程序服务设置
  3. 如果存在,请使用它。
  4. 否则,请查看App.config
  5. 如果不存在,请查看keys.config
  6. CloudConfigurationManager的实际行为

    1. keys.config中是否有值?
    2. 如果是,请使用该值。
    3. 然后查看应用服务设置
    4. 然后App.config
    5. 我现在最好的解决方法是在发布网络作业时评论keys.config中的值,但这很笨拙。有没有更好的方法来做到这一点?

      记录此问题的最佳位置在哪里?

1 个答案:

答案 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/

希望有所帮助。

感谢。

冷凝管