Ошибка аутентификации в Azure Automation с сертификатами — код Powershell

#powershell #azure #automation #certificate

#powershell #azure #автоматизация #сертификат

Вопрос:

Сегодня я столкнулся с другой проблемой, связанной с Powershell и Azure Automation.

Давайте посмотрим… Я намерен создать автоматическое развертывание, которое deploy выполняет сбор и сохранение данных из и в мои большие двоичные объекты, и после всех этих процессов удалите это развертывание.

Итак, я разработал это на своей консоли powershell, и у меня не было проблем. Дело доходит до того, что я пытаюсь «импортировать» свой скрипт в автоматизацию. Я пишу «импорт» в скобках, потому что я только что скопировал свой код в консоль автоматизации.

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

Прежде всего, я создал свои сертификаты, один с расширением .cer, а другой с расширением .pfx, ок.

Как только я загрузил первый сертификат в разделе «Управление сертификатами» (в меню настроек) Я создал ресурсы:

Сначала учетная запись, куда я помещаю другой сертификат, который я сгенерировал (.PFX).

После этого я создал последний ресурс, подключенный, где я написал имя сертификата там, где это было необходимо, а также идентификатор подписки.

Теперь, после этих пунктов, мне предлагается работать с моей подпиской Azure, используя фрагменты в автоматизации, некоторые из этих фрагментов не распознаются Azure, поэтому я использовал «InlineScript» для записи тех, которые не были распознаны.

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

Я собираюсь вставить сюда первую часть моего скрипта:

 workflow testing2
  

{

 # Specify Azure Subscription Name
$subName = 'AzureConnection'

# Connect to Azure Subscription
Connect-Azure `
    -AzureConnectionName $subName

Select-AzureSubscription `
    -SubscriptionName $subName 

inlineScript{

    # VM related variables

    $pwd = "xxxxxxxxx"
    $aun = "LrootA"
    $VMimage = "a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201405.01-en.us-127GB.vhd"

    # CSExtension Version

    $CSEVersion = Get-AzureVMAvailableExtension | Where { $_.ExtensionName -like "*Custom*" } | Select Version

}
  

}

Ошибка, которую я получаю при тестировании этого скрипта, является следующей:

23.06.2014 2:20:56 вечера, ошибка: Get-AzureVMAvailableExtension : текущая подписка не была назначена. Используйте Select-AzureSubscription -Current, чтобы установить текущую подписку. При тестировании 2:19 char:19 CategoryInfo : CloseError: (:) [Get-AzureVMAvailableExtension], исключение FullyQualifiedErrorId: Microsoft.WindowsAzure.Команды.ServiceManagement.IaaS.Расширения.GetAzureVMAvailableExtensionCommand 23.06.2014 2:20:56 ВЕЧЕРА, Ошибка: New-AzureVMConfig : необходимо указать среднее местоположение или установить текущую учетную запись хранения с помощью Set-AzureSubscription. При тестировании2:19 символ:19

Как мы можем видеть, в этих ошибках мы заметили, что есть некоторые проблемы с подпиской.

Вместо этого используйте:

 # Specify Azure Subscription Name
$subName = 'AzureConnection'

# Connect to Azure Subscription
Connect-Azure `
    -AzureConnectionName $subName

Select-AzureSubscription `
    -SubscriptionName $subName 
  

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

Итак… Как я могу это исправить?

Заранее спасибо, надеюсь, что я выразился ясно.

Ответ №1:

Я думаю, проблема в том, что вы вызываете Select-AzureSubscription вне inlinescript. Select-AzureSubscription задает переменную сеанса, чтобы указывать командлетам Azure, к какой подписке подключаться, и все действия в runbook (рабочий процесс PowerShell) выполняются в разных сеансах. Обходным решением является InlineScript, где все в одном inlinescript выполняется в одном сеансе в контексте PowerShell. Таким образом, включение вызова Select-AzureSubscription должно поместить его в правильный сеанс.

Также появляется командлет Get-AzureVMAvailableExtension, который, в частности, взаимодействует с хранилищем Azure и поэтому требует, чтобы вы установили учетную запись хранилища Azure в файле данных подписки. Connect-Azure в настоящее время не делает этого за вас.

Вот runbook, я думаю, будет работать:

 workflow testing2
{

    # Specify Azure Subscription Name
    $subName = 'AzureConnection'

    # Specify the Azure Storage Account to use
    $StorageAccountName = 'MyStorageAccount'

    # Connect to Azure Subscription
    Connect-Azure `
        -AzureConnectionName $subName

    InlineScript {

        Select-AzureSubscription `
            -SubscriptionName $Using:subName

        Set-AzureSubscription ` 
            -SubscriptionName $Using:subName ` 
            -CurrentStorageAccount $Using:StorageAccountName 

        # VM related variables

        $pwd = "xxxxxxxxx"
        $aun = "LrootA"
        $VMimage = "a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201405.01-en.us-127GB.vhd"

        # CSExtension Version
        $CSEVersion = Get-AzureVMAvailableExtension | Where { $_.ExtensionName -like "*Custom*" } | Select Version
    }
}
  

Ответ №2:

У меня была аналогичная проблема, когда я получил ошибку: подписка «Subscription A» не существует, хотя я определил ее в том же скрипте.

Однако это не сработало, поэтому я создал сертификат и загрузил его как «ресурс» в книге автоматизации на верхней правой вкладке. Затем добавлен этот код для ссылки на assetname (сертификат) Я определил ранее. Я также создал «строковые» значения для идентификатора подписки и имени подписки.

Итак, мой сценарий автоматизации выглядит примерно так, чтобы выбрать подписку:

$subscriptionName = Get-AutomationVariable -Name «SubscriptionName»

$subscriptionID = Get-AutomationVariable -Name «SubscriptionID»

$certificateName = Get-AutomationCertificate -Имя «CertificateName»

$storageaccount = Get-AutomationVariable -Name «StorageAccount»

Set-AzureSubscription -SubscriptionName $subscriptionName -SubscriptionId $subscriptionID -Сертификат $certificateName Выберите -AzureSubscription $subscriptionName

Удачи, надеюсь, это поможет или укажет вам правильное направление.

Вот ссылка, которую я нашел весьма полезной: http://devinknightsql.com/2014/06/18/setting-up-automation-in-azure /