Working with relaxed permissions is great when you are the owner and possibly either a one man band or small team but as soon as we need to consider larger teams, varying roles with approvals and degrees of access, authorisation becomes a real concern.
This article is a pick of findings and a memory jogger for me of some of the touch points encountered.
Authorisation
Security Groups
- Server (TFS and Azure DevOps Server)
- Organisation (also known as collection level)
- Project
Server-level
Organisation-level (Also referred to as Collection Level)
Default Permissions and Groups
Group name | Permissions | Membership |
---|
Project Collection Build Administrators |
Has permissions to administer build resources and permissions for the collection.
|
Limit this group to the smallest possible
number of users who need total
administrative control over build servers
and services for this collection.
|
Project Collection Build Service Accounts |
Has permissions to run build services for the collection.
| Limit this group to service accounts and groups that contain only service accounts. |
Project Collection Proxy Service Accounts |
Has permissions to run the proxy service for the collection.
|
Limit this group to service accounts and
groups that contain only service accounts.
|
Project Collection Service Accounts |
Has service level permissions for the collection and for Azure DevOps Server.
|
Contains the service account that was supplied during installation.
This group should contain only service accounts and
groups that contain only service accounts.
By default, this group is a member of Team Foundation Administrators and Team Foundation Service Accounts.
|
Project Collection Test Service Accounts |
Has test service permissions for the collection.
|
Limit this group to service accounts and groups that
contain only service accounts.
|
Project Collection Valid Users |
Has permissions to access team projects and view information in the collection.
|
Contains all users and groups that have been added anywhere within the collection. You cannot modify the membership of this group.
|
Project-level
Default Permissions and Groups
Group name | Permissions | Membership |
---|---|---|
Build Administrators | Has permissions to administer build resources and build permissions for the project. Members can manage test environments, create test runs, and manage builds. | |
Contributors | Has permissions to contribute fully to the project code base and work item tracking. The main permissions they don't have or those that manage or administer resources. | By default, the team group created when you create a project is added to this group, and any user you add to the team will be a member of this group. In addition, any team you create for a project will be added to this group by default, unless you choose a different group from the list. |
Readers | Has permissions to view project information, the code base, work items, and other artifacts but not modify them. | Assign to members of your organization who you want to provide view-only permissions to a project. These users will be able to view backlogs, boards, dashboards, and more, but not add or edit anything. Typically, these are members who aren't granted an access level (Basic, Stakeholder, or other level) within the organization or on-premises deployment. who want to be able to view work in progress. |
Project Administrators | Has permissions to administer all aspects of teams and project, although they can't create team projects. | Assign to users who manage user permissions, create or edit teams, modify team settings, define area an iteration paths, or customize work item tracking. |
Project Valid Users |
Has permissions to access the project.
If you set the View collection-level information permission to Deny or Not set for this group, no users will be able to access the project. |
Contains all users and groups that have been added anywhere within the project. You cannot modify the membership of this group.
|
{team name} | Has permissions to contribute fully to the project code base and work item tracking. The default Team group is created when you create a project, and by default is added to the Contributors group for the project. Any new teams you create will also have a group created for them and added to the Contributors group. You can grant permissions to administer team assets by adding members to the team administrator role. | Add members of the team to this group. |
Custom Security Groups
Group Membership
Adding Members
Linking DevOps Organisation to AAD
Teams
By default, the default team group and all other teams added to the project are included as members of the Contributors group. So adding new users to a team, automatically inherit Contributor permissions.
Permissions
- Server-level
- Collection-level (Also known as Organisational level)
- Project-level
- Object-level - set permissions on a file, folder, build pipeline,
or a shared query.
Organisational-level
Permission | Description |
---|---|
Administer build resource permissions | Can modify permissions for build pipelines at the organization or project collection-level. This includes: |
Administer process permissions | Can modify permissions for customizing work tracking by creating and customizing inherited processes.
Applies to Azure DevOps Services and Azure DevOps Server 2019. For Azure DevOps Services, users granted Basic and Stakeholder access are granted
this permission by default.
|
Administer Project Server integration | Can configure the integration of Azure DevOps Server and Project Server to enable data synchronization between the two server products. Applies to TFS 2017 and earlier versions only. |
Administer shelved changes | Can delete shelvesets created by other users. Applies when TFVC is used as the source control. |
Administer workspaces | Can create and delete workspaces for other users. Applies when TFVC is used as the source control. |
Alter trace settings | Can change the trace settings for gathering more detailed diagnostic information about Azure DevOps Web services. |
Create a workspace | Can create a version control workspace. Applies when TFVC is used as the source control. The Create a workspace permission is granted to all users as part of their membership within the Project Collection Valid Users group. |
Create new projects (formerly Create new team projects) | Can add Azure DevOps projects to an organization or project collection. Additional permissions may be required depending on your on-premises deployment. |
Create process | Can create an inherited process used to customize work tracking and Azure Boards. Applies to Azure DevOps Services and Azure DevOps Server 2019 and later versions. Azure DevOps Services users granted Basic and Stakeholder access are granted this permission by default. |
Delete field from account | Can delete a custom field that was added to a process. Applies to Azure DevOps Services and Azure DevOps Server 2019 and later versions. Azure DevOps Services users granted Basic and Stakeholder access are granted this permission by default. |
Delete process | Can delete an inherited process used to customize work tracking and Azure Boards. Applies to Azure DevOps Services and Azure DevOps Server 2019. Azure DevOps Services users granted Basic and Stakeholder access for Azure DevOps Services are granted this permission by default. |
Delete team project | Can delete Azure DevOps projects.Deleting a project will delete all data that is associated with the project. You cannot undo the deletion of a project except by restoring the collection to a point before the project was deleted. |
Edit collection-level information | Can add users and groups, and edit collection-level permissions for users and groups.
|
Edit process | Can edit a custom inherited process. Applies to Azure DevOps Services and Azure DevOps Server 2019. Azure DevOps Services users granted Basic and Stakeholder access for Azure DevOps Services are granted this permission by default. |
Make requests on behalf of others | Can perform operations on behalf of other users or services. You should assign this permission only to on-premises service accounts. |
Manage build resources | Can manage build computers, build agents, and build controllers. |
Manage process template | Can download, create, edit, and upload process templates. A process template defines the building blocks of the work item tracking system as well as other sub-systems you access through Azure Boards. Applies to Azure DevOps Servers only. |
Manage test controllers | Can register and de-register test controllers. |
Trigger events | Can trigger project alert events within the collection. Assign only to service accounts.Users with this permission can't remove built-in collection level groups such as Project Collection Administrators. |
Use build resources | Can reserve and allocate build agents. Assign only to service accounts for build services. |
View build resources | Can view, but not use, build controllers and build agents that are configured for an organization or project collection. |
View instance-level information or View collection-level information | Can view project collection-level group membership and permissions.If you set the View instance-level information permission to Deny or Not set for this group, no users will be able to access projects in the organization or project collection. |
View system synchronization information | Can call the synchronization application programming interfaces. Assign only to service accounts. |
Project-level
Permission | Description |
---|---|
Bypass rules on work item updates |
Users with this permission can save a work item that ignores rules, such as assign value rules or conditional rules, defined for the work item type. Scenarios where this is useful are migrations where you don't want to update the by/date fields on import, or when you want to skip the validation of a work item.
Rules can be bypassed in one of two ways. The first is through the Work Items - update REST API and setting the
bypassRules parameter to true . The second is through the client object model, by initializing in bypassrules mode (initialize WorkItemStore with WorkItemStoreFlags.BypassRules ).
Users granted Basic and Stakeholder access are granted this permission by default.
|
Change process of project | Can change the Inheritance process for a project. To learn more, see Create and manage inherited processes. Applies to Azure DevOps Services and Azure DevOps Server 2019. Azure DevOps Services users granted Basic and Stakeholder access are granted this permission by default. |
Create tag definition | Can add tags to a work item. By default, all members of the Contributors group have this permission.All users granted Stakeholder access for a private project can only add existing tags, not add new tags, even if the Create tag definition permission is set to Allow. This is part of the Stakeholder access settings. Azure DevOps Services users granted Stakeholder access for a public project are granted this permission by default. |
Create test runs | Can add and remove test results and add or modify test runs. To learn more, see Control how long to keep test results and Run manual tests. |
Delete and restore work items
or Delete work items in this project
| Can mark work items in the project as deleted. Azure DevOps Services users granted Stakeholder access for a public project are granted this permission by default.
|
Delete shared Analytics view | Can delete Analytics views that have been saved under the Shared area. Applies to Azure DevOps Services and Azure DevOps Server 2019. |
Delete project | Can delete a project from an organization or project collection. |
Delete test runs | Can delete a test run. |
Edit project-level information | Can edit project level permissions for users and groups.
|
Edit shared Analytics view | Can create and modify shared Analytics views. Applies to Azure DevOps Services and Azure DevOps Server 2019. |
Manage project properties | Can provide or edit metadata for a project. For example, a user can provide high-level information about the contents of a project. Changing metadata is supported through the Set project properties REST API. |
Manage test configurations | Can create and delete test configurations. |
Manage test environments | Can create and delete test environments. |
Move work items out of this project | Can move a work item from one project to another project within the collection. Applies to Azure DevOps Services and Azure DevOps Server 2019. Users granted Stakeholder access for a public project are granted this permission by default. |
Permanently delete work items in this project | Can permanently delete work items from this project. Azure DevOps Services users granted Stakeholder access for a public project are granted this permission by default. |
Rename project | Can change the name of the project. |
Suppress notifications for work item updates |
Users with this permission can update work items without generating notifications. This is useful when performing migrations of bulk updates by tools and want to skip generating notifications.
Consider granting this permission to service accounts or users who have been granted the Bypass rules on work item updates permission. You can set the
suppressNotifications parameter to true when updating working via Work Items - update REST API.
Users granted Stakeholder access for a public project are granted this permission by default.
|
Update project visibility | Can change the project visibility from private to public or public to private. Applies to Azure DevOps Services only. |
View analytics | Can access data available from the Analytics service. For details, see Permissions required to access the Analytics service. Applies to Azure DevOps Services and Azure DevOps Server 2019. |
View project-level information | Can view project level group membership and permissions. |
View test runs | Can view test plans under the project area path. |
Object-level
Object level permissions are what they say on the tin. But it took me a while for the penny to drop. Each and every 'thing' we create in the portal is mostly defined as an object. For example, a build pipeline, a code branch, a release pipeline, file, folder etc. Each of these objects contain a more granular permission level by accessing the ellipses menu while the object is selected, which loads the familiar permissions dialog.Object-level permissions can be seen below, highlighting specific permissions applied to a selected build pipeline.
Once again, the same set of security groups determine what permissions are allowed, which as stated previously will cover most scenarios 99% of the time.
Also bear in mind many of the object-level permissions follow a hierarchical model. In the above release pipeline scenario, the same set of permissions can be set for all release pipelines as shown below:
The above highlights that for the area of interest, it is first worth checking whether object-level permissions apply to ensure you are setting the permission at the right level for your requirements. (see scopes below)
At the other end of the spectrum, below highlights the same permissions being applied to a stage within the same release pipeline:
At Assemblysoft we specialise in Custom Software Development tailored to your requirements. We have experience creating Booking solutions, as we did for HappyCamperVan Hire. You can read more here.
We can onboard and add value to your business rapidly. We are an experienced Full-stack development team able to provide specific technical expertise or manage your project requirements end to end. We specialise in the Microsoft cloud and .NET Solutions and Services. Our developers are Microsoft Certified. We have real-world experience developing .NET applications and Azure Services for a large array of business domains. If you would like some assistance with Azure | Azure DevOps Services | Blazor Development or in need of custom software development, from an experienced development team in the United Kingdom, then please get in touch, we would love to add immediate value to your business.
Assemblysoft - Your Safe Pair of Hands
Another example is Git Repos, which also have a set of Object-level permissions, accessed via the project settings action bar.
There are also
- Role - managed through a security role
- Team - managed by an administrator team
Scopes
Note* Project Collection Administrators are granted all collection-level permissions. Other collection-level groups have select permission assignments.
Permission Settings
The most time consuming part of changing permissions in my experience has been finding the correct permission to apply. The reference section contains a handy Permissions lookup guide for Azure DevOps link which is essentially an index for specific permissions, grouped by Organisation | Project | Object | Role | Team
Access Levels
- Basic
- VS Enterprise
- Stakeholder
Membership and Permission Management at a glance
Conclusion
If you would like some hands on expertise for your business feel free to reach via my company assemblysoft or checkout some other musings via my blazor.net and azure blog here carlrandall.net
References
https://docs.microsoft.com/en-us/azure/devops/organizations/security/data-protection?view=azure-devops