【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?
问题描述
Key Vault (密钥保管库) 能不能针对用户授权实现指定用户只能访问某个或某些特定的key? 如当前有两个用户(User1, User2),在Key Vault中有10个Key,User1只能访问前5个Key,User2只能访问后5个Key。
问题分析
Azure 密钥保管库是一种云服务,用于保护加密密钥和机密(例如证书、连接字符串和密码)。 因为此数据是敏感数据和业务关键数据,所以需要保护对密钥保管库的访问,只允许得到授权的应用程序和用户进行访问。
密钥保管库的访问分为两种:管理平面 和 数据平面。 这两个平面都使用 Azure Active Directory (Azure AD) 来进行身份验证。
- 管理平面:用于管理密钥保管库本身。 此平面中的操作包括创建和删除密钥保管库、检索密钥保管库属性以及更新访问策略。 对于授权,管理平面使用 Azure 基于角色的访问控制 (Azure RBAC),
- 数据平面:用于处理密钥保管库中存储的数据。 可以添加、删除和修改密钥、机密及证书。对于授权,数据平面使用 Key Vault 访问策略和适用于 Key Vault 数据平面操作的 Azure RBAC。
本文的问题,就是解决数据平面中如何实现最小粒度的访问授权。在Key Vault的Access Policy的设置中,两种授权模式的选择分别为: ”Vault Access Policy“ 和 ”Azure role-based access control (RBAC)“。

Vault Access Policy:Key Vault 访问策略适用于保管库级别。 如果授予某个用户创建和删除密钥的权限,该用户可以针对该密钥保管库中的所有密钥执行这些操作。 密钥保管库访问策略不支持粒度、对象级别权限,例如特定的密钥、机密或证书。
Azure role-based access control (RBAC):(2021年4月上线的新功能)Azure 基于角色的访问控制是另一种用于控制对 Azure Key Vault 数据平面的访问权限的权限模型,可在单个密钥保管库上启用。 可以将访问权限的范围限定于订阅、资源组或密钥保管库级别,或者限定于单个密钥、机密或证书。
Azure RBAC 权限模型是排他的,一旦设置,保管库访问策略就会变为非活动状态。 Azure Key Vault 定义了一组 Azure 内置角色,它们包含用于访问密钥、机密或证书的通用权限集。
问题答案
根据对Vault Access Policy和 Azure RBAC的权限模式分析, 问题的答案是:
1) 当使用Vault Access Policy时,是没有办法实现不同步用户访问不同Key的需求。只能通过变通(workaround)的方式,把10个Key分别存储到两个不同的Key Vault中,User 1和User 2单独访问各自的Key Vault。

(创建两个Key Vault服务,前5个Key保存在服务1中,只给User1赋权限访问,后5个Key保存在第二个Key Vault 服务中,并只给User2赋权限)
2)当使用Azure RBAC时,可以实现对单个Key进行独立的权限控制。进入当个的Keys查看页面,点击 Access control (IAM), 为单独的用户,或者组织赋予 ”Key Vault Reader“的角色。

当用户访问Key Vault中的key信息时,就只能查看到单位为他赋予了读取权限的Key。

