你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
示例 Azure 角色分配条件(预览版)
重要
Azure ABAC 和 Azure 角色分配条件目前为预览版。 此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
本文列出了角色分配条件的一些示例。
先决条件
有关添加或编辑角色分配条件的先决条件的信息,请参阅条件的先决条件。
示例 1:对带有标记的 blob 进行读取访问
该条件允许用户读取 blob 索引标记键为 Project 和标记值为 Cascade 的 blob。 不允许尝试访问没有该键值标记的 blob。
提示
Blob 还能够存储任意用户定义的键值元数据。 尽管元数据与 blob 索引标记类似,但必须使用带条件的 blob 索引标记。 有关详细信息,请查看通过 Blob 索引标记管理和查找 Azure Blob 数据(预览)。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
AND
SubOperationMatches{'Blob.Read.WithTagConditions'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 从具有标记条件的 blob 中读取内容 |
特性源 | 资源 |
特性 | blob 索引标记 [键中的值] |
密钥 | {keyName} |
操作员 | StringEquals |
值 | {keyValue} |
Azure PowerShell
以下介绍如何使用 Azure PowerShell 添加此条件。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND SubOperationMatches{'Blob.Read.WithTagConditions'})) 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
示例 2:新 blob 必须包含标记
该条件要求所有新的 blob 必须包含 blob 索引标记键 Project 和标记值 Cascade。
提示
Blob 还能够存储任意用户定义的键值元数据。 尽管元数据与 blob 索引标记类似,但必须使用带条件的 blob 索引标记。 有关详细信息,请查看通过 blob 索引标记管理和查找 Azure Blob 数据(预览)。
有两个权限允许创建新的 blob,因此必须以获取这两个权限作为目标。 必须将该条件添加到含以下权限之一的任何角色分配。
- /blobs/write(创建或更新)
- /blobs/add/action(创建)
(
(
!(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'
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 写入到具有 blob 索引标记的 blob 将内容写入到具有 blob 索引标记的 blob |
特性源 | 请求 |
特性 | blob 索引标记 [键中的值] |
密钥 | {keyName} |
操作员 | StringEquals |
值 | {keyValue} |
Azure PowerShell
以下介绍如何使用 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
示例 3:现有 blob 必须具有标记键
该条件要求使用至少一个允许的 blob 索引标记键(Project 或 Program)标记任何现有 blob。 该条件适用于向现有 blob 添加治理。
提示
Blob 还能够存储任意用户定义的键值元数据。 尽管元数据与 blob 索引标记类似,但必须使用带条件的 blob 索引标记。 有关详细信息,请查看通过 blob 索引标记管理和查找 Azure Blob 数据(预览)。
有两个权限允许更新现有 blob 上的标记,因此必须以获取这两个权限为目标。 必须将该条件添加到含以下权限之一的任何角色分配。
- /blobs/write(更新或创建,不能排除创建)
- /blobs/tags/write
(
(
!(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'}
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 写入到具有 blob 索引标记的 blob 写入 blob 索引标记 |
特性源 | 请求 |
特性 | blob 索引标记 [键] |
操作员 | ForAllOfAnyValues:StringEquals |
值 | {keyName1} {keyName2} |
Azure PowerShell
以下介绍如何使用 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
示例 4:现有 blob 必须具有标记键和值
该条件要求任何现有 blob 具有 blob 索引标记键 Project 和标记值 Cascade、Baker 或 Skagit。 该条件适用于向现有 blob 添加治理。
提示
Blob 还能够存储任意用户定义的键值元数据。 尽管元数据与 blob 索引标记类似,但必须使用带条件的 blob 索引标记。 有关详细信息,请查看通过 blob 索引标记管理和查找 Azure Blob 数据(预览)。
有两个权限允许更新现有 blob 上的标记,因此必须以获取这两个权限为目标。 必须将该条件添加到含以下权限之一的任何角色分配。
- /blobs/write(更新或创建,不能排除创建)
- /blobs/tags/write
(
(
!(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'}
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 写入到具有 blob 索引标记的 blob 写入 blob 索引标记 |
特性源 | 请求 |
特性 | blob 索引标记 [键] |
操作员 | ForAnyOfAnyValues:StringEquals |
值 | {keyName} |
操作员 | 且 |
表达式 2 | |
特性源 | 请求 |
特性 | blob 索引标记 [键中的值] |
密钥 | {keyName} |
操作员 | ForAllOfAnyValues:StringEquals |
值 | {keyValue1} {keyValue2} {keyValue3} |
Azure PowerShell
以下介绍如何使用 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
示例 5:读取、写入或删除命名容器中的 blob
该条件允许用户读取、写入或删除名为 blob-example-container 的存储容器中的 blob。 该条件适用于与订阅中的其他用户共享特定存储容器。
有四个权限允许读取、写入和删除现有 Blob,因此必须以获取这四个权限为目标。 必须将该条件添加到含以下权限之一的任何角色分配。
- /blobs/delete
- /blobs/read
- /blobs/write(更新或创建)
- /blobs/add/action(创建)
在该条件下不使用子操作,因为只有在基于标记创作条件时才需要子操作。
(
(
!(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'
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 删除 blob 读取 blob 写入到 blob 创建 blob 或快照,或追加数据 |
特性源 | 资源 |
特性 | 容器名称 |
操作员 | StringEquals |
值 | {containerName} |
Azure PowerShell
以下介绍如何使用 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'})) 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
示例 6:使用路径对命名容器中的 blob 进行读取访问
该条件允许使用 blob 路径 readonly/* 对名为 blob-example-container 的存储容器进行读取访问。 该条件适用于与订阅中的其他用户共享存储容器的特定部分以进行读取访问。
必须将该条件添加到含以下权限的任何角色分配。
- /blobs/read
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'
AND
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 读取 blob |
特性源 | 资源 |
特性 | 容器名称 |
操作员 | StringEquals |
值 | {containerName} |
表达式 2 | |
操作员 | 且 |
特性源 | 资源 |
特性 | Blob 路径 |
操作员 | StringLike |
值 | {pathString} |
Azure PowerShell
以下介绍如何使用 Azure PowerShell 添加此条件。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) 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
示例 7:使用路径对命名容器中的 blob 进行写入访问
该条件允许合作伙伴(Azure AD 来宾用户)通过 uploads/contoso/* 路径将文件放入名为 Contosocorp 的存储容器。 该条件适用于允许其他用户将数据放入存储容器。
必须将该条件添加到含以下权限的任何角色分配。
- /blobs/write(创建或更新)
- /blobs/add/action(创建)
(
(
!(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/*'
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 写入到 blob 创建 blob 或快照,或追加数据 |
特性源 | 资源 |
特性 | 容器名称 |
操作员 | StringEquals |
值 | {containerName} |
表达式 2 | |
操作员 | 且 |
特性源 | 资源 |
特性 | Blob 路径 |
操作员 | StringLike |
值 | {pathString} |
Azure PowerShell
以下介绍如何使用 Azure PowerShell 添加此条件。
$condition = "((!(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/*'))"
$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
示例 8:对带有标记和路径的 blob 进行读取访问
该条件允许用户读取 blob 索引标记键为 Program、标记值为 Alpine 且 blob 路径为 logs* 的 blob。 blob 路径 logs* 还包括 blob 名称。
提示
Blob 还能够存储任意用户定义的键值元数据。 尽管元数据与 blob 索引标记类似,但必须使用带条件的 blob 索引标记。 有关详细信息,请查看通过 blob 索引标记管理和查找 Azure Blob 数据(预览)。
必须将该条件添加到含以下权限的任何角色分配。
- /blobs/read
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
AND
SubOperationMatches{'Blob.Read.WithTagConditions'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Program<$key_case_sensitive$>] StringEquals 'Alpine'
)
)
AND
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'logs*'
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 从具有标记条件的 blob 中读取内容 |
特性源 | 资源 |
特性 | blob 索引标记 [键中的值] |
密钥 | {keyName} |
操作员 | StringEquals |
值 | {keyValue} |
条件 #2 | 设置 |
---|---|
操作 | 读取 blob |
特性源 | 资源 |
特性 | Blob 路径 |
操作员 | StringLike |
值 | {pathString} |
Azure PowerShell
以下介绍如何使用 Azure PowerShell 添加此条件。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND SubOperationMatches{'Blob.Read.WithTagConditions'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Program<`$key_case_sensitive`$>] StringEquals 'Alpine')) AND ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) 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
示例 9:基于标记和自定义安全属性允许对 Blob 进行读取和写入访问
如果用户具有与 Blob 索引标记匹配的自定义安全属性,则此条件允许对 Blob 进行读取和写入访问。
例如,如果 Brenda 具有属性 Project=Baker
,则她只能读取和写入具有 Project=Baker
blob 索引标记的 blob。 同样,Chandra 只能使用 读取和写入具有 Project=Cascade
的 blob。
有关详细信息,请参阅基于标记和自定义安全属性允许对 Blob 进行读取访问。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND SubOperationMatches{'Blob.Read.WithTagConditions'})
)
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$>]
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 从具有标记条件的 blob 中读取内容 |
特性源 | 主体 |
Attribute | <attributeset>_<key> |
操作员 | StringEquals |
选项 | Attribute |
特性源 | 资源 |
特性 | blob 索引标记 [键中的值] |
密钥 | <键> |
条件 #2 | 设置 |
---|---|
操作 | 写入到具有 blob 索引标记的 blob 写入到具有 blob 索引标记的 blob |
特性源 | 主体 |
Attribute | <attributeset>_<key> |
操作员 | StringEquals |
选项 | Attribute |
特性源 | 请求 |
特性 | blob 索引标记 [键中的值] |
密钥 | <键> |
示例 10:基于标记和多值自定义安全属性允许对 Blob 进行读取访问
如果用户的自定义安全属性具有任何与 Blob 索引标记匹配的值,则此条件允许对 Blob 进行读取访问。
例如,如果 Chandra 的 Project 属性具有值 Baker 和 Cascade,则她只能读取带 Project=Baker
或 Project=Cascade
Blob 索引标记的 Blob。
有关详细信息,请参阅基于标记和自定义安全属性允许对 Blob 进行读取访问。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND SubOperationMatches{'Blob.Read.WithTagConditions'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAnyOfAnyValues:StringEquals @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project]
)
)
Azure 门户
以下是通过 Azure 门户添加此条件的设置。
条件 #1 | 设置 |
---|---|
操作 | 从具有标记条件的 blob 中读取内容 |
特性源 | 资源 |
特性 | blob 索引标记 [键中的值] |
密钥 | <键> |
操作员 | ForAnyOfAnyValues:StringEquals |
选项 | Attribute |
特性源 | 主体 |
Attribute | <attributeset>_<key> |