Hi Baley,
You are 100% spot on this is a genuine architecture gap between Azure App Service and ACR ABAC (Attribute-Based Access Control).
Because App Service's managed identity pull agent relies on registry-level control-plane permissions (Microsoft.ContainerRegistry/registries/pull/read), it cannot negotiate repository-scoped ABAC tokens. Since ABAC-enabled registries disable legacy AcrPull entirely, managed identity pulls fail on both Portal and CLI.
Here are the two working paths today:
- Use ACR Scoped Repository Tokens (Service Principal / Credential path):
Instead of Managed Identity, create a Repository-Scoped Token in ACR with
repository/read permissions and configure App Service using registry credentials:
- Set
DOCKER_REGISTRY_SERVER_USERNAME to your ACR token name.
- Set
DOCKER_REGISTRY_SERVER_PASSWORD to your token secret (stored securely in Azure Key Vault).
- Consider Azure Container Apps (ACA):
If strict ABAC repository scoping + Managed Identity authentication is an absolute requirement for your architecture, Azure Container Apps natively supports fine-grained repository-scoped ACR pulls without requiring legacy
AcrPull.
Microsoft is tracking App Service support for ABAC registries. In the meantime, Repository Tokens are the recommended workaround for App Service.
Ref: Azure Container Registry Repository-Scoped Tokens
If this helps clarify the current limitation and workaround, please mark as Accept Answer!