屬性型訪問控制 (ABAC) 是一種授權系統,可根據與安全性主體、資源和存取要求環境相關聯的屬性定義存取權。 使用 ABAC,您可以根據屬性授與對資源的安全性主體存取權。 Azure ABAC 是指適用於 Azure 的 ABAC 實作。
什麼是角色指派條件?
Azure 角色型訪問控制 (Azure RBAC) 是一種授權系統,可協助您管理可存取 Azure 資源的人員、這些資源可以執行哪些動作,以及他們可存取的區域。 在大部分情況下,Azure RBAC 會使用角色定義和角色指派來提供所需的存取管理。 不過,在某些情況下,您可能會想要提供更精細的存取管理,或簡化數百個角色指派的管理。
Azure ABAC 會根據特定動作內容中的屬性新增角色指派條件,以在 Azure RBAC 上建立。 角色指派條件是一項額外的檢查,可讓您選擇性地新增至角色指派,以提供更精細的訪問控制。 條件會篩選在角色定義和角色指派中授與的許可權。 例如,您可以新增需要物件具有特定標記才能讀取物件的條件。 您無法使用條件明確地拒絕存取特定資源。
使用 Azure RBAC 和 Azure ABAC 將這兩種存取控制模型的優點整合在一起。 由於 Azure RBAC 與業務邏輯緊密配合,因此更容易實作,而 Azure ABAC 則在某些重要情境中提供更大的彈性。 藉由結合這兩種方法,組織可以達到更複雜的授權層級。
為什麼要使用條件?
使用角色指派條件有三個主要優點:
- 提供更細緻的存取控制 - 角色指派會使用角色定義,並搭配動作和資料動作來授予安全主體權限。 您可以撰寫條件來篩選這些許可權,以取得更精細的訪問控制。 您也可以將條件新增至特定動作。 例如,只有當 Blob 標記為 Project=Blue 時,您才能將訂用帳戶中的 Blob 讀取許可權授予 John。
- 協助減少角色指派數目 - 每個 Azure 訂用帳戶目前都有角色指派限制。 在某些情況下,需要數千個角色指派。 所有這些角色指派都必須受到管理。 在這些案例中,您可能會新增條件,以大幅減少角色指派。
- 使用具有特定商務意義的屬性 - 條件可讓您在訪問控制中使用具有特定商務意義的屬性。 屬性的一些範例包括專案名稱、軟體開發階段和分類層級。 當使用者跨小組和項目移動時,這些資源屬性的值是動態和變更。
條件範例
有幾種情境可能會讓您想要將條件新增到角色指派中。 以下是一些範例。
- 使用 Project=Cascade 標籤讀取 Blob 的存取權
- 新的 Blob 必須包含 Project=Cascade 標記
- 現有的 Blob 必須標記至少一個專案金鑰或程式金鑰
- 現有的 Blob 必須以 Project 索引鍵和 Cascade、Baker 或 Skagit 值標記
- 在名為 blobs-example-container 的容器中讀取、寫入或刪除 Blob
- 具有唯讀路徑的 blobs-example-container 容器中 Blob 的讀取許可權
- 使用 uploads/contososo 路徑寫入名為 Contosocorp 的容器中 Blob 的存取權
- 讀取具有 Program=Alpine 標籤且路徑為 logs 的 Blob 存取權
- 使用 Project=Baker 標籤讀取 Blob 的存取權,且使用者具有相符的屬性 Project=Baker
- 在特定日期/時間範圍內讀取 Blob 的存取權。
- 僅限透過私人連結或特定子網才能對 Blob 進行寫入存取。
如需如何建立這些範例的詳細資訊,請參閱 Blob 記憶體的範例 Azure 角色指派條件。
可以在哪裡新增條件?
目前,條件可以新增至具有 Blob 儲存體或佇列儲存體資料操作的內建或自定義角色指派。 條件會新增至與角色指派相同的範圍。 就像角色指派一樣,您必須具有 Microsoft.Authorization/roleAssignments/write
新增條件的許可權。
您可以在條件中使用以下一些 Blob 儲存屬性 。
- 帳戶名稱
- Blob 索引標籤
- Blob 路徑
- Blob 前置詞
- 容器名稱
- 加密範圍名稱
- 為目前版本
- 階層命名空間是否已啟用
- 為私人連結
- 快照
- UTC 現在 (國際標準時間的目前日期和時間)
- 版本識別碼
條件是什麼樣子?
您可以將條件新增至新的或現有的角色指派。 以下是已指派給名為 Chandra 的使用者並用於資源群組範圍的 儲存體 Blob 資料讀取者 角色。 也已新增條件,只允許具有 Project=Cascade 標籤的 Blob 讀取許可權。
如果 Chandra 嘗試讀取不含 Project=Cascade 標籤的 Blob,則不允許存取。
以下是 Azure 入口網站中條件的外觀:
以下是程式中的條件代碼:
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
AND NOT
SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEqualsIgnoreCase 'Cascade'
)
)
如需條件格式的詳細資訊,請參閱 Azure 角色指派條件格式和語法。
條件功能的狀態
下表列出條件功能的狀態:
特徵 / 功能 | 地位 | 日期 |
---|---|---|
在條件中使用環境屬性 | 加語 | 2024 年 4 月 |
在 Azure 入口網站中使用條件編輯器新增條件 | 加語 | 2022 年 10 月 |
使用 Azure PowerShell、Azure CLI 或 REST API 新增條件 | 加語 | 2022 年 10 月 |
針對 Azure 記憶體資源、存取屬性類型和記憶體帳戶效能層級的特定組合使用 資源和要求屬性 。 如需詳細資訊,請參閱 Azure 記憶體中條件功能的狀態。 | 加語 | 2022 年 10 月 |
在條件中對主體使用自定義安全性屬性 | 加語 | 2023 年 11 月 |
條件設定和 Microsoft Entra PIM 管理
您也可以使用 Microsoft Entra Privileged Identity Management(Microsoft Entra PIM)為 Azure 資源的合格角色指派新增條件。 透過Microsoft Entra PIM,您的終端用戶必須啟用合格的角色指派,才能取得執行特定動作的許可權。 使用 Microsoft Entra PIM 中的條件,不僅可讓您使用精細的條件來限制使用者對資源的存取權,還可以使用 Microsoft Entra PIM,透過時間限制設定、核准工作流程、稽核線索等來保護資源的安全。 如需詳細資訊,請參閱 在 Privileged Identity Management 中指派 Azure 資源角色。
術語
若要進一步瞭解 Azure RBAC 和 Azure ABAC,您可以回到下列字詞清單。
術語 | 定義 |
---|---|
屬性型存取控制 (ABAC) | 授權系統,根據與安全性主體、資源和環境相關聯的屬性來定義存取權。 使用 ABAC,您可以根據屬性授與對資源的安全性主體存取權。 |
Azure ABAC | 是指適用於 Azure 的 ABAC 實作。 |
角色指派條件 | 您可以選擇性地新增至角色指派的額外檢查,以提供更精細的存取控制。 |
屬性 | 在此內容中,Project=Blue 之類的索引鍵/值組,其中 Project 是屬性索引鍵,而 Blue 是屬性值。 屬性和標籤是訪問控制用途的同義字。 |
表達 | 條件中評估為 true 或 false 的語句。 表達式的格式為<屬性><運算子><值>。 |
限制
以下是一些條件的限制。
資源 | 限制 | 註釋 |
---|---|---|
使用可視化編輯器,每個條件的表達式數目 | 5 | 您可以使用程式代碼編輯器新增五個以上的運算式 |
已知問題
以下是條件的已知缺陷:
- 如果您使用 Microsoft Entra 優先權身分識別管理(PIM)和 自定義安全屬性,則在新增條件時,主體 不會出現在 屬性來源 中。