azure-containerapps-contributor
match (effective permission)
{
"action": "Microsoft.App/containerApps/*",
"scope_type": "resource|resourceGroup|subscription"
}
where
principal effectively holds the Microsoft.App/containerApps/* wildcard (
Container Apps Contributor / Contributor / Owner) at the scope; a custom role granting only containerApps/write (without delete/listSecrets/action/revisions/*) does NOT satisfy this and must NOT emit CanAdminister -- that narrow case is covered by azure-containerapps-write-image (CanModifyCode) and azure-containerapps-write-config (CanModifyConfiguration)
emit
| source type | Identity |
|---|---|
| target type | * |
| source | <principal> |
| target | <containerApp in scope> |
| permissions | Microsoft.App/containerApps/* |
Narrative
{principal.name} has full control of Container App {target.name} (Microsoft.App/containerApps/*).
Raw rule rules/derived/azure/containerapps.yaml
id: azure-containerapps-contributor
emits: CanAdminister
match_effective_permission:
action: Microsoft.App/containerApps/*
scope_type: resource|resourceGroup|subscription
where:
- principal effectively holds the Microsoft.App/containerApps/* wildcard (Container Apps Contributor /
Contributor / Owner) at the scope; a custom role granting only containerApps/write (without delete/listSecrets/action/revisions/*)
does NOT satisfy this and must NOT emit CanAdminister -- that narrow case is covered by azure-containerapps-write-image
(CanModifyCode) and azure-containerapps-write-config (CanModifyConfiguration)
emit:
source_type: Identity
target_type: '*'
source: <principal>
target: <containerApp in scope>
permissions:
- Microsoft.App/containerApps/*
false_positive_note: Container Apps Contributor (containerApps/*) grants full CONTROL-PLANE management
but has EMPTY DataActions; it does NOT include exec/action, debug/action, or logstream/action. It
is still sufficient for code execution via image/command replacement (see azure-containerapps-write-image).
narrative: '{principal.name} has full control of Container App {target.name} (Microsoft.App/containerApps/*).'