Предоставьте права встроенным пользователям Azure DevOps

Целый день гуглил, но решения не нашел. В Azure DevOps для каждого проекта создаются встроенные пользователи. Один из этих пользователей является пользователем агента сборки по умолчанию (обычно с именем <projectName> Build Service).

Я уже автоматизировал создание репозиториев и конвейеров с помощью REST API Azure DevOps. Следующим шагом будет предоставление определенных прав пользователю встроенного агента сборки. Я уже изо всех сил пытаюсь найти встроенного пользователя в API.

Так как же предоставить права этому пользователю с помощью REST API?

Цель состоит в том, чтобы добавить пользователя встроенного агента сборки по умолчанию в роль участника, чтобы он мог отправлять теги в репозитории.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
35
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете получить его с помощью Пользователи — список API:

GET https://vssps.dev.azure.com/{organization}/_apis/graph/users?api-version=6.0-preview.1

В ответе я вижу:

Ответ принят как подходящий

Give rights to Azure DevOps build-in Users

Вы можете использовать REST API Пользователи — список API:, чтобы получить идентификатор вашей группы.

        "subjectKind": "user",
        "domain": "Build",
        "principalName": "f0a50df8-5a11-41c3-8d7e-22180f923c80",
        "mailAddress": "",
        "origin": "vsts",
        "originId": "64b9d209-XXXXX-bb46ade01dc",
        "displayName": "MyTestProject Build Service (YourOrganizationName)",

originId — это идентификатор в приведенном ниже URL-адресе REST API.

Затем мы используем Identities API.

GET https://vssps.dev.azure.com/fabrikam/_apis/Identities/{id}?queryMembership=None

Затем получите дескриптор из ответа json .Descriptor.Identifier:

{
    "Id": "64b9d209-0deb-4d9c-9e8d-6bb46ade01dc",
    "Descriptor": {
        "IdentityType": "Microsoft.TeamFoundation.ServiceIdentity",
        "Identifier": "0a2bf5f-XXXXd-1e9006e97c76:Build:f0a50df8-5a11-41c3-8d7e-22180f923c80"
    },

Если у вас нет идентификатора группы, но есть отображаемое имя:

GET https://vssps.dev.azure.com/fabrikam/_apis/Identities?searchFactor=DisplayName&factorValue = {display name url encoded}&options=None&queryMembership=None

Затем получите дескриптор из ответа json [0].Descriptor.Identifier.

Теперь у нас есть Identity, мы можем использовать REST API Записи управления доступом — установка записей управления доступом, чтобы установить разрешение для этой группы:

POST https://dev.azure.com/{organization}/_apis/accesscontrolentries/{securityNamespaceId}?api-version=5.0

Тело запроса:

{ 
   "token":"repoV2/{projectId}/{repoId}/",
   "merge":true,
   "accessControlEntries":[ 
      { 
         "descriptor":"Microsoft.TeamFoundation.Identity;{groupIdentifier}",
         "allow":2,
         "deny":0,
         "extendedInfo":{ 
            "effectiveAllow":2,
            "effectiveDeny":0,
            "inheritedAllow":2,
            "inheritedDeny":0
         }
      }
   ]
}

Обратите внимание, что идентификатор в URL-адресе жестко закодирован, потому что он является константой. Но вы также можете получить из ответа

GET https://dev.azure.com/{organization}/_apis/securitynamespaces

Спасибо. Моя проблема заключалась в том, что пользователь службы сборки проекта (org) и пользователь службы сборки коллекции проектов (org) не появлялись в API-интерфейсе пользователей, НО они отображались в API-интерфейсе удостоверений с вашим предложенным запросом. Оттуда было легко идти.

Martin Hudasch 23.03.2022 12:09

Кстати, в вашем запросе идентичности параметрами являются searchFilter и filterValue, а не фактор ... Не могли бы вы исправить это в своем ответе?

Martin Hudasch 23.03.2022 12:10

Другие вопросы по теме