Автоматизируйте Connect-AzureAD с помощью powershell в Azure Devops - PullRequest
2 голосов
/ 12 февраля 2020

Я не могу автоматизировать команду PowerShell Connect-AzureAD.

Чтобы получить идентификатор объекта пользователя, мне нужно автоматизировать операцию Connect-AzureAD, и для этого я использовал этот код:

Connect-AzureAD -TenantId $tenantId  -Verbose
$userObjectID = $(Get-AzureADUser -Filter "UserPrincipalName eq '$Owner'").ObjectId

Операция застряла в Connect-AzureAD. как решить это?

Ответы [ 2 ]

4 голосов
/ 12 февраля 2020

Я нашел решение и протестировал его.

Я запускаю эту задачу в Azure Devops конвейере; эта задача называется «Azure скрипт PowerShell», выполняемой с последней установленной версией.

Install-Module -Name "AzureAD" -Force
$context = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext
$graphToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://graph.microsoft.com").AccessToken
$aadToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://graph.windows.net").AccessToken
Write-Output "Hi I'm $($context.Account.Id)"
Connect-AzureAD -AadAccessToken $aadToken -AccountId $context.Account.Id -TenantId $context.tenant.id
1 голос
/ 12 февраля 2020

Connect-AzureAD по умолчанию попросит вас ввести логин и пароль во всплывающем окне.

Внутри Azure DevOps Connect-AzureAD по умолчанию стеки ожидают ввода от пользователя, и конвейер не завершается, поскольку пользователь не может ничего вводить.

Вам необходимо использовать:

Connect-AzureAD -Credential $Credential -TenantId $tenantId  -Verbose

Где $Credential - это PSCredential объект.

В идеале вам необходимо создать Service Principal в вашей Azure AD с разрешениями на доступ к Microsoft Graph и сгенерировать секретный ключ. После этого вы можете использовать идентификатор приложения и ключ участника вашей службы в качестве логина и пароля для $Credential.

В Azure DevOps не забудьте использовать секретные переменные или группу переменных, связанные с KeyVault, для защиты вашего ключа ,

...