.Net Core附带了一个秘密管理工具,用于存储秘密以用于开发目的。如果我对文档的理解正确,则不涉及加密,所有内容均以纯文本格式存储。
现在的问题是,如果我们只能从initialise()
文件中读取内容,例如为什么要使用这种相对麻烦的方法呢?使用起来更容易,可以看到秘密并将其添加到.gitignore中,从而使其永远不会出现在源代码控件中。
使用这种简单的方法是否存在我没有想到的安全问题?
P.S。我只能想到意外提交机密文件会带来危险,但这并不是那么容易,除非您更改整个.gitignore文件
答案 0 :(得分:2)
我认为我应该将评论放在一个答案中。
主要问题是敏感数据不应使用与代码相同的分发渠道。这就是.gitignore不够的原因。您将使用完全相同的频道,并且依赖于任何用户都可以修改的.gitignore文件的正确处理。错误的可能性将永远存在。
是否可以接受取决于秘密的类型。该数据有多敏感?如果它包含开发数据库的密码sa
或sys
,请不要使用该帐户。使用具有有限特权的单独帐户,该帐户仅用于访问该数据库。将密码丢失到有限的开发人员帐户可能不是大问题。大概。
另一方面,如果它包含您的云开发/登台环境的API或帐户密钥,那么糟糕。它可能是一个暂存环境,但是仍然有人可以使用它们来启动VM,创建帐户或窃取数据。
秘密工具的最大优点是它可以在配置体系结构内运行。在应用程序中,它似乎只是另一个配置提供者,取决于环境变量或命令行选项,是否可以使用它。
它也不是 only 选项,它只是一种处理机密的便捷方法,尤其是在分布式或OSS开发环境中。还有其他选择:
在公司环境中,您可以将“秘密”文件放入文件共享中,在该文件共享中,只有团队成员具有读取权限,并可以通过另一个配置提供程序(例如,通过环境变量)共享位置。可以通过安全组保护文件的安全,这意味着添加/删除对该文件的访问要比添加/删除对单个文件的访问要容易得多。您可以对文件共享启用审核,以查看谁也访问了秘密文件。这是.gitignore
您可以使用环境变量为每个环境(开发,质量保证,构建服务器等)选择不同的路径。
您甚至可以使用将不同机密返回给不同角色/环境的数据库。毕竟,密钥管理系统可以看作是加密保护的设置数据库。
您还可以复制一些设置文件。您可以在Linux上使用etcd或在Windows上使用文件复制来实现。这也是将设置更改传递到多个服务器/容器的一种方法。