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

适用对象: NoSQL MongoDB Cassandra Gremlin

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 帐户和资源组的名称分别存储为名为 keyVaultNamecosmosNameresourceGroupName 的 shell 变量。

    # 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 属性,并将结果存储在名为 principal 的 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 参数向 getlistimport 密钥授予权限。

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

后续步骤

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