Перевести дескрипторы ACL в имена групп безопасности - PullRequest
0 голосов
/ 17 апреля 2019

При использовании конечной точки безопасности API REST AzDO я пытаюсь определить, какой словарь ACE в списке контроля доступа принадлежит определенной группе безопасности.

Ссылка на документацию: https://docs.microsoft.com/en-us/rest/api/azure/devops/security/access%20control%20lists/query?view=azure-devops-rest-5.0

вывод JSON включает в себя раздел под названием «acesDictionary».Каждый элемент в этом разделе содержит ключ «дескриптор».

Пример:

{
            "inheritPermissions": false,
            "token": "a0d66bdf-2d5a-48a5-822b-1d6c4e8f20a2",
            "acesDictionary": {
                "Microsoft.TeamFoundation.ServiceIdentity;53bed6f5-352c-4160-b88e-275616c09042:Build:6b1dcbeb-af9b-4218-ac72-fc84b6dce8de": {
                    "descriptor": "Microsoft.TeamFoundation.ServiceIdentity;53bed6f5-352c-4160-b88e-275616c09042:Build:6b1dcbeb-af9b-4218-ac72-fc84b6dce8de",
                    "allow": 8225,
                    "deny": 0
                }.......truncated.

Путем проб и ошибок я смог определить, что один из элементов изменяет разрешение для участников проекта для конкретного конвейера выпуска.Чего я не могу понять, так это как перевести «дескриптор» в эквивалентное [ProjectName] SecurityGroupName.Мне нужно быть в состоянии сделать это, чтобы я мог изменить разрешение с помощью сценария для десятков проектов с десятками конвейеров выпуска и сборки каждого.

Любой совет относительно того, какую конечную точку использовать, будет весьма полезен.

1 Ответ

0 голосов
/ 19 апреля 2019

Идентификатор дескриптора можно найти с помощью этого недокументированного API:

Отказ от ответственности : Любой API, который не является публично документированным, может быть изменен в любое время.

https://vssps.dev.azure.com/{organization}/_apis/identities?descriptors={IdentityDescriptor}

Оттуда вы можете получить группу безопасности из ProviderDisplayName.

Пример ответа:

{  
Id:"5b250e58-8dbf-4111-8eab-8735e1058a11",
Descriptor:{  
  IdentityType:"Microsoft.TeamFoundation.Identity",
  Identifier:"S-1-9-2551374245-3827430512-2595430990-2155723759-1767818319-0-0-0-0-3"
},
ProviderDisplayName:"[ExampleProjectName]\Project Valid Users",
CustomDisplayName:null,
DisplayName:"[ExampleProjectName]\Project Valid Users",
IsActive:true,
UniqueUserId:0,
IsContainer:true,
Members:[ ],
MemberOf:[ ],
Properties:{  
   SchemaClassName:"Group",
   Description:"Members of this group have access to the team project.",
   Domain:"vstfs:///Classification/TeamProject/13f75242-3248-4999-a76c-47f6ec2580a4",
   Account:"Project Valid Users",
   SecurityGroup:"SecurityGroup",
   SpecialType:"EveryoneApplicationGroup",
   ScopeId:"70f521e4-b39a-4422-807d-bbef695ec44f",
   ScopeType:"TeamProject",
   LocalScopeId:"13g75242-3248-4999-a76c-47f6ec2580a4",
   SecuringHostId:"23ad9cb9-521b-46c2-a7b0-fbd454ac7275",
   ScopeName:"ExampleProjectName",
   VirtualPlugin:""
 }
...