この記事では、Azure Blob Storage へのアクセスを制御するためのロールの割り当て条件の例をいくつか示します。
重要
Azure 属性ベースのアクセス制御 (Azure ABAC) は、ストレージ アカウントの Standard と Premium 両方のパフォーマンス レベルで、request
、resource
、environment
、principal
を使用して Azure Blob Storage、Azure Data Lake Storage Gen2、Azure キューへのアクセスを制御するために一般提供 (GA) されています。 現在、リスト BLOB には要求属性が含まれており、階層型名前空間のスナップショット要求属性はプレビュー段階です。 Azure Storage の ABAC の完全な機能状態情報については、「Azure Storage の条件機能の状態」を参照してください。
ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
[前提条件]
ロールの割り当て条件を追加または編集するための前提条件の詳細については、条件の前提条件に関するページを参照してください。
この記事の例の概要
次の表を使用して、ABAC シナリオに適した例をすばやく見つけてください。 この表には、シナリオの簡単な説明と、 ソース (環境、プリンシパル、要求、リソース) 別に例で使用される属性の一覧が含まれています。
このセクションには、BLOB インデックス タグに関連する例が含まれています。
重要
Read content from a blob with tag conditions
サブ操作は現在、ABAC 機能プレビュー中に実装された条件との互換性のためにサポートされていますが、非推奨とされており、代わりに Read a blob
アクションを使用することをお勧めします。
Azure portal で ABAC 条件を構成すると、"非推奨: タグ条件を使用して BLOB からコンテンツを読み取る" と表示されることがあります。 操作を削除し、Read a blob
アクションに置き換えることをお勧めします。
タグ条件によって読み取りアクセスを制限する独自の条件を作成する場合は、「例: BLOB インデックス タグを使用した BLOB の読み取り」を参照してください。
例: BLOB インデックス タグを使用して BLOB を読み取る
この条件により、ユーザーは Project の BLOB インデックス タグ キーと値 Cascade を使用して BLOB を読み取ることができます。 このキー値タグのない BLOB へのアクセスは許可されません。
この条件をセキュリティ プリンシパルに対して有効にするには、次のアクションを含むすべてのロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 |

Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal ビジュアル エディターを使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'
)
)
この例では、サブ操作が Blob.List
されている場合を除き、条件によって読み取りアクションが制限されます。 つまり、リスト BLOB 操作は許可されますが、他のすべての読み取りアクションは、BLOB インデックス タグをチェックする式に対してさらに評価されます。
ユーザーが割り当てられたロールで、条件によって制限されたアクション ではない アクションを実行しようとすると、 !(ActionMatches)
は true に評価され、全体的な条件は true に評価されます。 この結果により、アクションを実行できます。
条件の書式設定と評価方法の詳細については、「 条件の形式」を参照してください。
Azure PowerShell を使用してこの条件を追加する方法を次に示します。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade'))"
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectID
$testRa.Condition = $condition
$testRa.ConditionVersion = "2.0"
Set-AzRoleAssignment -InputObject $testRa -PassThru
この条件をテストする方法は次のとおりです。
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
Get-AzStorageBlob -Container <containerName> -Blob <blobName> -Context $bearerCtx
例: 新しい BLOB には BLOB インデックス タグを含める必要がある
この条件では、新しい BLOB に Project の BLOB インデックス タグ キーと値 Cascade を含める必要があります。
新しい BLOB を作成できるアクションは 2 つあります。そのため、両方を対象にする必要があります。 この条件は、次のいずれかのアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 インデックス タグ キーの少なくとも 1 つ (Project または Program) を使用してタグ付けする必要があります。 この条件は、既存の BLOB にガバナンスを追加する場合に役立ちます。
既存の BLOB のタグを更新できるアクションは 2 つあります。そのため、両方を対象にする必要があります。 この条件は、次のいずれかのアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 に Project の BLOB インデックス タグ キーと Cascade、Baker、または Skagit の値が必要です。 この条件は、既存の BLOB にガバナンスを追加する場合に役立ちます。
既存の BLOB のタグを更新できるアクションは 2 つあります。そのため、両方を対象にする必要があります。 この条件は、次のいずれかのアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 の読み取り、書き込み、削除には 5 つのアクションがあります。 この条件は、次のいずれかのアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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 を読み取る
この条件により、BLOB パスが readonly/* である blobs-example-container という名前のストレージ コンテナーへの読み取りアクセスが許可されます。 この条件は、サブスクリプション内の他のユーザーと読み取りアクセスのためにストレージ コンテナーの特定の部分を共有する場合に役立ちます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 この条件に含まれるストレージ アカウントで階層型名前空間が有効になっているか、今後有効になる可能性がある場合に追加します。 |

Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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 の読み取りまたは一覧表示
この条件により、読み取りアクセスが許可され、BLOB パスが readonly/* である blobs-example-container という名前のストレージ コンテナーへのアクセスも一覧表示されます。 条件 #1 は、リスト BLOB を除く読み取りアクションに適用されます。 条件 #2 は、リスト BLOB に適用されます。 この条件は、読み取りまたはリスト アクセスのためにストレージ コンテナーの特定の部分をサブスクリプション内の他のユーザーと共有する場合に役立ちます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 この条件に含まれるストレージ アカウントで階層型名前空間が有効になっているか、今後有効になる可能性がある場合に追加します。 |

Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
注
Azure portal では、prefix='' を使用してコンテナーのルート ディレクトリから BLOB を一覧表示します。 プレフィックス StringStartsWith 'readonly/' を使用して BLOB の一覧表示操作で条件を追加すると、対象ユーザーは Azure portal でコンテナーのルート ディレクトリから 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 ゲスト ユーザー) は、uploads/contoso/* のパスを持つ Contosocorp という名前のストレージ コンテナーにファイルをドロップできます。 この条件は、他のユーザーがストレージ コンテナーにデータを配置できるようにするために役立ちます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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 を読み取る
この条件により、ユーザーは Program の BLOB インデックス タグ キー、Alpine の値、およびログの BLOB パス* を使用して BLOB を読み取ることができます。 ログの BLOB パス* には、BLOB 名も含まれます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 |

Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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 バージョンを読み取り、バージョン ID が 2022-06-01T23:38:32.8883645Z の BLOB を読み取ることができます。 ユーザーは他の BLOB バージョンを読み取ることはできません。 バージョン ID 属性は、階層型名前空間が有効になっていないストレージ アカウントでのみ使用できます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|

Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 年 6 月 1 日より前の BLOB のバージョンを削除してクリーンアップを実行できます。 バージョン ID 属性は、階層型名前空間が有効になっていないストレージ アカウントでのみ使用できます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action |
|

Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 スナップショットを読み取ることができます。 バージョン ID 属性は、階層型名前空間が有効になっていないストレージ アカウントでのみ使用できます。 スナップショット属性は、階層型名前空間が有効になっていないストレージ アカウントで使用でき、階層型名前空間が有効になっているストレージ アカウントでは現在プレビュー段階です。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 |

Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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 を一覧表示し、メタデータ、スナップショット、バージョン情報を含めることができます。 List BLOB include 属性は、階層型名前空間が有効になっていないストレージ アカウントで使用できます。
注
リスト BLOB には要求属性が含まれており、include
操作を呼び出すときに、 パラメーターの値を許可または制限することで機能します。 include
パラメーターの値は、クロス積比較演算子を使用して条件で指定された値と比較されます。 比較が true と評価された場合は、 List Blobs
要求が許可されます。 比較が false と評価された場合、 List Blobs
要求は拒否されます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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
されたときに、条件によって読み取りアクションが制限されます。 つまり、 リスト BLOB 操作は、 include
値をチェックする式に対してさらに評価されますが、他のすべての読み取りアクションは許可されます。
ユーザーが割り当てられたロールで、条件によって制限されたアクション ではない アクションを実行しようとすると、 !(ActionMatches)
は true に評価され、全体的な条件は true に評価されます。 この結果により、アクションを実行できます。
条件の書式設定と評価方法の詳細については、「 条件の形式」を参照してください。
この条件により、要求にメタデータが含まれている場合に、ユーザーが BLOB を一覧表示できないように制限されます。 List BLOB include 属性は、階層型名前空間が有効になっていないストレージ アカウントで使用できます。
注
リスト BLOB には要求属性が含まれており、include
操作を呼び出すときに、 パラメーターの値を許可または制限することで機能します。 include
パラメーターの値は、クロス積比較演算子を使用して条件で指定された値と比較されます。 比較が true と評価された場合は、 List Blobs
要求が許可されます。 比較が false と評価された場合、 List Blobs
要求は拒否されます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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
されたときに、条件によって読み取りアクションが制限されます。 つまり、 リスト BLOB 操作は、 include
値をチェックする式に対してさらに評価されますが、他のすべての読み取りアクションは許可されます。
ユーザーが割り当てられたロールで、条件によって制限されたアクション ではない アクションを実行しようとすると、 !(ActionMatches)
は true に評価され、全体的な条件は true に評価されます。 この結果により、アクションを実行できます。
条件の書式設定と評価方法の詳細については、「 条件の形式」を参照してください。
階層型名前空間
このセクションでは、ストレージ アカウントに対して階層型名前空間が有効になっているかどうかに基づいて、オブジェクトへのアクセスを制限する方法を示す例を示します。
例: 階層型名前空間が有効になっている読み取り専用のストレージ アカウント
この条件により、ユーザーは 階層型名前空間 が有効になっているストレージ アカウント内の BLOB のみを読み取ることができます。 この条件は、リソース グループスコープ以上でのみ適用されます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 |

Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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
で暗号化できます。 BLOB が ScopeCustomKey1
で暗号化または暗号化解除されていない場合、要求は禁止を返します。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 属性を持っている場合、Project=Baker
または Project=Cascade
のインデックスタグが付いている BLOB のみを読み取ることができます。
この条件は、次のアクションを含むロールの割り当てに追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 |
詳細については、「 タグとカスタム セキュリティ属性に基づいて BLOB への読み取りアクセスを許可する」を参照してください。

Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal を使用してこの条件を追加する設定を次に示します。
コード エディターを使用して条件を追加するには、条件コード サンプルをコピーしてコード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAnyOfAnyValues:StringEquals @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project]
)
)
この例では、サブ操作が Blob.List
されている場合を除き、条件によって読み取りアクションが制限されます。 つまり、リスト BLOB 操作は許可されますが、他のすべての読み取りアクションは、BLOB インデックス タグとカスタム セキュリティ属性をチェックする式に対してさらに評価されます。
ユーザーが割り当てられたロールで、条件によって制限されたアクション ではない アクションを実行しようとすると、 !(ActionMatches)
は true に評価され、全体的な条件は true に評価されます。 この結果により、アクションを実行できます。
条件の書式設定と評価方法の詳細については、「 条件の形式」を参照してください。
環境属性
このセクションでは、ネットワーク環境または現在の日時に基づいてオブジェクトへのアクセスを制限する方法を示す例を示します。
例: 特定の日時より後の BLOB への読み取りアクセスを許可する
この条件により、2023 年 5 月 1 日の午後 1 時 (UTC) より後にのみ、BLOB コンテナー container1
への読み取りアクセスが許可されます。
既存の BLOB を読み取るための 2 つの潜在的なアクションがあります。 複数のロールの割り当てを持つプリンシパルに対してこの条件を有効にするには、次のいずれかのアクションを含むすべてのロールの割り当てにこの条件を追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 |
Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
アクションを追加する
アクションを追加 を選択し、その後、次に示す表のように BLOB を読み取る サブ操作のみを選択します。
アクション |
サブ操作 |
すべての読み取り操作 |
Read a blob (BLOB を読み取る) |
次の図に示すように、[ すべての読み取り操作 ] アクションまたはその他のサブ操作を最上位レベルで選択しないでください。
式の作成
次の表の値を使用して、条件の式部分を作成します。
次の図は、Azure portal に設定が入力された後の条件を示しています。 正しい評価を確実に行うには、式をグループ化する必要があります。
コード エディターを使用して条件を追加するには、次の条件コード サンプルをコピーし、コード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 へのアクセスを許可する
この条件により、仮想ネットワーク container1
上のサブネット default
からのみ、virtualnetwork1
内の BLOB への読み取り、書き込み、追加、削除のアクセスが許可されます。 この例で Subnet 属性を使用するには、サブネットで Azure Storage の サービス エンドポイントが有効になっている 必要があります。
既存の BLOB への読み取り、書き込み、追加、削除のアクセスには、5 つの潜在的なアクションがあります。 複数のロールの割り当てを持つプリンシパルに対してこの条件を有効にするには、次のいずれかのアクションを含むすべてのロールの割り当てにこの条件を追加する必要があります。
アクション |
注記 |
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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
アクションを追加する
[ アクションの追加] を選択し、次の表に示す最上位レベルのアクションのみを選択します。
アクション |
サブ操作 |
すべての読み取り操作 |
該当なし |
Write to a blob (BLOB に書き込む) |
該当なし |
Create a blob or snapshot, or append data (BLOB またはスナップショットを作成するか、データを追加する) |
該当なし |
BLOB を削除する |
該当なし |
次の図に示すように、個々のサブ操作を選択しないでください。
式の作成
次の表の値を使用して、条件の式部分を作成します。
設定 |
価値 |
Attribute source (属性ソース) |
資源 |
特性 |
コンテナー名 |
オペレーター |
StringEquals |
価値 |
container1 |
論理演算子 |
'AND' |
属性ソース |
環境 |
特性 |
サブネット |
オペレーター |
StringEqualsIgnoreCase |
価値 |
/subscriptions/<your subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/virtualNetworks/virtualnetwork1/subnets/default |
次の図は、Azure portal に設定が入力された後の条件を示しています。 正しい評価を確実に行うには、式をグループ化する必要があります。
コード エディターを使用して条件を追加するには、次の条件コード サンプルをコピーし、コード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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 インデックス タグの sensitivity の値がプライベート リンク (任意のプライベート リンク) 上で high
に設定されている BLOB の読み取り要求が必要です。 つまり、パブリック インターネットから機密性の高い BLOB を読み取ろうとしても許可されません。 ユーザーは、sensitivity が high
以外の値に設定されているパブリック インターネットから BLOB を読み取ることができます。
この ABAC サンプル条件の真偽表は次のとおりです。
アクション |
感受性 |
プライベート リンク |
アクセス |
Read a blob (BLOB を読み取る) |
high |
はい |
許可 |
Read a blob (BLOB を読み取る) |
high |
いいえ |
禁止 |
Read a blob (BLOB を読み取る) |
高くない |
はい |
許可 |
Read a blob (BLOB を読み取る) |
高くない |
いいえ |
許可 |
既存の BLOB を読み取るための 2 つの潜在的なアクションがあります。 複数のロールの割り当てを持つプリンシパルに対してこの条件を有効にするには、次のいずれかのアクションを含むすべてのロールの割り当てにこの条件を追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 |
Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal のビジュアル条件エディターを使用してこの条件を追加する設定を次に示します。
アクションを追加する
アクションを追加 を選択し、その後、次に示す表のように BLOB を読み取る サブ操作のみを選択します。
アクション |
サブ操作 |
すべての読み取り操作 |
Read a blob (BLOB を読み取る) |
次の図に示すように、他のサブ操作の最上位レベル の [すべての読み取り操作 ] アクションを選択しないでください。
式の作成
次の表の値を使用して、条件の式部分を作成します。
次の図は、Azure portal に設定が入力された後の条件を示しています。 正しい評価を確実に行うには、式をグループ化する必要があります。
コード エディターを使用して条件を追加するには、次の条件コード サンプルをコピーし、コード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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
という名前のプライベート エンドポイントを使用して、privateendpoint1
という名前のストレージ コンテナー内の BLOB に対するすべての読み取り、書き込み、追加、および削除操作を行う必要があります。 container1
という名前ではない他のすべてのコンテナーについては、プライベート エンドポイント経由でアクセスする必要はありません。
既存の BLOB の読み取り、書き込み、削除には、5 つの潜在的なアクションがあります。 複数のロールの割り当てを持つプリンシパルに対してこの条件を有効にするには、次のいずれかのアクションを含むすべてのロールの割り当てにこの条件を追加する必要があります。
アクション |
注記 |
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 portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal のビジュアル条件エディターを使用してこの条件を追加する設定を次に示します。
アクションを追加する
[ アクションの追加] を選択し、次の表に示す最上位レベルのアクションのみを選択します。
アクション |
サブ操作 |
すべての読み取り操作 |
該当なし |
Write to a blob (BLOB に書き込む) |
該当なし |
Create a blob or snapshot, or append data (BLOB またはスナップショットを作成するか、データを追加する) |
該当なし |
BLOB を削除する |
該当なし |
次の図に示すように、個々のサブ操作を選択しないでください。
式の作成
次の表の値を使用して、条件の式部分を作成します。
次の図は、Azure portal に設定が入力された後の条件を示しています。 正しい評価を確実に行うには、式をグループ化する必要があります。
コード エディターを使用して条件を追加するには、割り当てに関連付けられているロールに応じて、次の条件コード サンプルのいずれかを選択します。 コードを入力したら、ビジュアル エディターに戻って検証します。
ストレージ 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 を読み取るための 2 つの潜在的なアクションがあります。 複数のロールの割り当てを持つプリンシパルに対してこの条件を有効にするには、次のいずれかのアクションを含むすべてのロールの割り当てにこの条件を追加する必要があります。
アクション |
注記 |
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read |
|
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action |
ロール定義にこのアクション (ストレージ BLOB データ所有者など) が含まれている場合に追加します。 |
Azure portal または Azure PowerShell を使用して、条件をロールの割り当てに追加できます。 ポータルには、ABAC 条件を構築するための 2 つのツール (ビジュアル エディターとコード エディター) があります。 Azure portal で 2 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、好みのポータル エディターの例を表示します。
Azure portal のビジュアル条件エディターを使用してこの条件を追加する設定を次に示します。
アクションを追加する
アクションを追加 を選択し、その後、次に示す表のように BLOB を読み取る サブ操作のみを選択します。
アクション |
サブ操作 |
すべての読み取り操作 |
Read a blob (BLOB を読み取る) |
次の図に示すように、最上位レベルのアクションを選択しないでください。
式の作成
次の表の値を使用して、条件の式部分を作成します。
次の図は、Azure portal に設定が入力された後の条件を示しています。 正しい評価を確実に行うには、式をグループ化する必要があります。
コード エディターを使用して条件を追加するには、次の条件コード サンプルをコピーし、コード エディターに貼り付けます。 コードを入力したら、ビジュアル エディターに戻って検証します。
(
(
!(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
次のステップ