閱讀英文

共用方式為

安全术语表

本文包含 Azure Cosmos DB for NoSQL 安全指南中使用的常见术语词汇表。

基于角色的访问控制

基于角色的访问控制指的是管理对 Azure 中资源的访问的一种方法。 此方法基于为特定标识分配角色,以管理他们对一个或多个资源的访问权限级别。 基于角色的访问控制提供了一个灵活的精细访问管理系统,可确保标识仅具有执行其任务所需的最低特权级别访问权限。

有关详细信息,请参阅基于角色的访问控制概述

标识/主体

标识是指 Microsoft Entra 中的对象,该对象表示可能需要对系统的访问级别的某些实体。 在 Azure 和 Microsoft Entra 的上下文中,标识可以引用以下类型的实体之一:

DESCRIPTION
工作负载标识 工作负载标识表示需要访问其他服务或资源的软件工作负载
人类身份 用户身份代表一个用户,该用户可以是租户的原生用户,也可以作为访客添加。
管理标识 托管身份是 Azure 中代表 Azure 服务身份的独特资源。
服务主体 服务主帐号是一个可在多种身份验证场景中使用的服务帐户
设备标识 在 Microsoft Entra 中,设备标识是一个映射到设备的对象。
组是用于统一管理对一个或多个身份访问权限的对象

有关详细信息,请参阅身份基础知识

角色

角色是实施访问和权限管理的主要单元。 将角色分配给某个标识,角色定义决定了该标识可具有的访问级别。 分配的范围决定了标识有权访问的内容。

Azure 具有大量内置角色,可用于授予对各种资源的访问权限。 请看以下示例:

价值
角色 CosmosBackupOperator
定义 Microsoft.DocumentDB/databaseAccounts/backup/action & Microsoft.DocumentDB/databaseAccounts/restore/action
范围 资源组

在此示例中,你已为特定资源组分配 CosmosBackupOperator 角色。 通过此分配,你可以对该资源组中的任何 Azure Cosmos DB 帐户执行 backuprestore 操作。

重要

某些 Azure 服务(例如 Azure Cosmos DB)具有其专属的角色访问控制方式,实现方法涉及不同的 Azure 资源管理器属性、Azure CLI 命令和 Azure PowerShell cmdLets。 Azure Cosmos DB 数据平面的访问无法与通常用于管理基于角色访问控制的命令一起使用。 Azure 基于角色的访问控制的一些命令可能适用于 Azure Cosmos DB 控制平面访问。

有关详细信息,请参阅 Azure 内置角色

角色定义

角色定义是一个 JSON 对象,其中包含允许和不允许的控制平面数据平面操作的列表。 请考虑从 CosmosRestoreOperator 内置角色中截断的此示例:

{
  "roleName": "CosmosRestoreOperator",
  "type": "Microsoft.Authorization/roleDefinitions",
  ...
  "permissions": [
    {
      "actions": [
        "Microsoft.DocumentDB/locations/restorableDatabaseAccounts/restore/action",
        "Microsoft.DocumentDB/locations/restorableDatabaseAccounts/*/read",
        "Microsoft.DocumentDB/locations/restorableDatabaseAccounts/read"
      ],
      "notActions": [],
      "dataActions": [],
      "notDataActions": []
    }
  ],
  ...
}

在此定义中,分配此角色的标识可以执行 restore 操作。 还原操作完成后,标识即可读取各种资源,以验证还原是否成功。 由于 *read(通配符)运算符,我们可以确定它能够读取这些资源。

有关详细信息,请参阅角色定义概念

角色分配

角色分配授予对特定 Azure 资源的标识访问权限。 角色分配包括以下组件:

DESCRIPTION
校长 分配此角色的标识
角色 分配给标识的角色
范围 分配的目标 Azure 资源或组
名称/说明 便于大规模管理任务的元数据

提示

在基于角色的访问控制中,可以看到可互换使用的术语 标识主体

有关更多信息,请参阅角色分配概念

行动

操作定义角色对目标资源具有的特定权限。 操作是通常包括资源类型和描述性名称的字符串,描述性名称详细说明操作授予的权限。 下面是一些常见示例:

DESCRIPTION 飞机
Microsoft.DocumentDB/databaseAccounts/listKeys/action 仅读取帐户密钥 控制面板
Microsoft.DocumentDB/databaseAccounts/backup/action 执行备份 控制面板
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/replace 完全替换现有项 数据平面
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery 执行 NoSQL 查询 数据平面

操作还可以包含 *(通配符)字符,因此无需手动详细说明每个特定的子权限。 下面是使用通配符的操作的几个示例:

DESCRIPTION
Microsoft.DocumentDb/databaseAccounts/* 创建并管理 Azure Cosmos DB 帐户
Microsoft.DocumentDB/*/read 读取任何容器或数据库

操作分为控制平面数据平面。 必须单独定义控制平面资源上的操作和可能影响数据的操作。 在角色定义中,控制平面操作使用actions属性,数据平面操作位于dataActions属性中。 还可以定义标识无法使用相应 notActions 属性和 notDataActions 属性执行的操作。

注意

将操作分离到控制和数据平面是一种安全措施,用于防止通配符操作从旧角色定义中不受限制地和无意中访问数据。

有关详细信息,请参阅控制和数据操作

最低特权

