首页 > 解决方案 > 使用带有 VSCode 的托管标识将本地 asp dotnet 核心应用程序连接到 Azure SQL

问题描述

我有一个托管在 azure 中的 Web 应用程序,它启用了系统管理的标识,我还有一个 Azure SQL 数据库,我已经启用了对该标识的访问。

当它在云中运行时,它可以正常工作并且可以查询数据库。但是,在本地运行时,我希望能够针对云数据库进行调试,但我想使用相同的连接方式(因为我们禁用了 SQL 登录)

我在 macOS 上运行 dotnet core 3.0 并在 IDE 中使用 VSCode ...有什么方法可以设置环境变量或允许我的本地实例连接的东西吗?我知道您可以通过登录 VS 在 Windows 和完整的 Visual Studio 上执行此操作。

我已经尝试过这些环境变量,但它似乎不起作用(使用与 azure 中的应用程序使用相同的 id)

"IdentityObjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"IdentityTenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

标签: azureasp.net-core.net-corevisual-studio-codeazure-sql-database

解决方案


我现在已经完成了这项工作,这就是以后遇到这篇文章的任何人的方法。

我的配置设置背景:我添加了一个 azure AD 用户作为管理员,并授予该用户对 azure sql 的访问权限。

azureaduser=$(az ad user list --filter "userPrincipalName eq 'MYUSERNAME'" --query [].objectId --output tsv)
az sql server ad-admin create --resource-group MYRESOURCEGROUP --server-name MYSQLSERVER.database.windows.net --display-name ADMIN --object-id $azureaduser

我创建了一个 azure AD 组并将该用户添加到该组。我还将 azure webapp 的服务原则(托管标识)添加到该组中。

groupid=$(az ad group create --display-name sqlAccessGroup --mail-nickname sqlAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group RESOURCEGROUPNAME --name MYWEBAPPNAME --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid

以该管理员用户身份登录,我可以通过 Azure Cloud Shell 连接到数据库并运行 sqlcmd

sqlcmd -S MYSERVER.database.windows.net -d MYDATABASE -U "MYUSER@MYSUBSCRIPTION.onmicrosoft.com" -P "MYPASSWORD" -G -l 30

注意:我已经可以使用 SQL 身份验证访问此数据库,但您无法将 AD 组/用户添加到数据库,除非您使用 Azure AD 帐户登录(因此之前创建了管理员帐户)

CREATE USER [sqlAccessGroup] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [sqlAccessGroup];
ALTER ROLE db_datawriter ADD MEMBER [sqlAccessGroup];
ALTER ROLE db_ddladmin ADD MEMBER [sqlAccessGroup];
GO

我还在我的 Azure SQL 上关闭了允许 Azure 服务访问,因此我必须将 Web 应用程序的出站 IP 添加到防火墙......说到防火墙,请确保您的本地计算机的 IP 也在其中。

对我来说,这个问题的真正解决方案是在 VS Code 的终端中运行“az login”,这似乎创建了一个“身份上下文”,允许我从上面使用我的“管理员用户”登录,从而可以访问数据库。它并不完全像从 Web 应用程序本身运行,但它足够接近并且不需要启用第二个连接字符串或 SQL 身份验证。


推荐阅读