是否需要使用.Net Core Secret Management 工具?
Is there any need to use .Net Core Secret Management tool?
.Net Core 附带一个秘密管理工具,用于存储用于开发目的的秘密。如果我对文档的理解正确,那么不涉及加密,所有内容都以纯文本形式存储。
现在的问题是,如果我们只能从 appsettings.secrets.json
个文件中读取,为什么我们要使用这种相对麻烦的方法,例如这更容易使用和查看秘密并将其添加到 .gitignore 以便它永远不会出现在源代码管理中。
使用这种更简单的方法时是否有任何我没有考虑过的安全问题?
P.S。我只能想到意外提交机密文件的危险,但除非您更改整个 .gitignore 文件,否则这并不容易
我想我应该把评论放在一个答案中。
主要问题是敏感数据不应使用与代码相同的分发渠道。这就是 .gitignore 不够用的原因。您将使用完全相同的渠道,并依赖于对任何用户都可以修改的 .gitignore 文件的正确处理。出错的可能性永远存在。
这是否可以接受取决于机密的类型。这些数据有多敏感?如果它包含开发数据库的 sa
或 sys
密码,请不要使用该帐户。使用具有有限权限的单独帐户,这仅意味着访问该数据库。丢失有限开发帐户的密码可能不是什么大问题。大概。
另一方面,如果它包含 API 或云 dev/staging 环境的帐户密钥,哎呀。它可能是一个暂存环境,但仍然有人可以使用它们来启动 VM、创建帐户或窃取数据。
secrets 工具的一大优势是它在配置架构中运行。对于应用程序,它只是另一个可以使用或不使用的配置提供程序,具体取决于环境变量或命令行选项。
它也不是 only 选项,只是一种处理机密的便捷方式,尤其是在分布式或 OSS 开发环境中。还有其他选项:
在公司环境中,您可以将 "secrets" 文件放在只有团队成员具有读取权限的文件共享中,并通过另一个配置提供程序共享位置,例如通过环境变量。该文件可以通过安全组进行保护,这意味着 adding/removing 访问它比 adding/removing 访问单个文件要容易得多。您可以启用对文件共享的审核以查看谁也访问了机密文件。这是 .gitignore
做不到的事情
您可以使用环境变量为每个环境(开发、质量检查、构建服务器等)选择不同的路径。
您甚至可以使用 returns 不同 roles/environments 不同秘密的数据库。毕竟,密钥管理系统可以看作是加密安全设置数据库。
您还可以复制一些设置文件。您可以使用 Linux 上的 etcd 或 Windows 上的文件复制来做到这一点。这也是将设置更改传递给多个 servers/containers 的一种方式。
.Net Core 附带一个秘密管理工具,用于存储用于开发目的的秘密。如果我对文档的理解正确,那么不涉及加密,所有内容都以纯文本形式存储。
现在的问题是,如果我们只能从 appsettings.secrets.json
个文件中读取,为什么我们要使用这种相对麻烦的方法,例如这更容易使用和查看秘密并将其添加到 .gitignore 以便它永远不会出现在源代码管理中。
使用这种更简单的方法时是否有任何我没有考虑过的安全问题?
P.S。我只能想到意外提交机密文件的危险,但除非您更改整个 .gitignore 文件,否则这并不容易
我想我应该把评论放在一个答案中。
主要问题是敏感数据不应使用与代码相同的分发渠道。这就是 .gitignore 不够用的原因。您将使用完全相同的渠道,并依赖于对任何用户都可以修改的 .gitignore 文件的正确处理。出错的可能性永远存在。
这是否可以接受取决于机密的类型。这些数据有多敏感?如果它包含开发数据库的 sa
或 sys
密码,请不要使用该帐户。使用具有有限权限的单独帐户,这仅意味着访问该数据库。丢失有限开发帐户的密码可能不是什么大问题。大概。
另一方面,如果它包含 API 或云 dev/staging 环境的帐户密钥,哎呀。它可能是一个暂存环境,但仍然有人可以使用它们来启动 VM、创建帐户或窃取数据。
secrets 工具的一大优势是它在配置架构中运行。对于应用程序,它只是另一个可以使用或不使用的配置提供程序,具体取决于环境变量或命令行选项。
它也不是 only 选项,只是一种处理机密的便捷方式,尤其是在分布式或 OSS 开发环境中。还有其他选项:
在公司环境中,您可以将 "secrets" 文件放在只有团队成员具有读取权限的文件共享中,并通过另一个配置提供程序共享位置,例如通过环境变量。该文件可以通过安全组进行保护,这意味着 adding/removing 访问它比 adding/removing 访问单个文件要容易得多。您可以启用对文件共享的审核以查看谁也访问了机密文件。这是
.gitignore
做不到的事情
您可以使用环境变量为每个环境(开发、质量检查、构建服务器等)选择不同的路径。
您甚至可以使用 returns 不同 roles/environments 不同秘密的数据库。毕竟,密钥管理系统可以看作是加密安全设置数据库。
您还可以复制一些设置文件。您可以使用 Linux 上的 etcd 或 Windows 上的文件复制来做到这一点。这也是将设置更改传递给多个 servers/containers 的一种方式。