我有一个用C#和F#组合编写的Web角色,我想在GitHub上公开它作为一个开源项目。
这是我的ServiceConfiguration.Cloud.cscfg
文件:
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="My.Cloud.Service" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
<Role name="My.Web.Role">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=<<myaccountkey>>" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="roblyndon" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="<<my encrypted password>>" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="2017-05-17T23:59:59.0000000+01:00" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" />
<Setting name="APPINSIGHTS_INSTRUMENTATIONKEY" value="205ceb49-275d-4c1c-a42c-fd7e55be0229" />
</ConfigurationSettings>
<Certificates>
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="35DE0821166BCB100B2BA7FF339436DA0CBC089F" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
我很想不隐藏<<my encrypted password>>
- 它毕竟是加密的,虽然是SHA-1。
这种情况的严重性是虽然我的远程访问密码已加密,但是直接暴露了指向我的存储帐户的诊断连接字符串。实际上,它包含我的存储帐户的主要访问密钥的未加密版本。
如果我把它放到一个开源项目中,我想要包含我的cscfg
文件,但显然我不能这样做,因为它暴露了我的私人数据。像我现在一样将它们放在.gitignore
中,将为试图克隆存储库的任何人创建编译难题。
有没有办法让我的cscfg
文件安全?
编辑:请注意,这不是关于在开源项目中隐藏敏感数据的一般性问题。根据您正在使用的项目类型,有几种策略可以执行此操作。对于Web角色,很难实现任何这些标准解决方案,并且尝试这样做可能会破坏构建。显而易见的答案是.gitignore
整个ccproj
云服务项目,并让协作者只能访问相关的Web项目。
答案 0 :(得分:0)
答案不像听起来那么滑稽:不要使用云服务。
使用Web项目,您可以在.gitignore
文件中使用明确忽略的配置转换。 Web角色没有这种清晰的分离。
真正的线索是,在Azure门户中,云服务现在附加了“诅咒起诉”(经典),这与微软产品团队可以宣誓即将结束。现在强烈鼓励开发人员构建应用程序服务,这些工具提供了更丰富的工具集,用于在隐藏敏感数据的同时公开源代码。我现在正在升级,我怀疑从长远来看这会给我带来很多麻烦。