Удаленная и безопасная настройка серверов с помощью команды run (предварительная версия)
Команда run на серверах с поддержкой Azure Arc (общедоступная предварительная версия) использует агент подключенного компьютера для удаленного и безопасного запуска скрипта на серверах. Это может быть полезно для нескольких сценариев для устранения неполадок, восстановления, диагностика и обслуживания.
Поддерживаемая среда и конфигурация
Возможности. В настоящее время команда выполнения поддерживается с помощью Azure CLI и PowerShell.
Операционные системы: команда run поддерживает операционные системы Windows и Linux.
Среды: Run Command поддерживает среды, отличные от Azure, включая локальную среду, VMware, SCVMM, AWS, GCP и OCI.
Стоимость. Выполнение команды бесплатно, однако хранение скриптов в Azure может привести к выставлению счетов.
Конфигурация. Для выполнения команды не требуется дополнительная конфигурация или развертывание расширений. Версия агента подключенного компьютера должна быть 1.33 или выше.
Ограничение доступа к команде run с помощью RBAC
Для перечисления команд выполнения или отображения сведений о команде требуется Microsoft.HybridCompute/machines/runCommands/read
разрешение. Это разрешение имеется у встроенной роли Читатель и более высоких уровней.
Для выполнения команды требуется разрешение Microsoft.HybridCompute/machines/runCommands/write
. Роль администратора ресурсов подключенного компьютера Azure и более высокие уровни имеют это разрешение.
Можно использовать одну из встроенных ролей или создать пользовательскую роль для использования функции выполнения команд.
Блокировка команд выполнения локально
Агент подключенного компьютера поддерживает локальные конфигурации, позволяющие задать список разрешений или список блокировок. Дополнительные сведения см . в списках разрешений расширений и блоках .
Для Windows:
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"
Для Linux:
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"
Azure CLI
В следующих примерах используется az connectedmachine run-command для запуска скрипта оболочки на компьютере с Windows Azure.
Выполнение скрипта с помощью компьютера
Эта команда доставляет скрипт на компьютер, выполняет его и возвращает захваченные выходные данные.
az connectedmachine run-command create --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG" --script "Write-Host Hello World!"
Перечисление всех развернутых ресурсов RunCommand на компьютере
Эта команда возвращает полный список ранее развернутых команд выполнения вместе со своими свойствами.
az connectedmachine run-command list --machine-name "myMachine" --resource-group "myRG"
Получение состояния выполнения и результатов
Эта команда извлекает текущий ход выполнения, включая последние выходные данные, время начала и окончания, код выхода и состояние терминала выполнения.
az connectedmachine run-command show --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"
Примечание.
Поля выходных данных и ошибок instanceView
ограничены последними 4 КБ. Чтобы получить доступ к полному выводу и ошибке, вы можете перенаправить выходные данные и данные об ошибках в хранилище, добавив большие двоичные объекты, используя -outputBlobUri
и -errorBlobUri
параметры при выполнении команды выполнения.
Удаление ресурса RunCommand с компьютера
Удалите ресурс RunCommand, ранее развернутый на компьютере. Если выполнение скрипта все еще в процессе, выполнение будет завершено.
az connectedmachine run-command delete --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"
PowerShell
Выполнение скрипта с помощью компьютера
New-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Выполнение скрипта на компьютере с помощью параметра SourceScriptUri
OutputBlobUri
и ErrorBlobUri
являются необязательными параметрами.
New-AzConnectedMachineRunCommand -ResourceGroupName -MachineName -RunCommandName -SourceScriptUri “< SAS URI of a storage blob with read access or public URI>” -OutputBlobUri “< SAS URI of a storage append blob with read, add, create, write access>” -ErrorBlobUri “< SAS URI of a storage append blob with read, add, create, write access>”
Перечисление всех развернутых ресурсов RunCommand на компьютере
Эта команда возвращает полный список ранее развернутых команд выполнения вместе со своими свойствами.
Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine"
Получение состояния выполнения и результатов
Эта команда извлекает текущий ход выполнения, включая последние выходные данные, время начала и окончания, код выхода и состояние терминала выполнения.
Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" - MachineName "myMachine" -RunCommandName "RunCommandName"
Создание или обновление команды выполнения на компьютере с помощью SourceScriptUri (URL-адрес SAS BLOB-объекта хранилища)
Создайте или обновите команду запуска на компьютере Windows с помощью URL-адреса SAS большого двоичного объекта хранилища, содержащего скрипт PowerShell. SourceScriptUri
может быть полным URL-адресом SAS или общедоступным URL-адресом BLOB-объекта хранилища.
New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Примечание.
URL-адрес SAS должен предоставить доступ для чтения к большому двоичному объекту. Для URL-адреса SAS предлагается срок действия 24 часа. URL-адреса SAS можно создать на портал Azure с помощью параметров BLOB-объектов или маркера SAS.New-AzStorageBlobSASToken
При создании маркера SAS с помощью New-AzStorageBlobSASToken
URL-адреса SAS = "базовый URL-адрес большого двоичного объекта" + "?" + "маркер SAS из New-AzStorageBlobSASToken
"
Получение представления экземпляра команд запуска для компьютера после создания или обновления команды выполнения
Получите команду run для компьютера с представлением экземпляра. Представление экземпляра содержит состояние выполнения команды выполнения (Успешное выполнение, сбой и т. д.), код выхода, стандартный вывод и стандартную ошибку, созданную при выполнении скрипта с помощью команды run. Ненулевая ошибка ExitCode указывает на неудачное выполнение.
Get-AzConnectedMachineRunCommand -ResourceGroupName MyRG -MachineName MyMachine -RunCommandName MyRunCommand
InstanceViewExecutionState
: состояние скрипта запуска команды пользователя. Обратитесь к этому состоянию, чтобы узнать, был ли сценарий успешным или нет.
ProvisioningState
: состояние завершения подготовки общего расширения (может ли платформа расширений активировать скрипт команды запуска).
Создание или обновление команды run на компьютере с помощью SourceScript (текст скрипта)
Создайте или обновите команду run на компьютере, передавая содержимое скрипта непосредственно параметру -SourceScript
. Используется ;
для разделения нескольких команд.
New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Создание или обновление команды запуска на компьютере с помощью OutputBlobUri, ErrorBlobUri для потоковой передачи стандартных выходных данных и стандартных сообщений об ошибках для вывода и добавления БОЛЬШИХ двоичных объектов.
Создайте или обновите команду run на компьютере и потоковую передачу стандартных выходных данных и стандартных сообщений об ошибках для вывода и добавления больших двоичных объектов.
New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 - MachineName MyMachine -RunCommandName MyRunCommand3 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"-OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri <ErrorBlobUri>
Примечание.
Выходные и ошибки большие двоичные объекты должны быть типом AppendBlob, а URL-адреса SAS должны предоставлять доступ для чтения, добавления, создания, записи в большой двоичный объект. Для URL-адреса SAS предлагается срок действия 24 часа. Если выходные данные или большой двоичный объект ошибки не существует, будет создан большой двоичный объект типа AppendBlob. URL-адреса SAS можно создать на портал Azure с помощью параметров большого двоичного объекта или маркера SAS.New-AzStorageBlobSASToken
Создание или обновление команды run на компьютере в качестве другого пользователя с помощью параметров RunAsUser и RunAsPassword
Создайте или обновите команду run на компьютере в качестве другого пользователя и RunAsUser
RunAsPassword
параметров. Для правильной работы runAs обратитесь к администратору компьютера и убедитесь, что пользователь добавлен на компьютере, у пользователя есть доступ к ресурсам, к которым обращается команда run (каталоги, файлы, сеть и т. д.), а в случае с компьютером Windows служба "Вторичный вход" запущена на компьютере.
New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScript "id; echo HelloWorld" -RunAsUser myusername -RunAsPassword mypassword
Создание или обновление команды выполнения на ресурсе компьютера с помощью SourceScriptUri (URL-адрес SAS BLOB-объекта хранилища)
Создайте или обновите команду запуска на ресурсе компьютера Windows с помощью URL-адреса SAS большого двоичного объекта хранилища, содержащего скрипт PowerShell.
New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Примечание.
URL-адрес SAS должен предоставить доступ для чтения к большому двоичному объекту. Срок действия 24 часов предлагается для URL-адреса SAS. URL-адреса SAS можно создать на портал Azure с помощью параметров BLOB-объектов или маркера SAS.New-AzStorageBlobSASToken
Если вы создаете маркер SAS с помощью New-AzStorageBlobSASToken
, формат URL-адреса SAS: базовый URL-адрес БОЛЬШОго двоичного объекта + "?" + маркер SAS из New-AzStorageBlobSASToken
.
Создание или обновление команды run на компьютере с помощью ScriptLocalPath (локальный файл скрипта)
Создайте или обновите команду запуска на компьютере с помощью локального файла скрипта, который находится на клиентском компьютере, где выполняется командлет.
New-AzMachineRunCommand -ResourceGroupName MyRG0 -VMName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"
Создание или обновление команды run на экземпляре компьютера с помощью параметров и параметров ProtectedParameter (общедоступные и защищенные параметры для скрипта)
Используйте ProtectedParameter для передачи конфиденциальных входных данных скрипту, таким как пароли, ключи и т. д.
Windows: параметры и protectedParameters передаются в скрипт в виде аргументов, передаваемых в скрипт, и выполняются следующим образом:
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
Linux: именованные параметры и его значения задаются в конфигурации среды, которая должна быть доступна в скрипте .sh. Для аргументов без имен передайте пустую строку для ввода имени. Бессерверные аргументы передаются в скрипт и выполняются следующим образом:
myscript.sh publicParam1value publicParam2value secret1value secret2value
Удаление ресурса RunCommand с компьютера
Удалите ресурс RunCommand, ранее развернутый на компьютере. Если выполнение скрипта все еще в процессе, выполнение будет завершено.
Remove-AzConnetedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -RunCommandName "RunCommandName"
Выполнение командных операций
Команда run на серверах с поддержкой Azure Arc поддерживает следующие операции:
Операция | Description |
---|---|
Создание | Операция создания команды выполнения. Выполняется команда выполнения. |
Удаление | Операция удаления команды выполнения. Если она запущена, удаление также остановит команду выполнения. |
Получить | Операция для получения команды выполнения. |
List | Операция для получения всех команд выполнения сервера с поддержкой Azure Arc. |
Обновить | Операция обновления команды выполнения. Это останавливает предыдущую команду выполнения. |
Примечание.
Выходные и ошибки большие двоичные объекты перезаписываются при каждом выполнении скрипта команды выполнения.
Пример сценариев
Предположим, у вас есть сервер с поддержкой Azure Arc с именем 2012DatacenterServer1 в группе ресурсов ContosoRG с идентификатором подписки "aaaa-aaaa-aaaa-aaaa". Рассмотрим сценарий, в котором необходимо предоставить удаленный доступ к конечной точке для серверов Windows Server 2012 /R2. Для доступа к расширенным обновлениям безопасности, включенным Azure Arc, требуется доступ к конечной точке www.microsoft.com/pkiops/certs
. Необходимо удаленно настроить правило брандмауэра, позволяющее получить доступ к этой конечной точке. Используйте команду run, чтобы разрешить подключение к этой конечной точке.
Пример 1. Доступ к конечной точке с помощью команды run
Начните с создания скрипта запуска команды, чтобы предоставить конечным точкам доступ к www.microsoft.com/pkiops/certs
конечной точке на целевом сервере с поддержкой Arc с помощью операции PUT.
Чтобы напрямую предоставить скрипт в строке, используйте следующую операцию:
PUT https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
{
"location": "eastus2",
"properties": {
"source": {
"script": "New-NetFirewallRule -DisplayName $ruleName -Direction Outbound -Action Allow -RemoteAddress $endpoint -RemotePort $port -Protocol $protocol"
},
"parameters": [
{
"name": "ruleName",
"value": "Allow access to www.microsoft.com/pkiops/certs"
},
{
"name": "endpoint",
"value": "www.microsoft.com/pkiops/certs"
},
{
"name": "port",
"value": 433
},
{
"name": "protocol",
"value": "TCP"
}
],
"asyncExecution": false,
"runAsUser": "contoso-user1",
"runAsPassword": "Contoso123!"
"timeoutInSeconds": 3600,
"outputBlobUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/MyScriptoutput.txt",
"errorBlobUri": "https://mystorageaccount.blob.core.windows.net/mycontainer/MyScriptError.txt"
}
}
Чтобы вместо этого связаться с файлом скрипта, можно использовать параметр ScriptURI операции запуска. Для этого предполагается, что вы подготовили newnetfirewallrule.ps1
файл, содержащий встроенный скрипт, и отправьте этот скрипт в хранилище BLOB-объектов.
PUT https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
{
"location": "eastus2",
"properties": {
"source": {
"scriptUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/newnetfirewallrule.ps1"
},
"parameters": [
{
"name": "ruleName",
"value": " Allow access to www.microsoft.com/pkiops/certs"
},
{
"name": "endpoint",
"value": "www.microsoft.com/pkiops/certs"
},
{
"name": "port",
"value": 433
},
{
"name": "protocol",
"value": "TCP"
}
],
"asyncExecution": false,
"runAsUser": "contoso-user1",
"runAsPassword": "Contoso123!"
"timeoutInSeconds": 3600,
"outputBlobUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/MyScriptoutput.txt",
"errorBlobUri": "https://mystorageaccount.blob.core.windows.net/mycontainer/MyScriptError.txt"
}
}
URL-адрес SAS должен предоставить доступ для чтения к большому двоичному объекту. Срок действия 24 часов предлагается для URL-адреса SAS. URL-адреса SAS можно создать на портал Azure с помощью параметров больших двоичных объектов или маркера SAS.New-AzStorageBlobSASToken
При создании маркера SAS с помощью New-AzStorageBlobSASToken
URL-адреса SAS используется следующий формат: base blob URL + "?"
+ маркер SAS.New-AzStorageBlobSASToken
Выходные и ошибки большие двоичные объекты должны быть типом AppendBlob, а URL-адреса SAS должны предоставлять доступ для чтения, добавления, создания, записи в большой двоичный объект. Для URL-адреса SAS предлагается срок действия 24 часа. URL-адреса SAS можно создать на портал Azure с помощью параметров большого двоичного объекта или маркера SAS.New-AzStorageBlobSASToken
Пример 2. Получение сведений о команде запуска
Чтобы убедиться, что вы правильно подготовили команду запуска, используйте команду GET для получения сведений о подготовленной команде запуска:
GET https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
Пример 3. Обновление команды запуска
Предположим, вы хотите открыть доступ к дополнительной конечной точке *.waconazure.com
для подключения к Windows Admin Center. Вы можете обновить существующую команду запуска с новыми параметрами:
PATCH https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
{
"location": "eastus2",
"properties": {
"source": {
"script": "New-NetFirewallRule -DisplayName $ruleName -Direction Outbound -Action Allow -RemoteAddress $endpoint -RemotePort $port -Protocol $protocol"
},
"parameters": [
{
"name": "ruleName",
"value": "Allow access to WAC endpoint"
},
{
"name": "endpoint",
"value": "*.waconazure.com"
},
{
"name": "port",
"value": 433
},
{
"name": "protocol",
"value": "TCP"
}
],
"asyncExecution": false,
"runAsUser": "contoso-user1",
"runAsPassword": "Contoso123!",
"timeoutInSeconds": 3600,
"outputBlobUri": "https://mystorageaccount.blob.core.windows.net/myscriptoutputcontainer/MyScriptoutput.txt",
"errorBlobUri": "https://mystorageaccount.blob.core.windows.net/mycontainer/MyScriptError.txt"
}
}
Пример 4. Перечисление команд запуска
Перед удалением команды запуска для доступа к конечной точке убедитесь, что для сервера с поддержкой Arc нет других команд выполнения. Для получения всех команд запуска можно использовать команду списка:
LIST https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/
Пример 5. Удаление команды запуска
Если расширение run Command больше не требуется, его можно удалить с помощью следующей команды:
DELETE https://management.azure.com/subscriptions/ aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/EndpointAccessCommand?api-version=2023-10-03-preview
Отключение команды запуска
Чтобы отключить команду run на серверах с поддержкой Azure Arc, откройте административную командную строку и выполните следующие команды. Эти команды используют возможности конфигурации локального агента для агента подключенного компьютера в списке блоков расширений.
Windows
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"
Linux
sudo azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"