【问题标题】:Connect local asp dotnet core app to Azure SQL using managed identity with VSCode使用带有 VSCode 的托管标识将本地 asp dotnet 核心应用程序连接到 Azure SQL
【发布时间】:2020-03-05 02:10:36
【问题描述】:

我有一个托管在 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"

【问题讨论】:

    标签: azure asp.net-core .net-core visual-studio-code azure-sql-database


    【解决方案1】:

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

    我的配置设置的背景: 我添加了一个 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 身份验证。

    【讨论】:

    • 您可以接受它作为答案。这对其他社区成员可能是有益的。谢谢。
    • 是的,我只需要在那里做“等待 2 天的事情”。
    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2022-01-09
    • 2023-03-23
    • 2021-08-15
    • 2021-07-30
    • 1970-01-01
    • 2022-08-02
    相关资源
    最近更新 更多