Roles and Permissions Required for ZIRO Platform (Microsoft)

The ZIRO Platform uses a combination of Microsoft’s Graph API and Teams Powershell Module to perform actions within the Microsoft Tenant using the principle of least privilege.

Below are a list of uses cases and least privileges required to perform those actions via the Graph API.

Microsoft Teams Communications Administrator Role - Required

The ZIRO Platform requires the Teams Communications Administrator Role to programmatically access your Microsoft Teams through the Microsoft Teams Powershell Module (TPM).

Transactions such as:

  • Assigning Teams Policies
  • Assigning Phone Number / LineURI
  • Building Custom Reports about Teams Configurations
  • Managing Devices

are only available through Powershell and are not yet available through Microsoft’s Graph API.

:police_car_light: IMPORTANT Microsoft Teams Powershell Module only supports Entra built-in roles. Microsoft does not support custom roles or Graph API roles.

See Setting up App Registration for ZPM in Entra ID on how to assign the Role to your App Registration

Implicit Microsoft Graph Access via the Teams Communications Administrator Role

Assigning the Teams Communications Administrator role to a user or service principal does not explicitly grant Microsoft Graph permissions (such as Group.Read.All or Directory.Read.All). Instead, the role provides directory-level RBAC privileges within Microsoft Entra ID, which Microsoft Graph recognizes during authorization checks.

As a result, certain Graph endpoints—such as listing users or groups—may succeed even though the application does not show those Graph permissions in its API permission list. This occurs because directory roles can implicitly allow operations on directory objects when Graph evaluates the caller’s Entra role assignments.

Note: Because this access is implicit and tied to directory role privileges rather than explicit API consent, our application still requests the specific Microsoft Graph permissions required for its functionality. This ensures that required capabilities are explicitly granted, transparent, and least-privileged, rather than relying on implicit access derived from directory role assignments.

Graph API Roles

In addition to the Teams Communications Administrator Role, the ZIRO Platform requires specific graph roles to perform certain actions against your Microsoft Tenant. Some are required, while others are optional, depending on the features you want to enable in the ZIRO Platform.

:warning: Graph permissions need to be assigned as Application Permissions (Not Delegated)

Why are Application Permissions Required?

  • ZPM is an enterprise application that runs numerous background tasks and jobs that cannot be scoped to a single user with delegate access.
  • ZPM offers the ability to integrate with third-party tools (e.g., ServiceNow) using RESTful API integrations and 0-touch automation in cases where interactive browser-based authentication using delegate access is not feasible.
  • ZPM requires all users to sign in using Single Sign-On (SSO), where Two-Factor Authentication (2FA) is highly recommended. The application authorizes users based on their security group or direct role assignment in the app, providing a more comprehensive Role-Based Access Control (RBAC) than Microsoft’s current Entra ID roles and administrative unit assignments.

Summary of Roles and Use Cases

The following table provides the required and optional roles with their associated functional use cases in ZPM.

Use Case Required Least Permission Higher Privileged Permissions Microsoft API Doc
Teams Powershell Module - Managing Teams Voice & Device Settings :white_check_mark: Teams Communications Administrator :asterisk: Teams Administrator Microsoft Teams PowerShell Overview - Microsoft Teams | Microsoft Learn
Searching and Displaying User Details in 360 View :white_check_mark: User.Read.All User.ReadWrite.All, Directory.Read.All, Directory.ReadWrite.All Get user - Microsoft Graph v1.0 | Microsoft Learn
Assign Teams Phone Number :white_check_mark: TeamsTelephoneNumber.ReadWrite.All numberAssignment: assignNumber - Microsoft Graph v1.0 | Microsoft Learn
Read/Write Teams User Configuration & Policies :white_check_mark: TeamsUserConfiguration.Read.All Get teamsUserConfiguration - Microsoft Graph v1.0 | Microsoft Learn
Read/Write Teams User Policies :white_check_mark: TeamsPolicyUserAssign.ReadWrite.All teamsPolicyUserAssignment: assign - Microsoft Graph v1.0 | Microsoft Learn
Search and View Licenses :white_check_mark: LicenseAssignment.Read.All Organization.Read.All, Directory.Read.All, Directory.ReadWrite.All, Organization.ReadWrite.All LicenseAssignment.ReadWrite.All List subscribedSkus - Microsoft Graph v1.0 | Microsoft Learn
Direct License Assignment optional LicenseAssignment.ReadWrite.All User.ReadWrite.All Directory.ReadWrite.All user: assignLicense - Microsoft Graph v1.0 | Microsoft Learn
List Groups and Members optional GroupMember.Read.All GroupMember.ReadWrite.All List groups - Microsoft Graph v1.0 | Microsoft Learn
Edit Group Members optional :paperclip: Ownership of selected groups GroupMember.ReadWrite.All Add members - Microsoft Graph v1.0 | Microsoft Learn
Update Usage Location optional LicenseAssignment.ReadWrite.All User.ReadWrite.All Directory.ReadWrite.All Update user - Microsoft Graph v1.0 | Microsoft Learn
Managing Teams Devices optional TeamworkDevice.ReadWrite.All List teamworkDevices - Microsoft Graph beta | Microsoft Learn
Reading PSTN Records for Utilization Reports & Call Record Finder optional CallRecords.Read.All List callRecords - Microsoft Graph v1.0 | Microsoft Learn
Create Users and Resource Accounts optional User.ReadWrite.All New-CsOnlineApplicationInstance (MicrosoftTeams) | Microsoft Learn

:asterisk: The Teams Communications Administrator is not a Graph Role, it is an Entra ID role that must be assigned via PIM.