linux - 在 Linux 上从 IIS 迁移到 Docker 时的集成安全性
问题描述
我当前的服务在 IIS 中的 Windows 上运行。我让它们作为我域中的服务帐户用户运行。此用户运行服务的应用程序池,并且还获得了对数据库的所需权限。然后我们的连接字符串可以使用集成的安全性来连接到我们的 SQL Server 数据库。
这样做的好处是可以提前设置,代码/连接字符串不需要任何密码。
当我转向 docker 容器时,我发现这种情况很难继续使用。我的容器以 root 或其他一些非公司用户身份运行。所以我不能只使用集成安全性。(即使我可以让我的容器作为域用户运行,我也不知道这会是一个好习惯。)
在容器中运行时,如何将密码保留在我的数据库连接字符串和配置之外?
解决方案
可能会根据您的具体情况起作用的几个选项:
- 如果您要连接到本地 SQL Server 数据库,您可以使用集成的 Windows 身份验证和 Kerberos - 请参阅 此处以实现 .NET Core 应用程序,在 Linux 容器中运行,连接到具有集成安全性的 SQL Server 数据库。
- 您还可以从 Azure App Config/Azure Key Vault切换到 SQL auth 并获取
User Id
和 (或整个连接字符串)。注意:在 AAC 中,任何机密设置(例如 API 密钥、SSH 密钥等)都应该是 Azure Key Vault (AKV) 引用。AAC 可以通过托管身份集成到 AKV。Password
- 如果您使用 Azure SQL 数据库等托管数据库,则可以使用DefaultAzureCredential进行连接,并将 Azure 租户 ID 和客户端 ID/秘密(AAD 应用注册)设置为环境变量(请参阅EnvironmentCredential,这是 DefaultAzureCredential 的默认凭据类型)。注意:对于本地开发, DefaultAzureCredential 将回 退到 VisualStudioCredential,它可以使用用户凭据从 Visual Studio 对 AAD 进行身份验证。
推荐阅读
- php - 如何从 PHP 中的 URL 获取 POST 参数
- botframework - 如何以编程方式获取 Microsoft Bot Framework 聊天机器人应用程序的 DirectLine 机密?
- c# - 如何在 Xamarin 应用程序中初始化 IoC 容器?
- c# - C#如何将数字作为浮点数传递给函数?
- javascript - React 的 ref 的流类型
- crystal-reports - 如何为水晶报表和 sap b1 配置令牌和布局?
- android - 如何在 Kotlin 中附加 2 个字符串?
- javascript - 如何在 JavaScript 中获取标签的值
- javascript - javascript函数使用ajax返回真/假
- python - Python Pandas : how to format a float with space between thousands, millions, etc