問題描述

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)“。

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