【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 的基于云的标识和访问管理服务,可帮 ...
随机推荐
- JAVAEE_Servlet_20_登录注册功能
实现登录注册功能 注册功能 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import j ...
- Day06_31_接口(Interface)
java 接口(Interface) 接口和抽象类的区别? 子类只能通过extends关键字去继承抽象类(Abstract),子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现 ...
- 【ElasticSearch】ES线上脏数据处理
ES分组 GET index_user_latest/_search { "aggs": { "group_by_tags": { "terms&qu ...
- thinkphp5的extend怎么用?
http://www.newthink.cc/2017/09/13/thinkphp5%E7%9A%84extend%E6%80%8E%E4%B9%88%E7%94%A8%EF%BC%9F/#i-2
- hdu4403暴力搜索
题意: 给你一个数字串,让你在里面添加一个=和若干个+,使等式成立. 思路: lmax最大是15,直接暴搜,无压力,关键是判重,要在答案的时候判重,一开始在进队列之前判的,各种wa ...
- LA3971组装电脑
题意: 你有b块钱,想要组装一台电脑,给你提供一些零件,每种零件提供一个或几个,组装电脑的前提是每种零件只能也必须选择一个,每种零件都有自己的种类,名字,价格,还有品质,要求是在能配成电脑 ...
- Python中sys模块的使用
目录 sys模块 sys.argv() sys.exit(0) sys.path sys.modules sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的 ...
- C#-播放器相关
axWindowsMediaPlayer1.URL= 设置路径 axWindowsMediaPlayer1.Ctlcontrols.play();开始 axWindowsMediaPlayer1.Ct ...
- Windowsw核心编程 第13章 Windows内存结构
第1 3章 Wi n d o w s的内存结构 13.1 进程的虚拟地址空间 每个进程都被赋予它自己的虚拟地址空间.对于 3 2位进程来说,这个地址空间是4 G B,因为3 2位指针可以拥有从0 x ...
- 指定的服务已标记为删除 寒江孤钓<<windows 内核安全编程>> 学习笔记
运行cmd:"sc delete first" 删除我们的服务之后, 再次创建这个服务的时候出现 "指定的服务已标记为删除"的错误, 原因是我们删除服务之前没有 ...