你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

适用范围: NoSQL

此图显示部署指南序列中的当前位置(“准备”)。

部署指南序列图,包括以下位置,顺序为:概述、概念、准备、基于角色的访问控制、网络和参考。 目前突出显示了“准备”位置。

本文介绍对 Azure Cosmos DB for 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 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 库。

下一步