0

    迁移应用程序以将无密码连接用于 Azure Cosmos DB for NoSQ

    2023.05.29 | admin | 128次围观

    本文内容

    必须对 Azure Cosmos DB for NoSQL 的应用程序请求进行身份验证。 尽管有多个选项可用于对 Azure Cosmos DB 进行身份验证,但应尽可能优先考虑应用程序中的无密码连接。 使用连接字符串(包含密码或密钥)的传统身份验证方法会产生安全风险和复杂性。 访问 Azure 服务中心的无密码连接,详细了解迁移到无密码连接的优势。

    以下教程说明了如何迁移现有应用程序,以使用无密码连接(而不是基于密钥的解决方案)来连接到 Azure Cosmos DB for NoSQL。

    为本地开发身份验证配置角色和用户

    使用无密码身份验证进行本地开发时,请确保为连接到 COSMOS DB 的用户帐户分配的角色有权执行数据操作。 目前,Azure Cosmos DB for NoSQL 不包括用于数据操作的内置角色,但你可以使用 Azure CLI 或 PowerShell 创建自己的角色。

    角色包含一组权限或是允许用户执行的一组操作(如读取、写入和删除)。 你可以在 Cosmos DB 安全配置文档中阅读有关配置基于角色的访问控制 (RBAC) 的更多信息。

    创建自定义角色

    使用 az role definition create 命令创建角色。 传入 Cosmos DB 帐户名和资源组,然后是用于定义自定义角色的 JSON 主体。 以下示例创建一个名为 PasswordlessReadWrite 的角色,该角色具有在 Cosmos DB 容器中读取和写入项的权限。 使用 / 将角色的范围限定为帐户级别。

    az cosmosdb sql role definition create \
        --account-name  \
        --resource-group   \
        --body '{
        "RoleName": "PasswordlessReadWrite",
        "Type": "CustomRole",
        "AssignableScopes": ["/"],
        "Permissions": [{
            "DataActions": [
                "Microsoft.DocumentDB/databaseAccounts/readMetadata",
                "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*",
                "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*"
            ]
        }]
    }'
    

    命令完成后,从 name 字段中复制 ID 值,并将其粘贴到某个位置供以后使用。

    将你创建的角色分配给将连接到 Cosmos DB 的用户帐户或服务主体。 在本地开发期间,这通常是登录到开发工具(例如 Visual Studio 或 Azure CLI)的自身帐户。 使用 az ad user 命令检索帐户的详细信息。

    az ad user show --id ""
    

    从结果中复制 id 属性的值,并将其粘贴到某个位置以供以后使用。

    使用 az cosmosdb sql role assignment create 命令和先前复制的 ID 将你创建的自定义角色分配给你的用户帐户。

    az cosmosdb sql role assignment create \
        --account-name  \
        --resource-group   \
        --scope "/" \
        --principal-id  \
        --role-definition-id  
    

    在本地登录到 Azure

    对于本地开发,请确保使用分配了该角色的同一 Azure AD 帐户进行身份验证。 可以通过常用的开发工具(如 Azure CLI 或 Azure PowerShell)进行身份验证。 可用于进行身份验证的开发工具因语言而异。

    使用以下命令通过 Azure CLI 登录到 Azure:

    az login
    

    选择 Visual Studio 右上角的“登录”按钮。

    使用你之前为其分配角色的 Azure AD 帐户登录。

    需要安装 Azure CLI 才能通过 Visual Studio Code 使用 DefaultAzureCredential。

    在 Visual Studio Code 的主菜单上,导航到“终端”>“新建终端”。

    使用以下命令通过 Azure CLI 登录到 Azure:

    az login
    

    通过以下命令使用 PowerShell 登录到 Azure:

    Connect-AzAccount
    

    迁移应用代码以使用无密码连接

    若要在 .NET 应用程序中使用 DefaultAzureCredential,请安装 Azure.Identity 包:

    dotnet add package Azure.Identity
    

    在文件的顶部,添加以下代码:

    using Azure.Identity;
    

    确定代码中创建 CosmosClient 对象以连接到 Azure Cosmos DB 的位置。 更新代码,使之与以下示例一致。

     using CosmosClient client = new(
         accountEndpoint: Environment.GetEnvironmentVariable("COSMOS_ENDPOINT"),
         tokenCredential: new DefaultAzureCredential()
     );
    

    在本地运行应用

    进行这些代码更改后,在本地运行应用程序。 新配置应选取本地凭据,例如 Azure CLI、Visual Studio 或 IntelliJ。 你在 Azure 中分配给本地开发用户的角色将允许应用在本地连接到 Azure 服务。

    配置 Azure 托管环境

    将应用程序配置为使用无密码连接并在本地运行后,相同的代码可以在应用程序部署到 Azure 后向 Azure 服务进行身份验证。 以下各部分介绍了如何配置已部署的应用程序,以使用托管标识连接到 Azure Cosmos DB。

    创建托管标识

    你可以使用 Azure 门户或 Azure CLI 创建用户分配的托管标识。 应用程序将使用该标识向其他服务进行身份验证。

    在 Azure 门户顶部搜索“托管标识”。 选择“托管标识”结果。选择“托管标识”概述页面顶部的“+ 创建”。在“基本信息”选项卡上,输入下列值:在页面底部选择“查看 + 创建”。验证检查完成后,选择“创建”。 Azure 将创建新的用户分配的标识。

    创建资源后,选择“转到资源”以查看托管标识的详细信息。

    使用 az identity create 命令创建用户分配的托管标识:

    az identity create --name MigrationIdentity --resource-group 
    

    将托管标识与 Web 应用相关联

    你需要将 Web 应用配置为使用自己创建的托管标识。 使用 Azure 门户或 Azure CLI 将标识分配给应用。

    在 Azure 门户中完成以下步骤联想 本地连接测试联想 本地连接测试,从而将标识与应用相关联。 这些步骤同样也适用于以下 Azure 服务:

    导航到 Web 应用的概述页面。

    从左侧导航菜单中,选择“标识”。

    在“标识”页面上,切换到“用户分配的”选项卡。

    选择“+ 添加”,打开“添加用户分配的托管标识”浮出控件。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    标签: azurecosmos
    发表评论