将 ACL 描述符转换为安全组名称

Translate ACL Descriptors to Security Group names

使用 AzDO REST API 安全端点时,我试图确定访问控制列表中的哪个 ACE 字典属于特定安全组。

Link 至文档:https://docs.microsoft.com/en-us/rest/api/azure/devops/security/access%20control%20lists/query?view=azure-devops-rest-5.0

JSON 输出包括一个名为 "acesDictionary" 的部分。此部分中的每个元素都包含一个 "descriptor" 键。

示例:

{
            "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.

通过反复试验,我已经能够确定其中一个元素修改了特定发布管道的项目贡献者的权限。我想不通的是如何将 "descriptor" 转换为等效的 [ProjectName]SecurityGroupName。我需要能够执行此操作,以便我可以通过脚本修改数十个项目的权限,每个项目都有数十个发布和构建管道。

如能提供有关使用哪个端点的任何建议,我们将不胜感激。

您可以使用这个未记录的 API:

找到描述符的身份

免责声明:任何未公开记录的API随时可能更改。

https://vssps.dev.azure.com/{组织}/_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:""
 }