什麼是 Azure 屬性型存取控制 (Azure ABAC)?

屬性型訪問控制 (ABAC) 是一種授權系統,可根據與安全性主體、資源和存取要求環境相關聯的屬性定義存取權。 使用 ABAC,您可以根據屬性授與對資源的安全性主體存取權。 Azure ABAC 是指適用於 Azure 的 ABAC 實作。

什麼是角色指派條件?

Azure 角色型訪問控制 (Azure RBAC) 是一種授權系統,可協助您管理可存取 Azure 資源的人員、這些資源可以執行哪些動作,以及他們可存取的區域。 在大部分情況下,Azure RBAC 會使用角色定義和角色指派來提供所需的存取管理。 不過,在某些情況下,您可能會想要提供更精細的存取管理,或簡化數百個角色指派的管理。

Azure ABAC 會根據特定動作內容中的屬性新增角色指派條件,以在 Azure RBAC 上建立。 角色 指派條件 是一項額外的檢查,可讓您選擇性地新增至角色指派,以提供更精細的訪問控制。 條件會篩選在角色定義和角色指派中授與的許可權。 例如,您可以新增需要物件具有特定標記才能讀取物件的條件。 您無法使用條件明確地拒絕存取特定資源。

為什麼要使用條件?

使用角色指派條件有三個主要優點:

  • 提供更細緻的訪問控制 - 角色指派會使用角色定義搭配動作和數據動作來授與安全性主體許可權。 您可以撰寫條件來篩選這些許可權,以取得更精細的訪問控制。 您也可以將條件新增至特定動作。 例如,只有當 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 卷標和記錄路徑讀取 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 入口網站 中的樣子:

Azure 入口網站 中條件編輯器的螢幕快照,其中顯示具有 Blob 索引標籤的組建表達式區段。

以下是程式碼中的條件範例:

(
    (
        !(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 角色指派條件格式和語法

條件功能的狀態

下表列出條件功能的狀態:

功能 狀態 Date
在條件中使用環境屬性 GA 2024 年 4 月
在 Azure 入口網站 中使用條件編輯器新增條件 GA 2022 年 10 月
使用 Azure PowerShellAzure CLIREST API 新增條件 GA 2022 年 10 月
針對 Azure 記憶體資源、存取屬性類型和記憶體帳戶效能層級的特定組合使用資源和要求屬性 。 如需詳細資訊,請參閱 Azure 儲存體 中的條件功能狀態。 GA 2022 年 10 月
在條件中的主體上使用自定義安全性屬性 GA 2023 年 11 月

條件和 Microsoft Entra PIM

您也可以使用適用於 Azure 資源的 Microsoft Entra Privileged Identity Management(Microsoft Entra PIM),將條件新增至合格的角色指派。 使用 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 是屬性值。 屬性和標籤是訪問控制用途的同義字。
expression 條件中評估為 true 或 false 的語句。 表達式具有屬性值<>>><的格式。<

限制

以下是條件的一些限制。

資源 限制 備註
使用可視化編輯器,每個條件的表達式數目 5 您可以使用程式代碼編輯器新增五個以上的運算式

已知問題

以下是條件的已知問題:

  • 如果您使用 Microsoft Entra Privileged Identity Management (PIM) 和 自定義安全性屬性則新增條件時,主體 不會出現在 屬性來源 中。

下一步