你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Cosmos DB for NoSQL 的安全术语表
适用范围: NoSQL
部署指南序列图,包括以下位置,顺序为:概述、概念、准备、基于角色的访问控制、网络和参考。 当前突出显示了“概念”位置。
本文包含此 Azure Cosmos DB for NoSQL 安全指南中使用的常见术语词汇表。
基于角色的访问控制
基于角色的访问控制指的是管理对 Azure 中资源的访问的一种方法。 此方法基于分配了角色的特定标识,用于管理他们对一个或多个资源的访问权限级别。 基于角色的访问控制提供了一个灵活的精细访问管理系统,可确保标识仅具有执行其任务所需的最低特权级别访问权限。
有关详细信息,请参阅基于角色的访问控制概述。
标识/主体
标识是指 Microsoft Entra 中的对象,该对象表示可能需要对系统的访问级别的某些实体。 在 Azure 和 Microsoft Entra 的上下文中,标识可以引用以下类型的实体之一:
说明 | |
---|---|
工作负载标识 | 工作负载标识表示需要访问其他服务或资源的软件工作负载 |
人类标识 | 人类标识代表一个用户,该用户既可以是租户的本机用户,也可以作为访客添加 |
托管标识 | 托管标识是 Azure 中表示 Azure 服务的标识的不同资源 |
服务主体 | 服务主体是一个可在灵活数量的身份验证场景中使用的服务帐户 |
设备标识 | 设备标识是映射到设备的 Microsoft Entra 中的对象 |
组 | 组是用于将对一个或多个标识的访问权限作为单个操作管理的对象 |
有关详细信息,请参阅身份基础知识。
角色
角色是强制实施访问权限和权限的主要单位。 将角色分配给标识,角色的定义规定了该标识可以拥有的访问级别。 分配的范围决定了标识有权访问的内容。
Azure 具有大量内置角色,可用于授予对各种资源的访问权限。 请看以下示例:
值 | |
---|---|
角色 | CosmosBackupOperator |
定义 | Microsoft.DocumentDB/databaseAccounts/backup/action 和 Microsoft.DocumentDB/databaseAccounts/restore/action |
Scope | 资源组 |
在此示例中,你已为特定资源组分配 CosmosBackupOperator
角色。 通过此分配,你可以对该资源组中的任何 Azure Cosmos DB 帐户执行 backup
或 restore
操作。
重要
某些 Azure 服务(如 Azure Cosmos DB)具有自己的基于角色的访问控制本机实现,这些实现使用不同的 Azure Resource Manager 属性、Azure CLI 命令和 Azure PowerShell cmdLet。 通常用于管理基于角色的访问控制的命令不适用于 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 资源的标识访问权限。 角色分配包括以下组件:
说明 | |
---|---|
主体 | 分配此角色的标识 |
角色 | 分配给标识的角色 |
Scope | 分配的目标 Azure 资源或组 |
名称/说明 | 能够更轻松地大规模管理分配的元数据 |
提示
在基于角色的访问控制中,你可能会看到术语标识和主体被互换使用。
有关更多信息,请参阅角色分配概念。
操作
操作定义角色对目标资源具有的特定权限。 操作是通常包括资源类型和描述性名称的字符串,描述性名称详细说明操作授予的权限。 下面是一些常见示例:
说明 | 平面 | |
---|---|---|
Microsoft.DocumentDB/databaseAccounts/listKeys/action |
仅读取帐户密钥 | 控制面板 |
Microsoft.DocumentDB/databaseAccounts/backup/action |
执行备份 | 控制面板 |
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/replace |
完全替换现有项 | 数据平面 |
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery |
执行 NoSQL 查询 | 数据平面 |
操作还可以包含 *
(通配符)字符,因此无需手动详细说明每个特定的子权限。 下面是使用通配符的操作的几个示例:
说明 | |
---|---|
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
对象,该对象可智能地遍历多个选项,以便根据环境查找正确的凭证。 这些身份验证选项包括(按顺序):
- 作为环境变量存储的客户端密码或证书
- Microsoft Entra 工作负载 ID
- 用户分配的或系统分配的托管标识
- 派生自 Visual Studio 设置的 Azure 凭证
- Visual Studio Code 的 Azure 帐户扩展中使用的凭证
- Azure CLI 中的当前凭证
- Azure PowerShell 中的当前凭证
- Azure Developer CLI 中的当前凭证
- 启动系统浏览器进行登录的交互式会话
每个新式 Azure SDK 库都支持其各自的客户端对象或类的构造函数,这些对象或类接受 DefaultAzureCredential
实例或其基类型。
提示
若要使生产代码更易于调试和更具可预测性,一旦应用程序部署完成,可以选择在开发中使用 DefaultAzureCredential
并交换使用更具体的凭证,例如 WorkloadIdentityCredential
或 ManagedIdentityCredential
。 所有这些类都基于许多 Azure SDK 期望作为客户端初始化逻辑的一部分的 TokenCredential
类,从而使来回交换变得很简单。
唯一标识符
Microsoft Entra 中的每个标识都具有唯一标识符。 有时会看到此唯一标识符被称为 id
、objectId
或 principalId
。 创建角色分配时,需要用于分配的标识的唯一标识符。
范围
分配角色时,必须决定要向其授予访问权限的 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>