使用 Azure Cosmos DB for NoSQL 禁用基于密钥的身份验证

本文介绍如何为 Azure Cosmos DB 的 NoSQL 帐户禁用基于密钥的授权(或资源拥有者密码凭据身份验证)的方法。

禁用基于密钥的授权可在没有比较安全的 Microsoft Entra 身份验证方法的情况下阻止使用帐户。 此过程是针对安全工作负载中新的账户应执行的操作。 或者,对迁移到安全工作负载模式的现有帐户执行此过程。

先决条件

禁用基于密钥的身份验证

首先,对现有帐户禁用基于密钥的身份验证,以便要求应用程序使用 Microsoft Entra 身份验证。 使用 az resource update 修改现有帐户的 properties.disableLocalAuth

az resource update \
    --resource-group "<name-of-existing-resource-group>" \
    --name "<name-of-existing-account>" \
    --resource-type "Microsoft.DocumentDB/databaseAccounts" \
    --set properties.disableLocalAuth=true

首先,创建一个新帐户并禁用基于密钥的身份验证,以便要求应用程序使用 Microsoft Entra 身份验证。

  1. 创建一个新的 Bicep 文件,以部署新帐户并禁用基于密钥的身份验证。 将文件命名为 deploy-new-account.bicep

    metadata description = 'Deploys a new Azure Cosmos DB account with key-based auth disabled.'
    
    @description('Name of the Azure Cosmos DB account.')
    param name string = 'csms-${uniqueString(resourceGroup().id)}'
    
    @description('Primary ___location for the Azure Cosmos DB account.')
    param ___location string = resourceGroup().___location
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' = {
      name: name
      ___location: ___location
      kind: 'GlobalDocumentDB'
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [
          {
            locationName: ___location
          }
        ]
        disableLocalAuth: true
      }
    }
    
  2. 使用 az deployment group create 为该 Bicep 文件部署新帐户。

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file deploy-new-account.bicep
    

首先,对现有帐户禁用基于密钥的身份验证,以便要求应用程序使用 Microsoft Entra 身份验证。 使用 Get-AzResourceSet-AzResource 分别读取和更新现有帐户。

$parameters = @{
    ResourceGroupName = "<name-of-existing-resource-group>"
    ResourceName = "<name-of-existing-account>"
    ResourceType = "Microsoft.DocumentDB/databaseAccounts"
}
$resource = Get-AzResource @parameters

$resource.Properties.DisableLocalAuth = $true


$resource | Set-AzResource -Force

使用以下步骤创建禁用基于密钥的身份验证的新 Azure Cosmos DB for NoSQL 帐户,以便应用程序仅使用 Microsoft Entra 身份验证。

  1. 设置新的 Azure Cosmos DB for NoSQL 帐户时,导航到帐户创建过程 的安全 部分。

  2. 然后,为基于密钥的身份验证选项选择“禁用”。

    在 Azure 门户中创建新帐户时禁用基于密钥的身份验证的选项的屏幕截图。

验证是否已禁用身份验证

尝试使用 Azure SDK 通过资源所有者密码凭据(ROPC)连接到 Azure Cosmos DB for NoSQL。 此尝试应会失败。 如有必要,此处提供了常见编程语言的代码示例。

using Microsoft.Azure.Cosmos;

string connectionString = "AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;";

CosmosClient client = new(connectionString);

重要

此代码示例使用 NuGet 中的 Microsoft.Azure.Cosmos 库。