在 public 存储库中共享我的只读 Azure 应用程序配置连接字符串
Sharing my read-only Azure App Configuration Connection String in a public repo
我正在开发一个应用程序,我希望它是开源的。
在生产中,应用程序仅使用 Azure Key Vault 服务来存储数据库连接字符串。连接字符串存储在生产服务器的环境变量中。
在本地,我使用的是来自 EntityFramework 的 InMemory 数据库。无法访问敏感数据。
在生产中,应用程序也在使用 Azure 应用程序配置服务。在能够更新已经 运行 应用程序的配置的同时,它还允许我集中我的应用程序的配置数据。
在本地,我也在使用 Azure 应用程序配置服务。只读连接字符串存储在我的用户机密中。
这就是我正在努力解决的问题。在 Github 或其他 public 上共享只读应用程序配置连接字符串是否被认为是一种不好的做法?即使我不存储任何敏感数据?
Key Vault Service 专门用于安全存储敏感数据,因此理论上 App Configuration Service 没有任何可用的敏感数据。
但我找不到关于该主题的任何相关文档,而且我能找到的每个教程都将连接字符串存储在用户机密中这一事实正在警告我。如何以安全的方式共享我的配置以使我的项目开源?
从安全角度来看,您违反了 principle of least privilege,授予他们不需要的 public 读取权限。
这可能会带来一些风险:
- 您或维护应用程序配置的其他人可能会“忘记”public 读取权限并将易受攻击的数据放在那里
- 攻击者可能会利用应用程序配置本身的安全漏洞并将 read-only 权限升级到 read-write,如果他们在第一时间没有 read-only 访问权限,则不会发生这种情况地点
您可能认为发生这种情况的可能性很小(可能就是这种情况),但它确实存在并且在安全方面我们始终保持安全 - 这就是我们提到原则的原因并且确实普遍存在被认为是违反它的不良做法。
最后,我们总是需要在可用性和安全性之间做出选择,所以最终您可能会同意稍微降低一点安全性,如果这样可以让您的生活更轻松并且潜在的风险麻烦不会吓到您。
如果您不想公开连接字符串,您可以考虑:
- 以类似于获取机密的方式提取配置,以便生产应用程序将使用应用程序配置,而对于本地开发,您可以使用 InMemory 数据库
- 用 Terraform 脚本替换连接字符串,以便您或任何其他开发人员可以启动并填充专用的应用程序配置实例以用于本地开发目的
我正在开发一个应用程序,我希望它是开源的。
在生产中,应用程序仅使用 Azure Key Vault 服务来存储数据库连接字符串。连接字符串存储在生产服务器的环境变量中。 在本地,我使用的是来自 EntityFramework 的 InMemory 数据库。无法访问敏感数据。
在生产中,应用程序也在使用 Azure 应用程序配置服务。在能够更新已经 运行 应用程序的配置的同时,它还允许我集中我的应用程序的配置数据。 在本地,我也在使用 Azure 应用程序配置服务。只读连接字符串存储在我的用户机密中。
这就是我正在努力解决的问题。在 Github 或其他 public 上共享只读应用程序配置连接字符串是否被认为是一种不好的做法?即使我不存储任何敏感数据? Key Vault Service 专门用于安全存储敏感数据,因此理论上 App Configuration Service 没有任何可用的敏感数据。
但我找不到关于该主题的任何相关文档,而且我能找到的每个教程都将连接字符串存储在用户机密中这一事实正在警告我。如何以安全的方式共享我的配置以使我的项目开源?
从安全角度来看,您违反了 principle of least privilege,授予他们不需要的 public 读取权限。
这可能会带来一些风险:
- 您或维护应用程序配置的其他人可能会“忘记”public 读取权限并将易受攻击的数据放在那里
- 攻击者可能会利用应用程序配置本身的安全漏洞并将 read-only 权限升级到 read-write,如果他们在第一时间没有 read-only 访问权限,则不会发生这种情况地点
您可能认为发生这种情况的可能性很小(可能就是这种情况),但它确实存在并且在安全方面我们始终保持安全 - 这就是我们提到原则的原因并且确实普遍存在被认为是违反它的不良做法。
最后,我们总是需要在可用性和安全性之间做出选择,所以最终您可能会同意稍微降低一点安全性,如果这样可以让您的生活更轻松并且潜在的风险麻烦不会吓到您。
如果您不想公开连接字符串,您可以考虑:
- 以类似于获取机密的方式提取配置,以便生产应用程序将使用应用程序配置,而对于本地开发,您可以使用 InMemory 数据库
- 用 Terraform 脚本替换连接字符串,以便您或任何其他开发人员可以启动并填充专用的应用程序配置实例以用于本地开发目的