An Azure personalized recommendation engine that helps users follow best practices to optimize Azure deployments.
Hello Brin Soko ARM really does insist on at least one valid principal in the authorizations array whenever you set lockLevel: ReadOnly. There’s no “null GUID” or magic placeholder that will pass validation, because ARM does a lookup in Microsoft Entra ID to make sure the object exists. That said, you can satisfy the requirement while still giving your customer proof that you (the publisher) have zero standing access:
- Use a harmless identity in your authorizations : • Add your managed-app’s own managed identity (system-assigned or user-assigned) to the applicationDefinition.authorizations array. • By itself, listing the identity here does not grant any data-plane rights. You control its RBAC assignments on the managed RG. • After deployment, show the customer (via the IAM blade or
az role assignment list) that this identity has no Reader/Contributor roles on any resource in the managed RG. - Alternatively, create a “dummy” AAD service principal • Register an AAD app/SP solely to satisfy the non-empty authorizations requirement. • Put its objectId in applicationDefinition.authorizations. • Give it zero RBAC assignments on the managed RG (or explicitly add a Deny assignment). • The SP exists for ARM validation but cannot do anything in the data plane.
Neither of these patterns violate ARM’s validation, and both let you prove to your customer that no real publisher principal can read or modify their deployed resources.
Best practices for your “double-locked” scenario:
• Keep your intellectual-property lock on the managed RG as a ReadOnly lock + Deny assignments to block the customer from poking around.
• Enforce the zero-trust requirement with RBAC + Deny assignments for the publisher principal you listed (so you can demonstrate “no access” post-deploy).
• If you ever need to update or patch the managed app, temporarily grant that identity minimal rights, run your update, then remove the role again to return to zero-trust.
• Share a short script or screenshot of the managed RG’s Access control (IAM) blade showing no publisher assignments—that’s your “verifiable proof.”
Reference list:
- Modifying or updating resources in the managed resource group for an Azure managed application https://docs.microsoft.com/azure/azure-resource-manager/managed-applications/update-managed-resources
- Lock resources to prevent unexpected changes https://docs.microsoft.com/azure/azure-resource-manager/management/lock-resources
- Zero Trust principles for Azure https://learn.microsoft.com/azure/security/fundamentals/zero-trust?wt.mc_id=knowledgesearch_inproduct_azure-cxp-community-insider
Thanks,
Suchitra.