基于属性的访问控制 (ABAC) 是一种授权系统,它根据与访问请求的安全主体、资源和环境相关联的属性来定义访问。 通过 ABAC,可根据属性向安全主体授予访问资源的权限。 Azure ABAC 是指为 Azure 实现 ABAC。
什么是角色分配条件?
Azure 基于角色的访问控制 (Azure RBAC)
是一个授权系统,可帮助管理谁有权访问 Azure 资源、他们可对这些资源执行哪些操作,以及他们有权访问哪些区域。 在大多数情况下,Azure RBAC 将使用角色定义和角色分配提供所需的访问管理。 但在某些情况下,你可能想要提供更精细的访问管理,或者简化对数百个角色分配的管理。
Azure ABAC 构建在 Azure RBAC 之上,它在特定操作上下文中根据属性添加角色分配条件。 角色分配条件是一项额外检查,你可选择将其添加到角色分配中,来提供更精细的访问控制。 条件会筛选找到作为角色定义和角色分配的一部分而授予的权限。 例如,为了读取对象,你可添加要求对象具有特定标记的条件。 你无法使用条件显式拒绝对特定资源的访问。
为何要使用条件?
使用角色分配条件主要有三个优点:
提供更精细的访问控制
- 角色分配使用带有操作和数据操作的角色定义来向安全主体授予权限。 你可编写条件来对这些权限进行筛选,以提供更精细的访问控制。 还可将条件添加到特定操作。 例如,只有在 Blob 被标记为 Project=Blue 时,才能向 John 授予对订阅中的 Blob 的读取访问权限。
帮助减少角色分配的数量
- 目前,每个 Azure 订阅都有角色分配限制。 某些场景需要数千个角色分配。 必须对所有这些角色分配进行管理。 在这些场景中,你可添加条件来显著减少角色分配数量。
使用具有特定业务含义的属性
- 通过条件,可在访问控制中使用具有特定业务含义的属性。 项目名称、软件开发阶段和分类级别就是这类属性。 这些资源属性的值是动态的,随着用户在团队和项目之间移动而变化。
条件的示例场景
在一些场景中,你可能想要将条件添加到角色分配。 下面是一些示例。
读取访问标记为 Project=Cascade 的 Blob
新的 Blob 必须包含标记 Project=Cascade
现有 Blob 必须至少标记有一个 Project 键或 Program 键
现有 Blob 必须标记有一个 Project 键以及 Cascade、Baker 或 Skagit 值
在名为 blobs-example-container 的容器中读取、写入或删除 Blob
读取访问名为 blobs-example-container 且路径为 readonly 的容器中 Blob
写入访问名为 Contosocorp 且路径为 uploads/contoso 的容器中的 Blob
读取访问标记为 Program=Alpine 且路径为 logs 的 Blob
对带有标记 Project=Baker 的 Blob 的读取访问权限,并且用户具有匹配的属性 Project=Baker
在特定日期/时间范围内对 Blob 进行读取访问。
只能通过专用链接或特定子网对 Blob 进行写入访问。
若要详细了解如何创建这些示例,请参阅
Blob 存储的 Azure 角色分配条件示例
。
可在哪里添加条件?
目前,可将条件添加到包含
Blob 存储或队列存储数据操作
的内置或自定义角色分配。 在与角色分配相同的范围内添加条件。 与角色分配一样,你必须具有添加条件的
Microsoft.Authorization/roleAssignments/write
权限。
以下是可在条件中使用的某些
blob 存储属性
。
Blob 索引标记
Blob 路径
Blob 前缀
加密范围名称
是当前版本
分层命名空间是否已启用
是专用链接
现在 (UTC)(当前日期和时间(协调世界时))
版本 ID
条件是什么样的?
可将条件添加到新的或现有的角色分配。 下面是已在资源组范围分配给名为 Chandra 的用户的
存储 Blob 数据读取者
。 还添加了一个条件,它只允许对标记为 Project=Cascade 的 Blob 进行读取访问。
如果 Chandra 尝试读取没有 Project=Cascade 标记的 Blob,则访问将被阻止。
下面是条件在 Azure 门户中的呈现效果:
下面是条件在代码中的呈现效果:
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
AND NOT
SubOperationMatches{'Blob.List'})
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEqualsIgnoreCase 'Cascade'
若要详细了解条件的格式,请查看
Azure 角色分配条件格式和语法
。
条件功能的状态
条件的某些功能仍为预览版。 下表列出了条件功能的状态:
条件和 Azure AD PIM
还可以使用 Azure AD Privileged Identity Management (Azure AD PIM) 针对 Azure 资源向符合条件的角色分配添加条件。 使用 Azure AD PIM 时,最终用户必须激活符合条件的角色分配,才能获得执行特定操作的权限。 通过使用 Azure AD PIM 中的条件,不仅可使用细致的条件限制用户对资源的访问,还可在 Azure AD PIM 中使用限时设置、审批工作流和审核线索等对资源进行保护。 有关详细信息,请查看
在 Privileged Identity Management 中分配 Azure 资源角色
。
为了更好地理解 Azure RBAC 和 Azure ABAC,可参考以下术语列表。
下面是条件存在的已知问题:
如果使用 Azure AD Privileged Identity Management (PIM) 和
自定义安全属性
,则添加条件时,“主体”不会出现在“属性源”中。
Azure 角色分配条件常见问题解答
Blob 存储的 Azure 角色分配条件示例
教程:使用 Azure 门户添加角色分配条件来限制对 Blob 的访问