使用 Azure Cosmos DB for Table 禁用基于密钥的身份验证(预览版)

适用对象:

本文介绍对 Azure Cosmos DB for Table 帐户禁用基于密钥的授权(或资源所有者密码凭据身份验证)的过程。

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

先决条件

可以使用本地 Azure CLI。

  • 如果需要,请安装 Azure CLI 来运行 CLI 参考命令。

  • 本地 Azure CLI,请了解如何安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI

    • 通过使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

禁用基于密钥的身份验证

首先,对现有帐户禁用基于密钥的身份验证,以便要求应用程序使用 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 Table。 此尝试应会失败。 如有必要,此处提供了常见编程语言的代码示例。

using Azure.Data.Tables;
using Azure.Core;

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

TableServiceClient client = new(connectionString);

重要

此代码示例使用 NuGet 中的 Azure.Data.TablesAzure.Identity 库。

下一步