Как подключиться к Azure через модули PowerShell, используя субъект-службу зарегистрированного приложения?

Мне нужно создать сценарий powershell, который запрашивает ресурсы Azure. У меня есть регистрация приложения.

Регистрация приложений дает нам следующую информацию:

      
    # --- APP REGISTRATION OUTPUT
    # appId = "***** APP ID *******"
    # displayName = "**** APP Name **** "
    # password = "***** SECRET *******"
    # tenant = "**** TENANT ID *****"

Мне нужно использовать эти учетные данные для доступа к Azure через сценарий PowerShell.

Я пробовал следующее:

      $Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ApplicationId, $SecuredPassword
Connect-AzAccount -ServicePrincipal -TenantId $TenantId -Credential $Credential

Но я получаю сообщение об ошибке:

       … Account -ServicePrincipal -TenantId $TenantId -Credential $Credential
     |  ~~~~~~~~~~~
     | Cannot bind argument to parameter 'Credential' because it is null.

Я не думаю, что то, что я делаю, ненормально. Регистрация приложений дает нам возможность разрешить приложениям (приложениям PowerShell!) взаимодействовать с данным арендатором. Или я ошибаюсь?

Я не хочу, чтобы приложение входило в систему каждый раз, используя учетную запись (т.е. чтобы окно браузера открывалось всякий раз, когда запускается скрипт).

Что я делаю не так?

2 ответа

Я воспроизвел в своей среде, и у меня сработал нижеприведенный скрипт:

      $appId ="53f3ed85-70c1c2d4aeac"   
$pswd="55z8Q~_N9SRajza8R"  
$t = "72f988bf-cd011db47"
[ValidateNotNullOrEmpty()]$pswd="55z8BU4oik.kVrZWyaK8R" $sp = ConvertTo-SecureString -String $pswd -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $appId, $sp
Connect-AzAccount -ServicePrincipal -TenantId $t -Credential $Credential

Выход:

введите описание изображения здесь

Вам нужно преобразовать секретное значение (пароль) в защищенный пароль, как указано выше, тогда он будет работать так, как работал мой.

Вы пропустили преобразование пароля в защищенную строку. Вы можете убедиться в этом в своем$credentialпеременная.

      $ApplicationId = "0000-0000-0000-0000"
$Password = "000000000000000"
$TenantId = "0000-0000-000-000"
$subscriptionId = "0000-0000-0000-0000"
$SecuredPassword = ConvertTo-SecureString -AsPlainText $Password -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ApplicationId, $SecuredPassword
Connect-AzAccount -ServicePrincipal -TenantId $TenantId -Credential $Credential
$sub = Get-AzSubscription -SubscriptionId $subscriptionId
Set-AzContext -Subscription $sub
Другие вопросы по тегам