从IIS迁移到运行在Linux上的Docker时需要整合安全性

4

我的当前服务在IIS中运行Windows。我已将它们作为域的一部分运行的服务帐户用户运行。此用户运行服务的应用程序池,还被赋予连接数据库所需的权限。然后,我们的连接字符串只能使用集成安全性来连接到SQL Server数据库。

这样做的好处是可以预先设置,并且代码/连接字符串不需要任何密码。

随着我转向使用Docker容器,我发现这是一个难以保持使用的困境。我的容器以root或其他非公司用户身份运行。因此,我不能只使用集成安全性。(即使我可以让我的容器以域用户身份运行,我也不知道这是否是一个好的实践。)

当在容器中运行时,如何保持密码不出现在我的数据库连接字符串和配置中?


1
我理解得对吗,"集成安全性"是微软对Kerberos的称呼?你知道在Active Directory出现之前,Kerberos已经存在于UNIX世界中很长一段时间了,并且今天仍然存在并可供使用。 - Charles Duffy
话虽如此,一般来说,如果您正在寻找一个更现代化的面向云计算的秘密管理堆栈,我建议使用Hashicorp Vault。这比通常在此处讨论的问题要广泛得多(更接近于系统设计或安全性,而不是编程;这两个领域都有自己的Stack Exchange网站)。 - Charles Duffy
无论如何,如果您正在使用本地UNIX数据库,则可以在krb5连接/身份验证/加密方法中找到Kerberos支持。 - Charles Duffy
1个回答

6
以下是可能适用于您特定情况的几种选项:
  1. 如果您连接到本地 SQL Server 数据库,则可以使用 Kerberos 的集成 Windows 身份验证 - 有关在 Linux 容器中运行的 .NET Core 应用程序连接到启用集成安全性的 SQL Server 数据库的实施,请参见此处
  2. 您还可以切换到 SQL 身份验证,并从 Azure App Config / Azure Key Vault 获取 User IdPassword(或整个连接字符串)。注意:在 AAC 中,任何密钥设置(例如 API 密钥、SSH 密钥等)都应该是 Azure Key Vault (AKV) 引用。AAC 可以通过托管标识与 AKV 集成。
  3. 如果您使用像 Azure SQL 数据库这样的托管数据库,可以使用带有 Azure Tenant ID 和客户端 ID/Secret (AAD 应用程序注册) 设置为环境变量的 DefaultAzureCredential 进行连接(请参见EnvironmentCredential,它是 DefaultAzureCredential 的默认凭据类型)。注意:对于本地开发,DefaultAzureCredential 将回退到VisualStudioCredential,它允许使用用户凭据从 Visual Studio 对 AAD 进行身份验证。

1
这真的很有帮助。谢谢! - Soham Dasgupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接