你当前正在访问 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 数据(预览)

Diagram of example 1 condition showing read access to some blob with a tag.

(
    (
        !(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}

Screenshot of example 1 condition editor in Azure portal.

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(创建)

Diagram of example 2 condition showing new blobs must include a tag.

(
 (
  !(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}

Screenshot of example 2 condition 1 editor in Azure portal.

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

Diagram of example 3 condition showing existing blobs must have tag keys.

(
 (
  !(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}

Screenshot of example 3 condition 1 editor in Azure portal.

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

Diagram of example 4 condition showing existing blobs must have a tag key and values.

(
 (
  !(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}

Screenshot of example 4 condition 1 editor in Azure portal.

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(创建)

在该条件下不使用子操作,因为只有在基于标记创作条件时才需要子操作。

Diagram of example 5 condition showing read, write, or delete blobs in named containers.

(
 (
  !(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}

Screenshot of example 5 condition 1 editor in Azure portal.

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

Diagram of example 6 condition showing read access to blobs in named containers with a path.

(
    (
        !(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}

Screenshot of example 6 condition 1 editor in Azure portal.

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(创建)

Diagram of example 7 condition showing write access to blobs in named containers with a path.

(
 (
  !(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}

Screenshot of example 7 condition 1 editor in Azure portal.

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

Diagram of example 8 condition showing read access to blobs with a tag and a path.

(
    (
        !(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}

Screenshot of example 8 condition 1 editor in Azure portal.

条件 #2 设置
操作 读取 blob
特性源 资源
特性 Blob 路径
操作员 StringLike
{pathString}

Screenshot of example 8 condition 2 editor in Azure portal.

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 进行读取访问

Diagram of example 9 condition showing read and write access to blobs based on tags and custom security attributes.

(
 (
  !(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=BakerProject=Cascade Blob 索引标记的 Blob。

有关详细信息,请参阅基于标记和自定义安全属性允许对 Blob 进行读取访问

Diagram of example 10 condition showing read access to blobs based on tags and multi-value custom security attributes.

(
 (
  !(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>

后续步骤