使用托管标识从 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 访问策略应向托管标识授予访问权限。
先决条件
- 具有活动订阅的 Azure 帐户。 创建试用版订阅。
- 现有的 Azure Cosmos DB API for NoSQL 帐户。 创建 Azure Cosmos DB API for NoSQL 帐户
- 现有 Azure Key Vault 资源。 使用 Azure CLI 创建密钥保管库
- 若要执行本文中的步骤,需安装 Azure CLI 并登录 Azure。
先决条件检查
在终端或命令窗口中,将 Azure Key Vault 资源、Azure Cosmos DB 帐户和资源组的名称分别存储为名为
keyVaultName
、cosmosName
和resourceGroupName
的 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 帐户创建系统分配的托管标识。
重要
本操作指南假定你使用的是系统分配的托管标识。 使用用户分配的托管标识时,许多步骤都类似。
运行
az cosmosdb identity assign
以新建一个系统分配的托管标识。az cosmosdb identity assign \ --resource-group $resourceGroupName \ --name $cosmosName
使用
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 中创建访问策略。
使用
az keyvault set-policy
命令在 Azure Key Vault 中创建访问策略,该策略向 Azure Cosmos DB 托管标识授予访问 Key Vault 的权限。 具体而言,该策略将使用 key-permissions 参数向get
、list
和import
密钥授予权限。az keyvault set-policy \ --name $keyVaultName \ --object-id $principal \ --key-permissions get list import