Blob Storage での Azure ロールの割り当て条件の例
[アーティクル] 04/11/2024
5 人の共同作成者
フィードバック
この記事の内容
この記事では、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 条件を構成すると、「DEPRECATED: Read content from a blob with tag conditions (非推奨: タグ条件を使用して 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 インデックス タグ キー (Project または Program) が少なくとも 1 つタグ付けされている必要があります。 この条件は、既存の 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 データ所有者など)。 この条件に含まれるストレージ アカウントで階層型名前空間が有効になっている場合、または今後有効にする可能性がある場合に追加します。
subOperation はタグに基づいて条件が作成されるときにのみ必要であるため、この条件ではサブ操作は使用されません。
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 を読み取る
この条件により、readonly/* の BLOB パスを使用して、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 を読み取る、またはリストする
この条件により、readonly/* という BLOB パスを使用して、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 という値、logs* という BLOB パスを使用して BLOB を読み取ることができます。 logs* の 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 を一覧表示し、メタデータ、スナップショット、バージョンの情報を含めることができます。 リスト BLOB インクルード 属性は、階層型名前空間が有効になっていないストレージ アカウントで使用できます。
Note
リスト BLOB インクルード は要求属性であり、リスト 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 をリストできないように制限されます。 リスト BLOB インクルード 属性は、階層型名前空間が有効になっていないストレージ アカウントで使用できます。
Note
リスト BLOB インクルード は要求属性であり、リスト 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 を読み取る、または書き込む
この条件により、ユーザーは、暗号化スコープ ScopeCustomKey1
を使用して暗号化された、sampleaccount
という名前のストレージ アカウントで、BLOB を読み取ることまたは書き込むことができます。 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 が値 Baker と Cascade を含む Project 属性を持つ場合、Project=Baker
または Project=Cascade
の BLOB インデックス タグを持つ 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 への読み取りアクセスを許可する
この条件により、協定世界時 (UTC) の 2023 年 5 月 1 日の午後 1 時以降にのみ 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 つのエディターを切り替えて、さまざまなビューで条件を表示できます。 [ビジュアル エディター] タブと [コード エディター] タブを切り替えて、希望するポータル エディターの例を表示します。
アクションを追加する
[追加] アクション を選択し、次の表に示すように [Read a blob](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 へのアクセスを許可する
この条件により、仮想ネットワーク virtualnetwork1
上のサブネット default
からのみ、container1
内の 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'
Attribute source (属性ソース)
環境
属性
サブネット
演算子
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 を読み取る)
NOT high
はい
許可
Read a blob (BLOB を読み取る)
NOT high
いいえ
許可
既存の 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 の仮想条件エディターを使用してこの条件を追加する設定を次に示します。
アクションを追加する
[追加] アクション を選択し、次の表に示すように [Read a blob](BLOB を読み取る) サブ操作のみを選択します。
アクション
サブ操作
すべての読み取り操作
Read a blob (BLOB を読み取る)
次の図に示すように、最上位の [All read operations] (すべての読み取り操作) アクションまたはその他のサブ操作を選択しないでください。
式の作成
次の表の値を使用して、条件の式部分を作成します。
次の図は、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
という名前のストレージ コンテナー内の BLOB に対するすべての読み取り、書き込み、追加、および削除操作を privateendpoint1
という名前のプライベート エンドポイントを介して行う必要があります。 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 データへの読み取りアクセスを許可する
この条件では、インデックス タグ sensitivity が high
に設定されている BLOB は、sensitivity セキュリティ属性に一致する値を持つユーザーのみが読み取ることができる必要があります。 さらに、privateendpoint1
という名前のプライベート エンドポイント経由でアクセスする必要があります。 sensitivity タグの値が異なる 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 の仮想条件エディターを使用してこの条件を追加する設定を次に示します。
アクションを追加する
[追加] アクション を選択し、次の表に示すように [Read a blob](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
次のステップ