Azure Cosmos DB 中的 Azure 基于角色的访问控制

适用对象: NoSQL MongoDB Cassandra Gremlin

注意

本文介绍了有关 Azure Cosmos DB 中管理平面操作的基于角色的访问控制。 如果使用的是数据平面操作,则使用主键、资源令牌或 Azure Cosmos DB RBAC 来保护数据。

若要详细了解 API for NoSQL 中应用于数据平面操作的基于角色的访问控制,请参阅安全地访问数据Azure Cosmos DB RBAC 这两篇文章。 对于 Azure Cosmos DB API for MongoDB,请参阅 API for MongoDB 中的数据平面 RBAC

Azure Cosmos DB 为 Azure Cosmos DB 中的常见管理方案提供内置的 Azure 基于角色的访问控制 (Azure RBAC)。 在 Microsoft Entra ID 中拥有配置文件的个人可将这些 Azure 角色分配给用户、组、服务主体或托管标识,以授予或拒绝对 Azure Cosmos DB 中的资源和操作的访问权限。 角色分配范围仅限控制平面访问,包括对 Azure Cosmos DB 帐户、数据库、容器和套餐(吞吐量)的访问。

内置角色

下面是 Azure Cosmos DB 支持的内置角色:

内置角色 说明
DocumentDB 帐户参与者 可管理 Azure Cosmos DB 帐户。
Cosmos DB 帐户读取者 可以读取 Azure Cosmos DB 帐户数据。
CosmosBackupOperator 可以在 Azure 门户中针对已启用定期备份的数据库或容器提交还原请求。 可以在 Azure 门户中修改备份时间间隔和保留期。 无法访问任何数据或使用数据资源管理器。
CosmosRestoreOperator 可以对连续备份模式下的 Azure Cosmos DB 帐户执行还原操作。
Cosmos DB 操作员 可预配 Azure Cosmos DB 帐户、数据库和容器。 无法访问任何数据或使用数据资源管理器。

标识和访问管理 (IAM)

Azure 门户中的“访问控制(IAM)”窗格用于配置针对 Azure Cosmos DB 资源的 Azure 基于角色的访问控制。 角色将应用到 Active Directory 中的用户、组、服务主体和托管标识。 对于个人和组,可使用内置角色或自定义角色。 以下屏幕截图显示在 Azure 门户中使用访问控制 (IAM) 的 Active Directory 集成 (Azure RBAC):

Access control (IAM) in the Azure portal - demonstrating database security.

自定义角色

除内置角色以外,用户还可以在 Azure 中创建自定义角色,并将这些角色应用到其 Active Directory 租户内的所有订阅中的服务主体。 自定义角色可让用户使用一组自定义的资源提供程序操作来创建 Azure 角色定义。 若要了解可以使用哪些操作来为 Azure Cosmos DB 生成自定义角色,请参阅 Azure Cosmos DB 资源提供程序操作

提示

如果自定义角色需要访问存储在 Azure Cosmos DB 中的数据或要在 Azure 门户中使用数据资源管理器,则这些角色必须具有 Microsoft.DocumentDB/databaseAccounts/listKeys/* 操作。

注意

自定义角色分配在 Azure 门户可能并不总是中可见的。

警告

管理 RBAC 更改后,不会自动轮换或撤销帐户密钥。 这些密钥提供对数据平面操作的访问权限。 移除用户对密钥的访问权限时,建议同时也轮换密钥。 对于 RBAC 数据平面,一旦角色/声明不再匹配,Cosmos DB 后端将拒绝请求。 如果用户需要临时访问数据平面操作,建议使用 Azure Cosmos DB RBAC 数据平面。

阻止从 Azure Cosmos DB SDK 进行更改

可以锁定 Azure Cosmos DB 资源提供程序,以防止从使用帐户密钥连接的客户端(即通过 Azure Cosmos DB SDK 连接的应用程序)对资源做出任何更改。 对于需要更高程度的控制和生产环境管理的用户,此功能可能是理想的。 阻止从 SDK 进行更改还会启用资源锁和控制平面操作诊断日志等功能。 将阻止通过 Azure Cosmos DB SDK 连接的客户端更改 Azure Cosmos DB 帐户、数据库、容器和吞吐量的任何属性。 涉及对 Azure Cosmos DB 容器本身进行数据读取和写入的操作不会受到影响。

如果启用此功能,则对任何资源的更改将只能由具有正确 Azure 角色和 Microsoft Entra 凭据(包括托管服务标识)的用户来进行。

警告

启用此功能可能对应用程序造成影响。 确保在启用前了解此影响。

启用前的核对清单

此设置将阻止从使用帐户密钥连接的任何客户端(包括任何 Azure Cosmos DB SDK)、通过帐户密钥连接的任何工具对任何 Azure Cosmos DB 资源做出任何更改。 若要防止在启用此功能后应用程序出现问题或错误,请在启用此功能前检查应用程序是否执行以下任何操作,包括:

  • 创建、删除子资源(例如数据库和容器)。 其中包括用于其他 API 的资源,例如 Cassandra、MongoDB、Gremlin 和表资源。

  • 读取或更新数据库或容器级别资源的吞吐量。

  • 修改容器属性,包括索引策略、TTL 和唯一键。

  • 修改存储过程、触发器或用户定义的函数。

如果应用程序(或者用户通过 Azure 门户)执行这些操作中的任何一种,则需要将它们迁移,以通过 ARM 模板PowerShellAzure CLI、REST 或 Azure 管理库来执行。 请注意,可使用多种语言进行 Azure 管理。

通过 ARM 模板进行设置

若要使用 ARM 模板设置此属性,请更新现有模板或为当前部署导出新模板,然后,将 "disableKeyBasedMetadataWriteAccess": true 包含到 databaseAccounts 资源的属性。 下面是具有此属性设置的 Azure 资源管理器模板的基本示例。

{
    {
      "type": "Microsoft.DocumentDB/databaseAccounts",
      "name": "[variables('accountName')]",
      "apiVersion": "2020-04-01",
      "location": "[parameters('location')]",
      "kind": "GlobalDocumentDB",
      "properties": {
        "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
        "locations": "[variables('locations')]",
        "databaseAccountOfferType": "Standard",
        "disableKeyBasedMetadataWriteAccess": true
        }
    }
}

重要

在使用此属性重新部署时,请确保包含用于帐户和子资源的其他属性。 请勿按原样部署此模板,否则它将重置所有的帐户属性。

通过 Azure CLI 进行设置

若要启用 Azure CLI,请使用以下命令:

az cosmosdb update  --name [CosmosDBAccountName] --resource-group [ResourceGroupName]  --disable-key-based-metadata-write-access true

通过 PowerShell 进行设置

若要启用 Azure PowerShell,请使用以下命令:

Update-AzCosmosDBAccount -ResourceGroupName [ResourceGroupName] -Name [CosmosDBAccountName] -DisableKeyBasedMetadataWriteAccess true

后续步骤