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

使用托管标识从 Azure Cosmos DB 访问 Azure Key Vault

Azure Cosmos DB 可能需要从 Azure Key Vault 读取机密/密钥数据。 例如,Azure Cosmos DB 可能需要存储在 Azure Key Vault 中的客户管理的密钥。 为此,应使用托管标识配置 Azure Cosmos DB,然后 Azure Key Vault 访问策略应向托管标识授予访问权限。

先决条件

先决条件检查

  1. 在终端或命令窗口中,将 Azure Key Vault 资源、Azure Cosmos DB 帐户和资源组的名称存储为命名 keyVaultName的 shell 变量, cosmosName以及 resourceGroupName

    # Variable for function app name
    keyVaultName="msdocs-keyvault"
    
    # Variable for Azure Cosmos DB account name
    cosmosName="msdocs-cosmos-app"
    
    # Variable for resource group name
    resourceGroupName="msdocs-cosmos-keyvault-identity"
    

    注意

    后续步骤中将重复使用这些变量。 此示例假定 Azure Cosmos DB 帐户名称为 msdocs-cosmos-app,密钥保管库名称为 msdocs-keyvault,资源组名称为 msdocs-cosmos-keyvault-identity

在 Azure Cosmos DB 中创建系统分配的托管标识

首先,为现有的 Azure Cosmos DB 帐户创建系统分配的托管标识。

重要

本操作指南假定你使用的是系统分配的托管标识。 使用用户分配的托管标识时,许多步骤都类似。

  1. 运行 az cosmosdb identity assign 以新建一个系统分配的托管标识。

    az cosmosdb identity assign \
        --resource-group $resourceGroupName \
        --name $cosmosName 
    
  2. 使用 az cosmosdb identity show 检索系统分配的托管标识的元数据,使用 query 参数进行筛选以仅返回 principalId 属性,并将结果存储在名为 的 shell 变量中。

    principal=$(
        az cosmosdb identity show \
            --resource-group $resourceGroupName \
            --name $cosmosName \
            --query principalId \
            --output tsv
    )
    
    echo $principal
    

    注意

    此变量将在后面的步骤中重复使用。

创建 Azure Key Vault 访问策略

在此步骤中,使用以前的托管标识在 Azure Key Vault 中创建访问策略。

  1. 使用 az keyvault set-policy 命令在 Azure Key Vault 中创建访问策略,该策略向 Azure Cosmos DB 托管标识授予访问 Key Vault 的权限。 具体而言,该策略将使用 key-permissions 参数向 getlist 密钥授予权限。

    az keyvault set-policy \
        --name $keyVaultName \
        --object-id $principal \
        --key-permissions get list import
    

后续步骤

  • 若要将 Azure 密钥保管库中客户管理的密钥与 Azure Cosmos DB 帐户一起使用,请参阅配置客户管理的密钥
  • 若要使用 Azure Key Vault 管理机密,请参阅安全凭据