Конвейеры групп безопасности Azure DevOps API

#powershell #azure-devops #azure-devops-rest-api

#powershell #azure-devops #azure-devops-rest-api

Вопрос:

Есть ли способ узнать, какая группа / пользователи имеют доступ и каковы разрешения для конкретного конвейера в проекте с REST API?

Ответ №1:

Я боюсь, что нет rest api, который может напрямую проверять разрешения группы / пользователей на определенный конвейер. Для получения желаемого необходимо использовать несколько rest API. Смотрите следующие шаги;

1, Получите группы через Groups list API. Получить всех пользователей через API списка пользователей.

Вам нужно получить subject descriptor группу / пользователя из результата.

например. "descriptor: "acs.Nzc4OWYwOWQtZTA1My00ZjJlLWJkZWUtMGM4Zjg0NzZhNGJj"

2. Используйте дескриптор subject из приведенного выше rest api, чтобы получить api rest идентификаторов identity descriptor via Identities — Read Identities

 https://vssps.dev.azure.com/{organization}/_apis/identities?subjectDescriptors={subjectDescriptors}amp;api-version=6.1-preview.1
  

Получить identity descriptor из результата:

например. "descriptor": "Microsoft.IdentityModel.Claims.ClaimsIdentity;7a394543-62fd-4274-a7d2-8fac775942b6\jtseng@vscsi.us"

3. Используйте списки управления доступом — Запрос Rest api для проверки разрешений для этой группы / пользователя с помощью вышеуказанного identity descriptor и токена

 GET https://dev.azure.com/{organization}/_apis/accesscontrollists/{securityNamespaceId}?token={token}amp;descriptors={descriptors}amp;includeExtendedInfo={includeExtendedInfo}amp;recurse={recurse}amp;api-version=6.1-preview.1
  

securityNamespaceId сборки является постоянным значением 33344d9c-fc72-4d6f-aba5-fa317101a7e9 . Все идентификаторы пространства securitynames смотрите здесь.

Формат токена projectId/buildDefinitionId

Например, URL-адрес запроса для получения разрешений для buildопределения может быть следующим:

 "https://dev.azure.com/myOrg/_apis/accesscontrollists/33344d9c-fc72-4d6f-aba5-fa317101a7e9?includeExtendedInfo=Trueamp;token=****-****-4fa8-b2f1-0ee8f4fc82c5/87amp;descriptors=Microsoft.TeamFoundation.ServiceIdentity;bfbbe64a-653b-47f8-8f74-a56680a9bc6a:Build:39e13f04-cb4e-4fa8-b2f1-0ee8f4fc82c5amp;api-version=6.1-preview.1"
  

Затем вы получите результат разрешения, приведенный extendedInfo ниже:

введите описание изображения здесь

Чтобы понять значение разрешения (например. 3 ниже) в extendedInfo

 extendedInfo":  {"effectiveAllow":  3}
  

Вы можете проверить пространства имен безопасности — Запрос rest api. См. Ниже имя разрешения и его бит для построения пространств имен безопасности.

   bit name                           displayName                           namespaceId                         
  --- ----                           -----------                           -----------                         
    1 ViewBuilds                     View builds                           00000000-0000-0000-0000-000000000000
    2 EditBuildQuality               Edit build quality                    00000000-0000-0000-0000-000000000000
    4 RetainIndefinitely             Retain indefinitely                   00000000-0000-0000-0000-000000000000
    8 DeleteBuilds                   Delete builds                         00000000-0000-0000-0000-000000000000
   16 ManageBuildQualities           Manage build qualities                00000000-0000-0000-0000-000000000000
   32 DestroyBuilds                  Destroy builds                        00000000-0000-0000-0000-000000000000
   64 UpdateBuildInformation         Update build information              00000000-0000-0000-0000-000000000000
  128 QueueBuilds                    Queue builds                          00000000-0000-0000-0000-000000000000
  256 ManageBuildQueue               Manage build queue                    00000000-0000-0000-0000-000000000000
  512 StopBuilds                     Stop builds                           00000000-0000-0000-0000-000000000000
 1024 ViewBuildDefinition            View build pipeline                   00000000-0000-0000-0000-000000000000
 2048 EditBuildDefinition            Edit build pipeline                   00000000-0000-0000-0000-000000000000
 4096 DeleteBuildDefinition          Delete build pipeline                 00000000-0000-0000-0000-000000000000
 8192 OverrideBuildCheckInValidation Override check-in validation by build 00000000-0000-0000-0000-000000000000
16384 AdministerBuildPermissions     Administer build permissions          00000000-0000-0000-0000-000000000000
  

Значение effectiveAllow является суммой битов для разрешенных разрешений. В приведенном выше примере. эффективным решением является 3 . Итак, разрешения для этой группы ViewBuilds -->allow и EditBuildQuality-->allow

Надеюсь, это поможет!

Комментарии:

1. Спасибо за совет. Я собираюсь попробовать этот способ 🙂

2. Привет @Baequiraheal У вас была возможность попробовать вышеуказанное решение? Как все прошло?

3. Я понял, что это можно сделать с помощью нескольких иерархических запросов. Я могу опубликовать решение позже завтра, если оно может быть кому-то полезно 🙂 Было бы сложно суммировать биты и выяснить, каковы точные предпосылки.

4. Привет, @Baequiraheal. Было бы здорово, если бы вы могли поделиться своим решением. Спасибо!