Blob 儲存體的 Azure 角色指派條件範例
本文內容
此文章提供了一些範例,說明控制 Azure Blob 儲存體存取權的角色指派條件。
重要
Azure 屬性型訪問控制 (Azure ABAC) 已正式推出(GA),可用來控制對 Azure Blob 儲存體、Azure Data Lake 儲存體 Gen2 和 Azure 佇列的存取,以及標準request
與進階記憶體帳戶效能層級中的 、 resource
environment
和 principal
屬性。 容器元數據資源屬性和清單 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 都必須包含 Blob 索引標記 索引鍵 Project,以及值 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 索引標記 索引鍵為 Program、值為 Alpine 以及 Blob 路徑為 logs* 的 Blob。 Blob 路徑 logs* 也包含 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: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 入口網站新增此條件的設定。
若要使用程式碼編輯器來新增條件,請複製條件程式碼範例,並將其貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 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 入口網站新增此條件的設定。
若要使用程式碼編輯器來新增條件,請複製條件程式碼範例,並將其貼到程式碼編輯器中。 在輸入程式碼之後,切換回視覺化編輯器加以驗證。
儲存體 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
如果角色定義包含此動作,例如儲存體 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 版本
此條件可讓使用者刪除 2022/06/01 以前的舊 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 快照集。 版本識別碼 屬性僅適用於未啟用階層命名空間的儲存體帳戶。 Snapshot 屬性適用於未啟用階層命名空間的儲存體帳戶,目前為啟用階層命名空間的儲存體帳戶預覽。
您必須將此條件新增至包含下列動作的任何角色指派。
動作
備註
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
(
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 include 屬性適用於未啟用階層命名空間的記憶體帳戶。
注意
清單 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 include 屬性適用於未啟用階層命名空間的記憶體帳戶。
注意
清單 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] 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
如果角色定義包含此動作,例如儲存體 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
如果角色定義包含此動作,例如儲存體 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
如果角色定義包含此動作,例如儲存體 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
,則她只能使用 Project=Baker
Blob 索引標記來讀取和寫入 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
如果角色定義包含此動作,例如儲存體 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
如果角色定義包含此動作,例如儲存體 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 進行讀取存取
此條件僅允許在國際標準時間 (UTC) 2023 年 5 月 1 日下午 1 點之後對 Blob 容器 container1
進行讀取存取。
有兩個可能的動作可讀取現有的 Blob。 若要讓此條件對具有多個角色指派的主體有效,您必須將此條件新增至包含下列任何動作的所有角色指派。
動作
備註
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action
如果角色定義包含此動作,例如儲存體 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
如果角色定義包含此動作,例如儲存體 Blob 資料擁有者,請新增。
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺化編輯器] 索引標籤和 [程式碼編輯器] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
新增動作
選取 [新增動作] ,然後僅選取下表所示的最上層動作。
動作
子作業
所有讀取作業
不適用
寫入 Blob
不適用
建立 Blob 或快照集,或附加資料
不適用
刪除 Blob
不適用
請勿選取任何個別子作業,如下圖所示:
建置運算式
使用下表中的值來建置條件的運算式部分:
設定
值
屬性來源
資源
屬性
容器名稱
運算子
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
此條件要求,在要求讀取 Blob 索引標籤敏感度 的值為 high
的 Blob 時,必須透過私人連結 (任何私人連結)。 這表示完全不允許從公用網際網路嘗試讀取高敏感度 Blob。 使用者可以從公用網際網路讀取將敏感度 設定為非 high
值的 Blob。
此 ABAC 範例條件的事實資料表如下:
動作
敏感度
私人連結
存取
讀取 Blob
high
是
允許
讀取 Blob
high
No
不允許
讀取 Blob
不高
是
允許
讀取 Blob
不高
No
允許
有兩個可能的動作可讀取現有的 Blob。 若要讓此條件對具有多個角色指派的主體有效,您必須將此條件新增至包含下列任何動作的所有角色指派。
動作
備註
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action
如果角色定義包含此動作,例如儲存體 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
範例:僅允許從特定私人端點存取容器
此條件要求,對儲存體容器 container1
中的 Blob 所做的所有讀取、寫入、新增和刪除作業,都必須透過名為 privateendpoint1
的私人端點進行。 對於名稱不是 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
如果角色定義包含此動作,例如儲存體 Blob 資料擁有者,請新增。 如果此條件中包含的儲存體帳戶已啟用階層命名空間,或未來可能啟用該空間,請新增。
此條件可使用 Azure 入口網站或 Azure PowerShell 新增至角色指派。 入口網站有兩個工具可供建置 ABAC 條件 - 視覺化編輯器和程式碼編輯器。 您可以在 Azure 入口網站中的兩個編輯器之間切換,以在不同的檢視中查看您的條件。 在 [視覺化編輯器] 索引標籤和 [程式碼編輯器] 索引標籤之間切換,以檢視您慣用入口網站編輯器的範例。
以下是在 Azure 入口網站中使用視覺化條件編輯器新增此條件的設定。
新增動作
選取 [新增動作] ,然後僅選取下表所示的最上層動作。
動作
子作業
所有讀取作業
不適用
寫入 Blob
不適用
建立 Blob 或快照集,或附加資料
不適用
刪除 Blob
不適用
請勿選取任何個別子作業,如下圖所示:
建置運算式
使用下表中的值來建置條件的運算式部分:
下圖顯示將設定輸入 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
如果角色定義包含此動作,例如儲存體 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
下一步