web-dev-qa-db-ja.com

Azure DevopsでPowerShellを使用してConnect-AzureADを自動化する

Connect-AzureAD powershellコマンドを自動化できません。

ユーザーobjectIDを取得するために、操作Connect-AzureADを自動化する必要があり、そのために次のコードを使用しました。

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

操作がConnect-AzureADでスタックしました。これを解決する方法?

2
Makram

解決策を見つけてテストしました。

このタスクは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
5
Makram

Connect-AzureADデフォルトでは、ポップアップウィンドウでログインとパスワードの入力を求められます。

Azure DevOps Connect-AzureADの内部では、ユーザーが何も入力できないため、ユーザーとパイプラインからの入力を待機するスタックはデフォルトで終了しません。

使用する必要があります:

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

ここで、$CredentialPSCredentialオブジェクトです。

理想的には、Microsoft Graphにアクセスして秘密キーを生成する権限を持つAzure ADでサービスプリンシパルを作成する必要があります。その後、$Credentialのログインとパスワードとして、サービスプリンシパルのアプリケーションIDとキーを使用できます。

Azure DevOpsでは、KeyVaultにリンクされたシークレット変数またはVariablesグループを使用してキーを保護することを忘れないでください。

1
Ivan Ignatiev