问题描述

Key Vault (​​密钥保管库​​) 能不能针对用户授权实现指定用户只能访问某个或某些特定的key? 如当前有两个用户(User1, User2),在Key Vault中有10个Key,User1只能访问前5个Key,User2只能访问后5个Key。

 

问题分析

Azure 密钥保管库是一种云服务,用于保护加密密钥和机密(例如证书、连接字符串和密码)。 因为此数据是敏感数据和业务关键数据,所以需要保护对密钥保管库的访问,只允许得到授权的应用程序和用户进行访问。

 

密钥保管库的访问分为两种:管理平面 和 数据平面。 这两个平面都使用 Azure Active Directory (Azure AD) 来进行身份验证。

本文的问题,就是解决数据平面中如何实现最小粒度的访问授权。在Key Vault的Access Policy的设置中,两种授权模式的选择分别为: ”Vault Access Policy“ 和 ”Azure role-based access control (RBAC)“。

【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?_访问权限

 

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。

【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?_访问权限_02

(创建两个Key Vault服务,前5个Key保存在服务1中,只给User1赋权限访问,后5个Key保存在第二个Key Vault 服务中,并只给User2赋权限)

 

2)当使用Azure RBAC时,可以实现对单个Key进行独立的权限控制。进入当个的Keys查看页面,点击 Access control (IAM), 为单独的用户,或者组织赋予 ”Key Vault Reader“的角色。

【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?_访问权限_03

 

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

【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?_访问权限_04

 

参考资料

保护对密钥保管库的访问

用于 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

 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!