Скрипт для получения функциональной клавиши azure и помещения ее в keyvault с помощью встроенной задачи azure powershell в azure devops - PullRequest
0 голосов
/ 21 апреля 2020

Я выполнил следующие команды в azure Задача встроенного скрипта PowerShell с версией 3.1.0 в Azure DevOps.

$accountInfo = az account show

$accountInfoObject = $accountInfo | ConvertFrom-Json

$subscriptionId  = $accountInfoObject.id

$resourceGroup = "BZE1ERG01"

$functionName = "BAZE1EFA01"

$functionkeylist = az rest --method post --uri "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.Web/sites/$functionName/host/default/listKeys?api-version=2018-11-01"

$keylistobject = $functionkeylist | ConvertFrom-Json
$functionKey = $keylistobject.functionKeys.default    

$tmpSecret1 = ConvertTo-SecureString $functionKey -AsPlainText -Force

Set-AzKeyVaultSecret -VaultName 'azu-qa-keyvault' -Name functionkeysecret -SecretValue $tmpSecret1

Скриншот DevOps

enter image description here

Я получаю сообщение об ошибке

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Ошибка выше Please run 'az login' to setup account произошла из-за того, что вы выполняли azure команды cli (например, az account show) внутри azure задачи powershell.

Так что если вы хотите запускать azure команды cli внутри Azure powershell. Вам нужно будет запустить az login для входа. например. az login --service-principal -u <app-url> -p <password-or-cert> --tenant <tenant>. Если у вас нет сервисного принципала. Вы можете выполнить подробные шаги в этом документе .

Пожалуйста, проверьте документ Войдите в систему с помощью Azure CLI для получения дополнительной информации.

Обновление: используйте powershell для вызова Azure rest API.

Вы можете использовать Invoke-RestMethod, чтобы сделать Azure rest API call. Вам все равно нужно будет обеспечить аутентификацию для вызовов API. Вы можете обратиться к приведенному ниже примеру из этого блога .

function Get-AccessToken {
    $context = Get-AzContext
    $profile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
    $profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($profile)
    $token = $profileClient.AcquireAccessToken($context.Subscription.TenantId)
    return $token.AccessToken
}
$subscriptionid = "subscriptionid"
$rg_name = "off-rg"
$rm_endpoint = "https://management.azure.com"
$authHeader = @{
    'Content-Type'  = 'application/json'
    'Authorization' = 'Bearer ' + (Get-AccessToken)
}

$uri = "$rm_endpoint/subscriptions/$subscriptionid/resourceGroups/$rg_name/providers/Microsoft.Compute/virtualMachines?api-version=2019-03-01"

$respone = Invoke-RestMethod -Method Get -Headers $authHeader -Uri $uri

Вы также можете проверить блог Access Azure REST API с помощью PowerShell для получения дополнительной информации.

0 голосов
/ 21 апреля 2020

Вы получаете это, потому что похоже, что вы звоните, используя az cli, не аутентифицировано. После docs :

Используйте эту задачу для запуска сценария PowerShell в среде Azure. Контекст Azure аутентифицируется с помощью предоставленного Azure соединения службы Resource Manager.

Вы должны использовать простой модуль PowerShell Az или, если вы хотите использовать az li, рассмотрите возможность использования Azure CLI task , которая позаботится об авторизации. Вы можете использовать az keyvault secret set для создания / обновления секрета в KeyVault. Пожалуйста, ознакомьтесь с документацией для более подробной информации. Конечно, весь код powershell действителен в этой задаче.

Похоже, что аутентификация для одного не подходит для другого. Вы также можете войти в az cli из своей задачи со следующим синтаксисом:

az login --service-principal --username <app-id> --password <password> --tenant <tenant-id>
...