“最低特权”的概念是指一种操作最佳做法,用于确保所有用户只有执行任务或作业所需的最低访问权限级别。 例如,从数据库读取数据的应用程序只需要具有对数据存储的读取访问权限。 如果该应用程序具有对数据存储的读取和写入访问权限,可能会发生一些情况,包括但不限于:

  • 应用程序可能会意外销毁数据
  • 未经授权的用户可以访问应用程序的凭证并修改数据

遵循最低特权的做法可确保任何潜在的数据泄露在范围内受到限制。 这种做法可最大程度地提高作安全性,同时允许用户保持有效。

有关详细信息,请参阅 按任务推荐的最小特权角色

控制面板

控制平面访问是指无需管理数据即可管理 Azure 服务的资源的能力。 例如,Azure Cosmos DB 控制平面访问可能包括以下能力:

  • 读取所有帐户和资源元数据
  • 读取和重新生成帐户密钥和连接字符串
  • 执行账户备份与恢复
  • 启动和跟踪数据传输作业
  • 管理数据库和容器
  • 修改帐户属性

重要

在 Azure Cosmos DB 中,您需要控制平面访问来管理本地数据平面的角色访问控制定义和分配。 由于 Azure Cosmos DB 的数据平面基于角色的访问控制机制是原生的,因此需要控制平面访问用于创建定义和分配,并将其存储为 Azure Cosmos DB 帐户中的资源。

数据平面

数据平面访问是指能够在 Azure 服务中读取和写入数据,而无需管理帐户中的资源的能力。 例如,Azure Cosmos DB 数据平面访问可能包括以下能力:

  • 读取一些帐户和资源元数据
  • 创建、读取、更新、修补和删除项目
  • 执行 NoSQL 查询
  • 从容器的更改源读取
  • 执行存储过程
  • 管理冲突源中的冲突

可移植身份验证

在开发中,通常为本地开发和生产实例编写两组不同的身份验证逻辑。 使用 Azure SDK,可以使用单个技术编写逻辑,且身份验证代码预期会在开发和生产中无缝工作。

Azure 标识客户端库在 Azure SDK 中以多种编程语言提供。 使用此库,可以创建一个 DefaultAzureCredential 对象,该对象可智能地遍历多个选项,以便根据环境查找正确的凭证。 这些身份验证选项包括(按顺序):

  1. 作为环境变量存储的客户端密码或证书
  2. Microsoft Entra 工作负载 ID
  3. 用户分配的或系统分配的托管标识
  4. 派生自 Visual Studio 设置的 Azure 凭证
  5. Visual Studio Code 的 Azure 帐户扩展中使用的凭证
  6. Azure CLI 的当前凭证
  7. Azure PowerShell 的当前凭证
  8. Azure Developer CLI 的当前凭证
  9. 一个启动系统浏览器以进行登录的互动会话

每个新式 Azure SDK 库都支持其各自的客户端对象或类的构造函数,这些对象或类接受 DefaultAzureCredential 实例或其基类型。

提示

若要使生产代码更易于调试和更具可预测性,一旦应用程序部署完成,可以选择在开发中使用 DefaultAzureCredential 并交换使用更具体的凭证,例如 WorkloadIdentityCredentialManagedIdentityCredential。 所有这些类都基于许多 Azure 软件开发工具包(SDK)期望作为客户端初始化逻辑一部分的 TokenCredential 类,从而简化了来回切换的过程。

唯一标识符

Microsoft Entra 中的每个标识都具有唯一标识符。 有时会看到此唯一标识符被称为 idobjectIdprincipalId。 创建角色分配时,你需要你希望用于分配的身份的唯一标识符。

范围

分配角色时,必须决定要向其授予访问权限的 Azure 资源或组。 角色分配的范围定义进行分配所处的级别。

例如:

  • 单个资源范围仅将权限应用于该单一资源
  • 资源组级别设置的范围将权限应用于组内所有相关资源
  • 管理组或订阅级别的范围适用于所有子组和资源

在 Azure 基于角色的访问控制中分配角色时,最好设置该分配的范围,使其与工作负荷所需的资源一样少。 例如,可以将分配的范围设置为资源组。 该资源组范围包括资源组中的所有 Azure Cosmos DB 资源:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>

或者,可以将范围设置为单个 Azure 资源,并使分配权限更精细、更窄。 在此示例中,Azure Cosmos DB 资源的提供程序和名称用于缩小范围:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>

有关详细信息,请参阅 Azure 基于角色的访问控制范围

范围(Azure Cosmos DB 原生)

在 Azure Cosmos DB 的基于角色的访问控制的原生实现中,“范围”是指您希望应用权限的帐户内资源的细粒度。

在最高级别,可以使用最大作用域将数据平面基于角色的访问控制分配限定到整个帐户。 此范围包括帐户中的所有数据库和容器:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/

或者,可以将数据平面角色分配的范围限定为特定的数据库:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>

最后,可以将分配范围限定为单个容器,这是最精细的范围:

/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>

提示

在许多情况下,可以使用相对范围而不是完全限定的范围。 例如,可以使用此相对范围从 Azure CLI 命令向特定数据库和容器授予基于角色的数据平面访问控制权限:

/dbs/<database-name>/colls/<container-name>

还可以使用相对范围授予对所有数据库和容器的通用访问权限:

/
注意:作者透過 AI 的協助創作了這篇文章。 深入了解