共用方式為


Azure Blob 儲存體中 Azure 角色指派條件的安全性考量

若要使用 Azure 屬性型存取控制 (Azure ABAC) 以充分保護資源,您也必須保護 Azure 角色指派條件中使用的屬性。 比方說,如果您的條件是以檔案路徑為基礎,當主體具有不受限制的權限可重新命名檔案路徑時,您應該注意存取權可能會遭到入侵。

本文描述您應考慮角色指派條件的安全性考量。

重要

Azure 屬性型訪問控制 (Azure ABAC) 已正式推出,可用來控制對 Azure Blob 儲存體、Azure Data Lake 儲存體 Gen2 和 Azure 佇列的存取,以及使用request標準和進階記憶體帳戶效能層級中的、 resourceenvironmentprincipal 屬性。 容器元數據資源屬性和清單 Blob 包含要求屬性目前處於預覽狀態。 如需 Azure 儲存體 ABAC 的完整功能狀態資訊,請參閱 Azure 儲存體中條件功能的狀態

請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。

使用其他授權機制

只有使用 Azure RBAC 進行授權時,才會評估角色指派條件。 如果您允許使用替代的授權方法進行存取,則可以略過這些條件:

同樣地,使用儲存體帳戶中的存取控制清單 (ACL) 搭配階層命名空間 (HNS) 來授與存取權時,不會評估條件。

您可以停用儲存體帳戶的共用金鑰授權 ,以防止共用金鑰、帳戶層級 SAS 和服務層級 SAS 授權。 由於使用者委派 SAS 相依於 Azure RBAC,因此在使用這種授權方法時,會評估角色指派條件。

保護條件中所使用的儲存屬性

Blob 路徑

使用 Blob 路徑作為條件的 @Resource 屬性時,您也應該在使用具有階層命名空間的帳戶時,防止使用者重新命名 Blob 以取得檔案的存取權。 例如,如果您想要撰寫以 Blob 路徑為基礎的條件,您也應該將使用者的存取權限制為下列動作:

動作 描述
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/move/action 此動作可讓客戶使用 Path Create API 來重新命名檔案。
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 此動作可讓您存取各種檔案系統和路徑作業。

Blob 索引標籤

Blob 索引標籤可作為儲存體中條件的自由格式屬性。 如果您使用這些標籤來撰寫任何存取條件,您也必須保護標籤本身。 具體而言,Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write DataAction 可讓使用者修改儲存物件上的標籤。 您可以限制這個動作,以防止使用者操作標籤金鑰或值來取得未經授權物件的存取權。

此外,如果在條件中使用 Blob 索引標籤,則如果資料和相關的索引標籤在個別作業中更新,資料可能容易受到攻擊。 您可以在 Blob 寫入作業上使用 @Request 條件,以要求在相同的更新作業中設定索引標籤。 這種方法可協助在資料寫入儲存體時便能保護資料。

複製 Blob 上的標籤

依預設,當您使用複製 Blob API 或其任何變體時,不會從來源 Blob 將 Blob 索引標籤複製到目的地。 若要在複製時保留 Blob 的存取範圍,您也應該複製標籤。

快照集上的標籤

Blob 快照集上的標籤無法修改。 因此,您必須在建立快照集之前,先更新 Blob 上的標籤。 如果您修改基礎 Blob 上的標籤,則其快照集上的標籤會繼續擁有先前的值。

如果在建立快照集之後修改基礎 Blob 上的標籤,則基礎 Blob 和快照集的存取範圍可能會不同。

Blob 版本上的標籤

透過放置 Blob放置 Block 清單複製 Blob API 建立 Blob 版本時,不會複製 Blob 索引標籤。 您可以透過這些 API 的標頭指定標籤。

您可以在目前的基礎 Blob 和每個 Blob 版本上個別設定標籤。 當您修改基礎 Blob 上的標籤時,不會更新先前版本上的標籤。 如果您想要使用標籤變更 Blob 的存取範圍及其所有版本,您必須更新每個版本的標籤。

查詢和篩選版本與快照集的限制

當您使用標籤查詢和篩選容器中的 Blob 時,回應中只會包含基礎 Blob。 不包括具有所要求金鑰和值的 Blob 版本或快照集。

角色和權限

如果您使用的是 Azure 內建角色的角色指派條件,您應該仔細檢閱角色授與主體的所有權限。

繼承的角色指派

角色指派可以針對管理群組、訂用帳戶、資源群組、儲存體帳戶或容器進行設定,並依指定的順序繼承於每個層級。 Azure RBAC 具有加總模型,因此有效權限是每個層級的角色指派總和。 如果主體具有透過多個角色指派指派給他們的相同權限,則會針對每個層級的每個指派個別評估使用該權限作業的存取權。

由於條件會實作為角色指派的條件,因此任何無條件的角色指派都可讓使用者略過該條件。 假設您將儲存體 Blob 資料參與者角色指派給儲存體帳戶和訂用帳戶的使用者,但只將條件新增至儲存體帳戶的指派。 結果會是使用者可透過訂用帳戶層級的角色指派,無限制地存取儲存體帳戶。

因此,您應該針對跨資源階層的所有角色指派一致地套用條件。

其他考量

寫入 Blob 的條件作業

寫入 Blob 的許多作業都需要 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/writeMicrosoft.Storage/storageAccounts/blobServices/containers/blobs/add/action 權限。 內建角色 (例如儲存體 Blob 資料擁有者儲存體 Blob 資料參與者) 會將這兩個權限授與安全性主體。

當您在這些角色上定義角色指派條件時,應在這兩個權限上使用相同的條件,以確保寫入作業的存取限制一致。

複製 Blob 與從 URL 複製 Blob 的行為

針對複製 Blob從 URL 作業複製 Blob,只會針對目的地 Blob 評估使用 Blob 路徑作為 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write 動作上屬性的 @Request 條件及其子操作。

針對來源 Blob 的條件,系統會評估 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read 動作上的 @Resource 條件。

另請參閱