В моем конвейере выпуска я запускаю задачу Azure Cli со сценарием PowerShell. В сценарии я хочу предоставить текущему поставщику услуг конвейера разрешение списка секретов для одного хранилища ключей Azure.
Для этого мне понадобится ObjectId для текущего конвейера SP. Оказывается, это самое сложное. Настройки конвейера позволяют возвращать только PrincipaleId, тогда я попробовал az ad sp show --id $env:servicePrincipalId --query objectId -o tsv
. Однако это всегда возвращает пустую строку, я думаю, поскольку конвейер аутентифицируется токеном, Azure не позволяет ему получать информацию о себе.
Интересно, как я могу получить этот волшебный ObjectId для текущего конвейера, кроме как просто передать значение из переменной конвейера
Это была проблема со значением параметра "objectId". Я попытался воспроизвести то же самое на портале Azure. Вместо использования objectId используйте параметр id, он будет работать.
az ad sp show *********** --query id -o tsv
Повторил то же самое в портале.
вот детали принципала службы:
Шаг 2:
запустите команду с параметром objectId, вывод пуст. Когда мы обновляем с помощью «id», он работает, как и ожидалось.
MS действительно должна исправить это, имя свойства — «objectId», и вы действительно можете запросить его, используя «id»...
Ах, это может быть ошибка с определенной версией Azure CLI. objectId работает в версии 2.34.1, но не в версии 2.42.0
Да, это может быть ошибка для Azure Cli версии 2.4X.X, я сообщил об этом в MS: github.com/Azure/azure-cli/issues/25259