【问题标题】:Is there any need to use .Net Core Secret Management tool?是否需要使用 .Net Core Secret Management 工具?
【发布时间】:2019-07-29 03:07:17
【问题描述】:

.Net Core 带有一个秘密管理工具,用于存储用于开发目的的秘密。如果我正确理解了文档,则不涉及加密,所有内容都以纯文本形式存储。

现在的问题是,如果我们只能从 appsettings.secrets.json 文件中读取,为什么要使用这种相对繁琐的方法?这更容易使用并查看秘密并将其添加到 .gitignore 以便它永远不会出现在源代码管理中。

使用这种更简单的方法是否存在我没​​有考虑过的安全问题?

附:我只能想到意外提交机密文件的危险,但除非您更改整个 .gitignore 文件,否则这并不容易

【问题讨论】:

  • 您所描述的与该工具的功能相同,只是手动操作。它比调用一个工具更麻烦。你当然可以自动化它。虽然此时您已经重建了秘密管理工具本身。至于不小心提交了机密文件,这非常很容易 - 团队中的某个人会拼错它。或者放错文件夹
  • 将文件提供给某人比通常运行命令更容易,因为每台新的开发人员机器都需要它
  • 另一个问题是 build 服务器。 .secrets.json 文件将如何传递到那里?
  • 还有一个问题是通过.gitignore 工作会绕过配置约定。在生产中保护机密的一种常用方法是使用云提供商或数据保护提供商的密钥管理服务。 Secrets 管理工具正好适合该架构,本质上只是另一个配置提供程序。您可以使用不同的秘密,就像您可以在每个环境中使用不同的配置提供程序一样。不过,您必须手动移动 .secrets.json 文件,并且...修改您的代码以在每个环境中查找它
  • 将文件提供给某人实际上比使用该工具要更多个步骤。在配置架构中正确使用它需要更多步骤。所有这些都是选项,您可以轻松组合它们

标签: .net-core asp.net-core-security


【解决方案1】:

我认为我应该将 cmets 放在一个答案中。

主要问题是敏感数据不应使用与代码相同的分发渠道。这就是为什么 .gitignore 是不够的。您将使用相同的通道并依赖于正确处理任何用户都可以修改的 .gitignore 文件。出错的可能性永远存在。

这是否可以接受取决于机密的类型。这些数据有多敏感?如果它包含开发数据库的sa 或sys 密码,请不要使用该帐户。使用具有有限权限的单独帐户,这仅用于访问该数据库。丢失受限开发帐户的密码可能不是什么大问题。大概。

另一方面,如果它包含您的云开发/登台环境的 API 或帐户密钥,哎呀。它可能是一个临时环境,但有人仍然可以使用它们来启动虚拟机、创建帐户或窃取数据。

secrets 工具的一大优势在于它可以在配置架构中运行。对于应用程序来说,它只是另一个配置提供程序,可以根据环境变量或命令行选项使用或不使用。

这也不是 only 选项,它只是一种处理机密的便捷方式,尤其是在分布式或 OSS 开发环境中。还有其他选择:

  • 在公司环境中,您可以将“机密”文件放在只有团队成员具有读取权限的文件共享中,并通过另一个配置提供程序(例如通过环境变量)共享该位置。该文件可以通过安全组进行保护,这意味着添加/删除对其的访问权限将比添加/删除对单个文件的访问权限容易得多。您可以对文件共享启用审核,以查看谁也访问了机密文件。这是.gitignore无法做到的事情

  • 您可以使用环境变量为每个环境(开发、质量保证、构建服务器等)选择不同的路径。

  • 您甚至可以使用一个数据库,将不同的秘密返回给不同的角色/环境。毕竟,密钥管理系统可以看作是一个加密安全的设置数据库。

  • 您还可以复制一些设置文件。您可以在 Linux 上使用 etcd 或在 Windows 上使用文件复制来做到这一点。这也是将设置更改传送到多个服务器/容器的一种方式。

【讨论】:

    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2019-02-06
    • 2020-04-05
    • 2018-03-16
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多