参考资料
保护对密钥保管库的访问:
用于 Key Vault 数据平面操作的 Azure 内置角色:https://docs.azure.cn/zh-cn/key-vault/general/rbac-guide?tabs=azure-cli#azure-built-in-roles-for-key-vault-data-plane-operations
使用 Azure 门户分配 Key Vault 访问策略:https://docs.azure.cn/zh-cn/key-vault/general/assign-access-policy-portal
【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?的更多相关文章
- Azure Kay Vault(一).NET Core Console App 获取密钥保管库中的机密信息
一,引言 Azure 密钥保管库用于存储敏感信息,例如链接字符串,密码,API 密钥等.我们无法直接从Azure 密钥库中访问机密!那么我们如何才能访问应用程序中的机密信息?比如,在我们的实际项目中, ...
- C标准函数库中获取时间与日期、对时间与日期数据操作及格式化
表示时间的三种数据类型[编辑] 日历时间(calendar time),是从一个标准时间点(epoch)到现在的时间经过的秒数,不包括插入闰秒对时间的调整.开始计时的标准时间点,各种编译器一般使用19 ...
- Azure Key Vault (1) 入门
<Windows Azure Platform 系列文章目录> 为什么要使用Azure Key Vault? 我们假设在微软云Azure上有1个场景,在Windows VM里面有1个.NE ...
- Azure Key Vault(二)- 入门简介
一,引言 在介绍 Azure Key Vault 之前,先简单介绍一下 HSM(硬件安全模块). -------------------- 我是分割线 -------------------- 1,什 ...
- 【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
问题描述 创建一个Java Console程序,用于使用Azure Key Vault Secret.在VS Code中能正常Debug,但是通过mvn clean package打包为jar文件后, ...
- 【Azure Developer】使用 CURL 获取 Key Vault 中 Secrets 中的值
问题描述 在使用CURL通过REST API获取Azure Key Vaualt的Secrets值,提示Missing Token, 问如何来生成正确的Token呢? # curl 命令 curl - ...
- 【应用服务 App Service】App Service证书导入,使用Key Vault中的证书
问题描述 正常情况下,如果需要为应用服务安装SSL证书,可以在证书准备好的情况,通过门户上传即可,详细步骤可以参考微软官方文档(在 Azure 应用服务中添加 TLS/SSL 证书:https://d ...
- 第一个lucene程序,把一个信息写入到索引库中、根据关键词把对象从索引库中提取出来、lucene读写过程分析
新建一个Java Project :LuceneTest 准备lucene的jar包,要加入的jar包至少有: 1)lucene-core-3.1.0.jar (核心包) 2) lucene- ...
- 【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)
关键字说明 什么是 Azure Active Directory?Azure Active Directory(Azure AD, AAD) 是 Microsoft 的基于云的标识和访问管理服务,可帮 ...
随机推荐
- JavaScript遍历对象方法总结
前言 本篇内容将按照下图展开: 遍历Object Object最常见的遍历方法方法就是使用for...in...,但其有一定的局限性,比如只能遍历可枚举属性.虽然Object无法直接使用for循环和f ...
- Salesforce 集成篇零基础学习(一)Connected App
本篇参考: https://zhuanlan.zhihu.com/p/89020647 https://trailhead.salesforce.com/content/learn/modules/c ...
- POJ 2752 同一个串的前后串
题解东北赛回来再补 #include<stdio.h> #include<string.h> int next[500000]; int ans[500000]; char s ...
- URL分发器(视图层)
目录 视图 URL映射 path函数 URL中传入参数 普通传入参数 变量形式传入参数 URL中包含另一个urls模块 URL命名.URL反转.应用命名空间 视图 视图一般都写在 app 的 vi ...
- PowerShell-3.多线程
$start = Get-Date $task1 = { $vUrl = 'http://img.mottoin.com/wp-content/uploads/2016/09/5-25.png' $v ...
- Day003 巧妙验证短路运算
&&的短路运算 条件1&&条件2...&&条件n,程序会先判断条件1,如果条件1为false,则不判断后面的条件,直接返回false 怎么判断程序到底有 ...
- Spring的配置文件 (SSM maven项目)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 你管这破玩意叫CPU?
每次回家开灯时你有没有想过,用你按的开关实际上能打造出 复杂的 CPU来,只不过需要的数量可能比较多,也就几十亿个吧. 伟大的发明 过去200年人类最重要的发明是什么?蒸汽机?电灯?火箭?这些可能都不 ...
- Mybatis学习之自定义持久层框架(六) 自定义持久层框架:完善CRUD方法并进行测试
前言 没想到会等到半年以后才来写这篇文章,我已经不记得当初自己想要在这篇文章中写什么了,还好有一些零散的笔记留着,就对照着上一篇文章及零散的笔记,把内容给补充完吧. 完善CRUD方法 完善Defaul ...
- JavaSE全部学习笔记——集合