問題描述
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