本文列出控制 Azure Blob 記憶體存取權的角色指派條件的一些範例。
這很重要
Azure 屬性型存取控制 (Azure ABAC) 已正式發行 (GA),可使用標準和進階儲存體帳戶效能層級中的 request、resource、environment 和 principal 屬性,控制 Azure Blob 儲存體、Azure Data Lake Storage Gen2 和 Azure 佇列的存取權。 目前,階層命名空間的清單 Blob 包含要求屬性和快照集要求屬性都處於預覽。 如需 Azure 儲存體 ABAC 的完整功能狀態資訊,請參閱 Azure 儲存體中條件功能的狀態。
請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。
先決條件
如需新增或編輯角色指派條件的必要條件相關資訊,請參閱條件必要要件。
本文中的範例摘要
使用下表快速找出符合 ABAC 案例的範例。 此資料表包含案例的簡短描述,加上範例中各來源使用的屬性清單 (環境、主體、要求和資源)。
本節包含涉及 Blob 索引標籤的範例。
這很重要
雖然相容性目前支援 Read content from a blob with tag conditions 子作業,但在 ABAC 功能預覽期間會實作條件,該子作業已淘汰,且 Microsoft 建議改用「Read a blob」動作。
在 Azure 入口網站中設定 ABAC 條件時,您可能會看到「已淘汰:使用標籤條件讀取 Blob 中的內容」。 Microsoft 建議移除作業,並將其取代為 Read a blob 動作。
如果您正在撰寫自己的條件,其中想要依標籤條件限制讀取存取權,請參閱範例:使用 Blob 索引標籤讀取 Blob。
範例:讀取具有 Blob 索引標籤的 Blob
此條件可讓使用者讀取 Blob,其 Blob 索引標記索引鍵為 Project 且值為 Cascade。 不允許嘗試存取不含此索引鍵/值標記的 Blob。
若要讓此條件對安全性主體有效,您必須將其新增至包含下列動作的所有角色指派:
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增,例如儲存 Blob 資料擁有者。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 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$>] StringEquals 'Cascade'
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據檢查 Blob 索引標籤的運算式進一步加以評估。
如果用戶嘗試執行在指派角色中不受條件限制的動作,!(ActionMatches)則會評估為 true,而整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "((!(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`$>] StringEquals 'Cascade'))"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
以下是測試此條件的方法。
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
Get-AzStorageBlob -Container <containerName> -Blob <blobName> -Context $bearerCtx
範例:新的 Blob 必須包含 Blob 索引標記
此條件要求任何新的 Blob 都必須包含 Project 的 Blob 索引標籤 索引鍵,以及 Cascade 的值。
有兩個動作可讓您建立新的 Blob,因此您必須以兩者為目標。 您必須將此條件新增至包含下列其中一個動作的任何角色指派:
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增,例如儲存體 Blob 資料擁有者。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'})
)
OR
(
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'
)
)
如果用戶試圖在其指派角色中執行一項動作,而該動作不受條件限制,則!(ActionMatches)評估為 true,且整體條件評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'})) OR (@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade'))"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
以下是測試此條件的方法。
$localSrcFile = # path to an example file, can be an empty txt
$ungrantedTag = @{'Project'='Baker'}
$grantedTag = @{'Project'='Cascade'}
# Get new context for request
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
# try ungranted tags
$content = Set-AzStorageBlobContent -File $localSrcFile -Container example2 -Blob "Example2.txt" -Tag $ungrantedTag -Context $bearerCtx
# try granted tags
$content = Set-AzStorageBlobContent -File $localSrcFile -Container example2 -Blob "Example2.txt" -Tag $grantedTag -Context $bearerCtx
範例:現有的 Blob 必須有 Blob 索引標籤鍵
此條件需要以至少一個允許的 Blob 索引標記索引鍵來標記任何現有的 Blob:Project 或 Program。 此條件適用於將控管應用於現有 Blob。
有兩個動作可讓您更新現有 Blob 上的標籤,因此您必須以兩者為目標。 您必須將此條件新增至包含下列其中一個動作的任何角色指派:
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增,例如儲存體 Blob 資料擁有者。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write'})
)
OR
(
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags&$keys$&] ForAllOfAnyValues:StringEquals {'Project', 'Program'}
)
)
如果用戶嘗試在指派角色中執行一個動作,而該動作 未 受到條件限制,!(ActionMatches) 便會評估為 true,而整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write'})) OR (@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags&`$keys`$&] ForAllOfAnyValues:StringEquals {'Project', 'Program'}))"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
以下是測試此條件的方法。
$localSrcFile = # path to an example file, can be an empty txt
$ungrantedTag = @{'Mode'='Baker'}
$grantedTag = @{'Program'='Alpine';'Project'='Cascade'}
# Get new context for request
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
# try ungranted tags
$content = Set-AzStorageBlobContent -File $localSrcFile -Container example3 -Blob "Example3.txt" -Tag $ungrantedTag -Context $bearerCtx
# try granted tags
$content = Set-AzStorageBlobContent -File $localSrcFile -Container example3 -Blob "Example3.txt" -Tag $grantedTag -Context $bearerCtx
範例:現有的 Blob 必須有 Blob 索引標記索引鍵和值
此條件需要有任何現有的 Blob 具有 Blob 索引標記索引鍵 Project,以及值 Cascade、Baker 或 Skagit。 此條件適用於將治理新增至現有的 Blob。
有兩個動作可讓您更新現有 Blob 上的標籤,因此您必須以兩者為目標。 您必須將此條件新增至包含下列其中一個動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增,例如儲存體 Blob 資料擁有者。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write'})
)
OR
(
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags&$keys$&] ForAnyOfAnyValues:StringEquals {'Project'}
AND
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'}
)
)
如果用戶嘗試在條件未限制的指派角色中執行動作,!(ActionMatches) 則會評估為 true,而整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write'})) OR (@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags&`$keys`$&] ForAnyOfAnyValues:StringEquals {'Project'} AND @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'}))"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
以下是測試此條件的方法。
$localSrcFile = <pathToLocalFile>
$ungrantedTag = @{'Project'='Alpine'}
$grantedTag1 = @{'Project'='Cascade'}
$grantedTag2 = @{'Project'='Baker'}
$grantedTag3 = @{'Project'='Skagit'}
# Get new context for request
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
# try ungranted tags
Set-AzStorageBlobTag -Container example4 -Blob "Example4.txt" -Tag $ungrantedTag -Context $bearerCtx
# try granted tags
Set-AzStorageBlobTag -Container example4 -Blob "Example4.txt" -Tag $grantedTag1 -Context $bearerCtx
Set-AzStorageBlobTag -Container example4 -Blob "Example4.txt" -Tag $grantedTag2 -Context $bearerCtx
Set-AzStorageBlobTag -Container example4 -Blob "Example4.txt" -Tag $grantedTag3 -Context $bearerCtx
Blob 容器名稱或路徑
本節包含範例,示範如何根據容器名稱或 Blob 路徑限制對物件的存取。
範例:在具名容器中讀取、寫入或刪除 Blob
此條件可讓使用者讀取、寫入或刪除名為 blobs-example-container 的記憶體容器中的 Blob。 此條件適用於與訂用帳戶中的其他用戶共用特定記憶體容器。
現有 Blob 的讀取、寫入和刪除涉及五個操作。 您必須將此條件新增至包含下列其中一個動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增,例如儲存體 Blob 數據擁有者。 如果此條件包含的儲存帳戶已啟用階層式命名空間,或未來可能啟用,請新增。 |
此條件中不會使用子作業,因為只有在根據標記撰寫條件時,才需要子作業。

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料擁有者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'
)
)
儲存體 Blob 資料參與者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'
)
)
如果用戶嘗試在指定角色中執行不受條件限制的動作,則 !(ActionMatches) 會評估為 true,而整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
以下是測試此條件的方法。
$localSrcFile = <pathToLocalFile>
$grantedContainer = "blobs-example-container"
$ungrantedContainer = "ungranted"
# Get new context for request
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
# Ungranted Container actions
$content = Set-AzStorageBlobContent -File $localSrcFile -Container $ungrantedContainer -Blob "Example5.txt" -Context $bearerCtx
$content = Get-AzStorageBlobContent -Container $ungrantedContainer -Blob "Example5.txt" -Context $bearerCtx
$content = Remove-AzStorageBlob -Container $ungrantedContainer -Blob "Example5.txt" -Context $bearerCtx
# Granted Container actions
$content = Set-AzStorageBlobContent -File $localSrcFile -Container $grantedContainer -Blob "Example5.txt" -Context $bearerCtx
$content = Get-AzStorageBlobContent -Container $grantedContainer -Blob "Example5.txt" -Context $bearerCtx
$content = Remove-AzStorageBlob -Container $grantedContainer -Blob "Example5.txt" -Context $bearerCtx
範例:具有路徑的具名容器中 Blob 的讀取
此條件允許對名為 blobs-example-container 的儲存體容器 (具有 Blob 路徑為 readonly/*) 的唯讀存取。 此條件適用於共用記憶體容器的特定部分,以便與訂用帳戶中的其他使用者共用讀取存取權。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增,例如儲存 Blob 資料擁有者。 新增此條件中包含的儲存帳戶是否已啟用階層式命名空間,或者未來可能會啟用。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料擁有者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'
AND
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'
)
)
儲存體 Blob 資料讀取者、 儲存體 Blob 資料寫入者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'
AND
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但所有其他讀取操作則進一步根據檢查容器名稱和路徑的表達式進行評估。
如果用戶嘗試執行指派角色中的動作,而該動作並未受條件限制,則 !(ActionMatches) 評估為 true,整體條件也會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' AND @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'))"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
以下是測試此條件的方法。
$grantedContainer = "blobs-example-container"
# Get new context for request
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
# Try to get ungranted blob
$content = Get-AzStorageBlobContent -Container $grantedContainer -Blob "Ungranted.txt" -Context $bearerCtx
# Try to get granted blob
$content = Get-AzStorageBlobContent -Container $grantedContainer -Blob "readonly/Example6.txt" -Context $bearerCtx
範例:具有路徑的具名容器中 Blob 的讀取或清單
此條件允許對名為 blobs-example-container 的儲存容器進行讀取和清單存取,其 Blob 路徑為 readonly/*。 條件 #1 適用於排除清單 Blob 的讀取動作。 條件 #2 適用於清單 Blob。 此條件適用於共用記憶體容器的特定部分,以便與訂用帳戶中的其他使用者共用讀取或列出存取權。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增,例如儲存體 Blob 資料擁有者。 如果此條件中包含的儲存體帳戶已啟用階層命名空間,或未來可能啟用該空間,請新增。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
備註
Azure 入口網站會使用 prefix='' 從容器的根目錄列出 Blob 的清單。 當使用 StringStartsWith 'readonly/' 前置詞,並將條件新增至清單 Blob 作業之後,目標使用者將無法從容器的根目錄列出Azure 入口網站中的 Blob。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料擁有者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'
AND
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringStartsWith 'readonly/'
)
)
AND
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND SubOperationMatches{'Blob.List'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'
AND
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:prefix] StringStartsWith 'readonly/'
)
)
儲存體 Blob 資料讀者、儲存體 Blob 資料參與者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'
AND
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringStartsWith 'readonly/'
)
)
AND
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'
AND
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:prefix] StringStartsWith 'readonly/'
)
)
如果用戶嘗試執行指派角色中不受條件限制的動作,!(ActionMatches) 評估為 true,而整體條件也評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
範例:透過路徑將 Blob 寫入具名容器中
此條件可讓合作夥伴(Microsoft Entra 來賓使用者)將檔案放入名為 Contosocorp 且路徑為 uploads/contoso/*的記憶體容器中。 此條件適用於允許其他使用者將數據放入記憶體容器中。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義中包含此動作,例如儲存體 Blob 資料擁有者,則新增。 如果此條件包含的儲存帳戶已啟用階層式命名空間,或未來可能啟用,請新增。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料擁有者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'contosocorp'
AND
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'uploads/contoso/*'
)
)
儲存體 Blob 資料參與者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'contosocorp'
AND
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'uploads/contoso/*'
)
)
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'}) AND !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'contosocorp' AND @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'uploads/contoso/*'))"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
以下是測試此條件的方法。
$grantedContainer = "contosocorp"
$localSrcFile = <pathToLocalFile>
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
# Try to set ungranted blob
$content = Set-AzStorageBlobContent -Container $grantedContainer -Blob "Example7.txt" -Context $bearerCtx -File $localSrcFile
# Try to set granted blob
$content = Set-AzStorageBlobContent -Container $grantedContainer -Blob "uploads/contoso/Example7.txt" -Context $bearerCtx -File $localSrcFile
範例:讀取具有 Blob 索引標籤與路徑的 Blob
此條件可讓使用者讀取 Blob,其 Blob 索引標籤 的索引鍵為 Program,值為 Alpine,且 Blob 路徑為 logs*。 Blob 路徑 logs* 也包含 Blob 名稱。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Program<$key_case_sensitive$>] StringEquals 'Alpine'
)
)
AND
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'logs*'
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據檢查 Blob 索引標籤和路徑的運算式進一步加以評估。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Program<`$key_case_sensitive`$>] StringEquals 'Alpine')) AND ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'logs*'))"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
以下是測試此條件的方法。
$grantedContainer = "contosocorp"
# Get new context for request
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
# Try to get ungranted blobs
# Wrong name but right tags
$content = Get-AzStorageBlobContent -Container $grantedContainer -Blob "AlpineFile.txt" -Context $bearerCtx
# Right name but wrong tags
$content = Get-AzStorageBlobContent -Container $grantedContainer -Blob "logsAlpine.txt" -Context $bearerCtx
# Try to get granted blob
$content = Get-AzStorageBlobContent -Container $grantedContainer -Blob "logs/AlpineFile.txt" -Context $bearerCtx
此條件可讓使用者讀取具有特定元數據索引鍵/值組之 Blob 容器中的 Blob。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
Azure 入口網站中條件編輯器的螢幕擷取畫面,顯示在具有特定中繼資料的容器中讀取 Blob 的操作。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料讀者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/metadata:testKey] StringEquals 'testValue'
)
)
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "( `
( `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}) `
) `
OR `
( `
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/metadata:testKey] StringEquals 'testValue' `
) `
)"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
此條件可讓使用者在具有特定元數據索引鍵/值組的 Blob 容器中寫入或刪除 Blob。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete |
|
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
Azure 入口網站中的條件編輯器螢幕快照,顯示具有特定元數據的容器中的 Blob 寫入和刪除操作。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料參與者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/metadata:testKey] StringEquals 'testValue'
)
)
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下是使用 Azure PowerShell 新增此條件的方法。
$condition = "( `
( `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'}) `
AND `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'}) `
) `
OR `
( `
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/metadata:testKey] StringEquals 'testValue' `
) `
) `
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
Blob 版本或 Blob 快照集
本節包含範例,示範如何根據 Blob 版本或快照集限制對物件的存取。
範例:只讀目前的 Blob 版本
此條件可讓使用者僅能閱讀目前的 Blob 版本。 用戶無法讀取其他 Blob 版本。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料擁有者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:isCurrentVersion] BoolEquals true
)
)
儲存體 Blob 資料讀者、儲存體 Blob 資料參與者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:isCurrentVersion] BoolEquals true
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據檢查版本的運算式進一步加以評估。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
範例:讀取目前的 Blob 版本和特定的 Blob 版本
此條件讓使用者讀取目前的 Blob 版本,以及具有版本識別碼為 2022-06-01T23:38:32.8883645Z 的 Blob。 用戶無法讀取其他 Blob 版本。 版本標識碼屬性僅適用於未啟用階層命名空間的記憶體帳戶。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T23:38:32.8883645Z'
OR
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:isCurrentVersion] BoolEquals true
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據檢查版本資訊的運算式進一步加以評估。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
範例:刪除舊的 Blob 版本
此條件可讓使用者刪除早於 06/01/2022 的 Blob 版本,以執行清除。 版本標識碼屬性僅適用於未啟用階層命名空間的記憶體帳戶。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action |
|

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action'})
)
OR
(
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeLessThan '2022-06-01T00:00:00.0Z'
)
)
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
範例:讀取目前的 Blob 版本和所有 Blob 快照
此條件可讓使用者讀取目前的 Blob 版本和任何 Blob 快照集。 版本標識碼屬性僅適用於未啟用階層命名空間的記憶體帳戶。 快照屬性適用於未啟用階層命名空間的儲存體帳戶,而對於已啟用階層命名空間的儲存體帳戶,目前則處於預覽狀態。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料擁有者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
)
OR
(
Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
OR
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:isCurrentVersion] BoolEquals true
)
)
儲存體 Blob 資料讀者、儲存體 Blob 資料參與者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
OR
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:isCurrentVersion] BoolEquals true
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據檢查版本和快照集資訊的運算式進一步加以評估。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
此條件可讓使用者列出容器中的 Blob,並包含中繼資料、快照集和版本資訊。 列出 Blob 包含屬性可供未啟用階層命名空間的儲存體帳戶使用。
備註
清單 Blob 包含是要求屬性,而且可在呼叫 List Blob 作業時允許或限制 參數中的include值來運作。 參數中的 include 值會與使用 交叉產品比較運算子的條件中指定的值進行比較。 如果比較為 true,則允許 List Blobs 要求。 如果比較評估為 false,則會拒絕 List Blobs 要求。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料讀者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND SubOperationMatches{'Blob.List'})
)
OR
(
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:include] ForAllOfAnyValues:StringEqualsIgnoreCase {'metadata', 'snapshots', 'versions'}
)
)
在此範例中,子作業為 Blob.List 時,條件會限制讀取動作。 這表示會針對檢查include值的表達式進一步評估 List Blob 作業,但允許所有其他讀取動作。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
當請求中包含元數據時,此條件會限制使用者列出 Blob。 列出 Blob 包含屬性可供未啟用階層命名空間的儲存體帳戶使用。
備註
清單 Blob 包含是要求屬性,而且可在呼叫 List Blob 作業時允許或限制 參數中的include值來運作。 參數中的 include 值會與使用 交叉產品比較運算子的條件中指定的值進行比較。 如果比較的結果為 true,則允許 List Blobs 要求。 如果比較結果為假,則會拒絕List Blobs請求。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料讀者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND SubOperationMatches{'Blob.List'})
)
OR
(
@Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:include] ForAllOfAllValues:StringNotEquals {'metadata'}
)
)
在此範例中,子作業為 Blob.List 時,條件會限制讀取動作。 這表示會針對檢查include值的表達式進一步評估 List Blob 作業,但允許所有其他讀取動作。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
階層式命名空間
本節包含範例,說明如何根據記憶體帳戶是否啟用階層命名空間來限制對物件的存取。
範例:啟用階層命名空間的唯讀儲存帳戶
此條件可讓使用者只讀取已啟用 階層命名空間 的記憶體帳戶中的 Blob。 此條件僅適用於資源群組範圍或以上層級。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料擁有者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true
)
)
儲存體 Blob 資料讀者、儲存體 Blob 資料參與者
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據檢查階層命名空間的運算式進一步加以評估。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
加密範圍
本節包含範例,示範如何使用已核准的加密範圍來限制對物件的存取。
範例:讀取具有特定加密範圍的 Blob 物件
此條件可讓使用者讀取以加密範圍 validScope1 或 validScope2加密的 Blob。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據檢查加密範圍的運算式進一步加以評估。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
範例:具名儲存體帳戶中具有特定加密範圍的讀取或寫入 Blob
此條件可讓使用者在名為 sampleaccount 的記憶體帳戶中讀取或寫入 Blob,並以加密範圍 ScopeCustomKey1加密。 如果未使用 ScopeCustomKey1 將 Blob 加密或解密,則要求會傳回禁止。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |
備註
由於不同儲存帳戶的加密範圍可能不同,因此建議搭配storageAccounts:name屬性和encryptionScopes:name屬性來限制允許的特定加密範圍。

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts:name] StringEquals 'sampleaccount'
AND
@Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'ScopeCustomKey1'}
)
)
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
主體屬性
本節包含範例,示範如何根據自定義安全性主體限制對物件的存取。
如果使用者具有符合 Blob 索引標記的自訂安全性屬性,則此條件允許對 Blob 的讀取或寫入存取權。
例如,如果 Brenda 具有 屬性 Project=Baker,則她只能讀取或寫入具有 Blob 索引標記的 Project=Baker Blob。 同樣地,Chandra 只能使用 Project=Cascade讀取或寫入 Blob。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |
如需詳細資訊,請參閱 根據標記和自定義安全性屬性允許對 Blob 的讀取存取。

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 Azure 入口網站新增此條件的設定。
若要使用程式代碼編輯器新增條件,請複製條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
)
)
AND
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'} AND SubOperationMatches{'Blob.Write.WithTagHeaders'})
)
OR
(
@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
)
)
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
如果使用者具有 自定義安全性屬性 ,且具有任何符合 Blob 索引標記的值,則此條件可允許讀取 Blob。
例如,如果 Chandra 具有 Project 屬性,且該屬性的值為 Baker 和 Cascade,那麼她只能讀取具有 Project=Baker 或 Project=Cascade Blob 索引標籤的 Blob。
您必須將此條件新增至包含下列動作的任何角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |
如需詳細資訊,請參閱 根據標記和自定義安全性屬性允許對 Blob 的讀取存取。

此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是使用 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$>] ForAnyOfAnyValues:StringEquals @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project]
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據檢查 Blob 索引標籤和自訂安全性屬性的運算式進一步加以評估。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
環境屬性
本節包含範例,示範如何根據網路環境或目前的日期和時間限制對物件的存取。
範例:允許在特定日期和時間之後進行 Blob 的讀取存取
此條件僅允許在 2023 年 5 月 1 日下午 1 點之後,才能讀取 Blob 容器 container1 (UTC)。
讀取現有的 Blob 有兩種可能方法。 若要讓此條件對具有多個角色指派的主體有效,您必須將此條件新增至包含下列任何動作的所有角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
新增動作
選取 [新增動作],然後只選取 [讀取 Blob 子作業],如下表所示。
請勿選取最上層 的 [所有讀取作業] 動作或任何其他子作業,如下圖所示:
建置運算式
使用下表中的值來建置條件的運算式部分:
下圖顯示將設定輸入 Azure 入口網站之後的條件。 您必須將運算式分組,以確保能正確評估。
若要使用程式代碼編輯器新增條件,請複製下列條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'container1'
AND
@Environment[UtcNow] DateTimeGreaterThan '2023-05-01T13:00:00.000Z'
)
)
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下說明如何使用 Azure PowerShell 為 記憶體 Blob 數據讀取者 角色新增此條件。
$subId = "<your subscription id>"
$rgName = "<resource group name>"
$storageAccountName = "<storage account name>"
$roleDefinitionName = "Storage Blob Data Reader"
$userUpn = "<user UPN>"
$userObjectID = (Get-AzADUser -UserPrincipalName $userUpn).Id
$containerName = "container1"
$dateTime = "2023-05-01T13:00:00.000Z"
$scope = "/subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"
$condition = `
"( `
( `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}) `
) `
OR `
( `
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals '$containerName' `
AND `
@Environment[UtcNow] DateTimeGreaterThan '$dateTime' `
) `
)"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
範例:允許從特定子網開放對特定容器中的Blob存取
此條件僅允許從虛擬網路virtualnetwork1上的子網default,對container1中的 Blob 進行讀取、寫入、新增和刪除的存取。 若要在此範例中使用 Subnet 屬性,子網必須啟用 Azure 記憶體 的服務端點 。
讀取、寫入、新增和刪除現有 Blob 的存取權有五個可能動作。 若要讓此條件對具有多個角色指派的主體有效,您必須將此條件新增至包含下列任何動作的所有角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
新增動作
選取 [新增動作],然後只選取下表所示的最上層動作。
| 動作 |
子作業 |
| 所有讀取作業 |
n/a |
| 寫入 blob |
n/a |
| 建立 Blob 或快照集,或附加資料 |
n/a |
| 刪除 Blob |
n/a |
請勿選取任何個別的子作業,如下圖所示:
建置運算式
使用下表中的值來建置條件的運算式部分:
| 設定 |
價值觀 |
| 屬性來源 |
資源 |
| 屬性 |
容器名稱 |
| 操作員 |
StringEquals |
| 價值觀 |
container1 |
| 邏輯運算子 |
'AND' |
| 屬性來源 |
環境 |
| 屬性 |
子網路 |
| 操作員 |
StringEqualsIgnoreCase |
| 價值觀 |
/subscriptions/<your subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/virtualNetworks/virtualnetwork1/subnets/default |
下圖顯示將設定輸入 Azure 入口網站之後的條件。 您必須將運算式分組,以確保能正確評估。
若要使用程式代碼編輯器新增條件,請複製下列條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]StringEquals 'container1'
AND
@Environment[Microsoft.Network/virtualNetworks/subnets] StringEqualsIgnoreCase '/subscriptions/<your subscription id>/resourceGroups/example-group/providers/Microsoft.Network/virtualNetworks/virtualnetwork1/subnets/default'
)
)
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下說明如何使用 Azure PowerShell 為 記憶體 Blob 數據參與者 角色新增此條件。
$subId = "<your subscription id>"
$rgName = "<resource group name>"
$storageAccountName = "<storage account name>"
$roleDefinitionName = "Storage Blob Data Contributor"
$userUpn = "<user UPN>"
$userObjectID = (Get-AzADUser -UserPrincipalName $userUpn).Id
$containerName = "container1"
$vnetName = "virtualnetwork1"
$subnetName = "default"
$scope = "/subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"
$condition = `
"( `
( `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}) `
AND `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'}) `
AND `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'}) `
AND `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'}) `
) `
OR `
( `
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals '$containerName' `
AND `
@Environment[Microsoft.Network/virtualNetworks/subnets] StringEqualsIgnoreCase '/subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Network/virtualNetworks/$vnetName/subnets/$subnetName' `
) `
)"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
範例:需要具備私人連結的存取權,才能讀取高敏感度的物件。
此條件要求,在要求讀取 Blob 索引標籤敏感度的值為 high 的 Blob 時,必須透過私人連結 (任何私人連結)。 這表示完全不允許從公用網際網路嘗試讀取高敏感度 Blob。 使用者可以從公用網際網路讀取將敏感度設定為非 high 值的 Blob。
此 ABAC 範例條件的真相數據表如下:
| 動作 |
敏感性 |
私人連結 |
存取 |
| 讀取 Blob |
high |
是的 |
允許 |
| 讀取 Blob |
high |
否 |
不允許 |
| 讀取 Blob |
不高 |
是的 |
允許 |
| 讀取 Blob |
不高 |
否 |
允許 |
讀取現有 Blob 的方法有兩種可能。 若要讓此條件對具有多個角色指派的主體有效,您必須將此條件新增至包含下列任何動作的所有角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是在 Azure 入口網站中使用視覺條件編輯器新增此條件的設定。
新增動作
選取 [新增動作],然後只選取 [讀取 Blob 子作業],如下表所示。
請勿選取最上層的 [所有讀取作業] 動作或任何其他子作業,如下圖所示:
建置運算式
使用下表中的值來建置條件的運算式部分:
下圖顯示將設定輸入 Azure 入口網站之後的條件。 您必須將運算式分組,以確保能正確評估。
若要使用程式代碼編輯器新增條件,請複製下列條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:sensitivity<$key_case_sensitive$>] StringEquals 'high'
AND
@Environment[isPrivateLink] BoolEquals true
)
OR
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:sensitivity<$key_case_sensitive$>] StringNotEquals 'high'
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據運算式進一步加以評估。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下說明如何使用 Azure PowerShell 為 記憶體 Blob 數據讀取者 角色新增此條件。
$subId = "<your subscription id>"
$rgName = "<resource group name>"
$storageAccountName = "<storage account name>"
$roleDefinitionName = "Storage Blob Data Reader"
$userUpn = "<user UPN>"
$userObjectID = (Get-AzADUser -UserPrincipalName $userUpn).Id
$scope = "/subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"
$condition = `
"( `
( `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) `
) `
OR `
( `
( `
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:sensitivity<`$key_case_sensitive`$>] StringEquals 'high' `
AND `
@Environment[isPrivateLink] BoolEquals true `
) `
OR `
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:sensitivity<`$key_case_sensitive`$>] StringNotEquals 'high' `
) `
)"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
範例:只允許從特定私人端點存取容器
此條件要求所有讀取、寫入、新增和刪除記憶體容器中 Blob 的作業都必須透過名為 container1privateendpoint1的私人端點進行。 針對未命名 container1的其他所有容器,存取不需要透過私人端點。
現有 Blob 的讀取、寫入和刪除有五個可能動作。 若要讓此條件對具有多個角色指派的主體有效,您必須將此條件新增至包含下列任何動作的所有角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 如果此條件包含的儲存帳戶已啟用階層式命名空間,或未來可能啟用,請新增。 |
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是在 Azure 入口網站中使用視覺條件編輯器新增此條件的設定。
新增動作
選取 [新增動作],然後只選取下表所示的最上層動作。
| 動作 |
子作業 |
| 所有讀取操作 |
n/a |
| 寫入 blob |
n/a |
| 建立 Blob 或快照集,或附加資料 |
n/a |
| 刪除 Blob |
n/a |
請勿選取任何個別的子作業,如下圖所示:
建置運算式
使用下表中的值來建置條件的運算式部分:
下圖顯示將設定輸入 Azure 入口網站之後的條件。 您必須將運算式分組,以確保能正確評估。
若要使用程式代碼編輯器新增條件,請選擇下列其中一個條件程式代碼範例,視與指派相關聯的角色而定。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 Blob 資料擁有者:
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action'})
)
OR
(
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'container1'
AND
@Environment[Microsoft.Network/privateEndpoints] StringEqualsIgnoreCase '/subscriptions/<your subscription id>/resourceGroups/example-group/providers/Microsoft.Network/privateEndpoints/privateendpoint1'
)
OR
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringNotEquals 'container1'
)
)
儲存體 Blob 資料參與者:
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'})
AND
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'})
)
OR
(
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'container1'
AND
@Environment[Microsoft.Network/privateEndpoints] StringEqualsIgnoreCase '/subscriptions/<your subscription id>/resourceGroups/example-group/providers/Microsoft.Network/privateEndpoints/privateendpoint1'
)
OR
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringNotEquals 'container1'
)
)
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下說明如何使用 Azure PowerShell 為 記憶體 Blob 數據參與者 角色新增此條件。
$subId = "<your subscription id>"
$rgName = "<resource group name>"
$storageAccountName = "<storage account name>"
$roleDefinitionName = "Storage Blob Data Contributor"
$userUpn = "<user UPN>"
$userObjectID = (Get-AzADUser -UserPrincipalName $userUpn).Id
$containerName = "container1"
$privateEndpointName = "privateendpoint1"
$scope = "/subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"
$condition = `
"( `
( `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}) `
AND `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write'}) `
AND `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action'}) `
AND `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete'}) `
) `
OR `
( `
( `
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals '$containerName' `
AND `
@Environment[Microsoft.Network/privateEndpoints] StringEqualsIgnoreCase '/subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Network/privateEndpoints/$privateEndpointName' `
) `
OR `
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringNotEquals '$containerName' `
) `
)"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
範例:僅允許特定的私人端點和被標記為具有存取權的使用者讀取高度敏感的 Blob 資料。
此條件要求將索引標籤 敏感度 設定為 high 的 Blob 只能由具有其 敏感度 安全性屬性相符值的使用者讀取。 此外,必須透過名為 privateendpoint1的私人端點存取它們。 敏感度標籤具有不同值的 Blob,可以透過其他端點或網際網路存取。
讀取現有的 Blob 有兩種可能的操作。 若要讓此條件對具有多個角色指派的主體有效,您必須將此條件新增至包含下列任何動作的所有角色指派。
| 動作 |
註釋 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
如果角色定義包含此動作,請新增相關資訊,例如 Storage Blob 資料擁有者。 |
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺效果編輯器] 索引標籤和 [ 程序代碼編輯器 ] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是在 Azure 入口網站中使用視覺條件編輯器新增此條件的設定。
新增動作
選取 [新增動作],然後只選取 [讀取 Blob 子作業],如下表所示。
請勿選取最上層動作,如下圖所示:
建置運算式
使用下表中的值來建置條件的運算式部分:
下圖顯示將設定輸入 Azure 入口網站之後的條件。 您必須將運算式分組,以確保能正確評估。
若要使用程式代碼編輯器新增條件,請複製下列條件程式代碼範例,並將它貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
(
@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:sensitivity] StringEqualsIgnoreCase @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:sensitivity<$key_case_sensitive$>]
AND
@Environment[Microsoft.Network/privateEndpoints] StringEqualsIgnoreCase '/subscriptions/<your subscription id>/resourceGroups/example-group/providers/Microsoft.Network/privateEndpoints/privateendpoint1'
)
OR
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:sensitivity<$key_case_sensitive$>] StringNotEquals 'high'
)
)
在此範例中,條件會限制讀取動作,但子作業為 Blob.List時除外。 這表示允許列出 Blob 作業,但對於所有其他讀取動作,則會根據運算式進一步加以評估。
如果用戶嘗試在已指派的角色中執行一個條件沒有限制的動作,!(ActionMatches) 會評估為 true,整體條件會評估為 true。 此結果可讓動作執行。
若要深入瞭解如何格式化和評估條件,請參閱 條件格式。
以下說明如何使用 Azure PowerShell 為 記憶體 Blob 數據讀取者 角色新增此條件。
$subId = "<your subscription id>"
$rgName = "<resource group name>"
$storageAccountName = "<storage account name>"
$roleDefinitionName = "Storage Blob Data Reader"
$userUpn = "<user UPN>"
$userObjectID = (Get-AzADUser -UserPrincipalName $userUpn).Id
$privateEndpointName = "privateendpoint1"
$scope = "/subscriptions/$subId/resourceGroups/$rgName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"
$condition = `
"( `
( `
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) `
) `
OR `
( `
( `
@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:sensitivity] StringEqualsIgnoreCase @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:sensitivity<`$key_case_sensitive`$>] `
AND `
@Environment[Microsoft.Network/privateEndpoints] StringEqualsIgnoreCase '/subscriptions/$subid/resourceGroups/$rgname/providers/Microsoft.Network/privateEndpoints/$privateEndpointName' `
) `
OR `
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:sensitivity<`$key_case_sensitive`$>] StringNotEquals 'high' `
) `
)"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
後續步驟