Configure servidores de forma remota e segura utilizando o Comando de Execução (Versão prévia)
O Comando de Execução em servidores habilitados para Azure Arc (Visualização Pública) usa o agente do Connected Machine para permitir que você execute remotamente e com segurança um script dentro de seus servidores. Isso pode ser útil em inúmeros cenários de solução de problemas, recuperação, diagnóstico e manutenção.
Ambiente e configuração com suporte
Experiências: atualmente, há suporte para o Comando de Execução por meio da CLI do Azure e do PowerShell.
Sistemas operacionais: o Comando de Execução dá suporte para os sistemas operacionais Windows e Linux.
Ambientes: o Comando de Execução dá suporte para ambientes que não sejam do Azure, incluindo ambientes locais, VMware, SCVMM, AWS, GCP e OCI.
Custo: o Comando de Execução é gratuito, entretanto, o armazenamento de scripts no Microsoft Azure pode incorrer em cobrança.
Configuração: o Comando de Execução não exige mais a configuração nem a implantação de nenhuma extensão. A versão do agente do Connected Machine deve ser 1.33 ou superior.
Limitar o acesso ao recurso Executar Comando usando o RBAC
Listar os comandos de execução ou mostrar os detalhes de um comando exige a permissão Microsoft.HybridCompute/machines/runCommands/read
. A função Leitor interna e os níveis superiores têm essa permissão.
A execução de um comando requer a permissão Microsoft.HybridCompute/machines/runCommands/write
. A função Administrador de recursos do Azure Connected Machine e níveis mais altos têm essa permissão.
Use uma das funções internas ou crie uma função personalizada para usar o recurso Executar Comando.
Bloquear comandos de execução localmente
O agente do Connected Machine dá suporte a configurações locais que permitem definir uma lista de permitidos ou uma lista de bloqueios. Confira Listas de permitidos e listas de bloqueios de extensão para saber mais.
Para Windows:
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"
Para Linux:
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"
CLI do Azure
Os exemplos a seguir usam az connectedmachine run-command para executar um script de shell em um computador Windows do Azure.
Executar um script com o computador
Este comando entrega o script para o computador, executa-o e retorna a saída capturada.
az connectedmachine run-command create --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG" --script "Write-Host Hello World!"
Listar todos os recursos de RunCommand implantados em um computador
Este comando retorna uma lista completa de comandos de execução implantados anteriormente com as respectivas propriedades.
az connectedmachine run-command list --machine-name "myMachine" --resource-group "myRG"
Obter resultados e status da execução
Este comando recupera o progresso da execução atual, incluindo a saída mais recente, a hora de início/término, o código de saída e o estado terminal da execução.
az connectedmachine run-command show --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"
Observação
Os campos de saída e erro em instanceView
são limitados aos últimos 4 KB. Caso você deseje acessar a saída e os erros completos, encaminhe os dados de saída e de erro para blobs de acréscimo de armazenamento usando os parâmetros -outputBlobUri
e -errorBlobUri
enquanto executa o recurso Executar Comando.
Excluir o recurso RunCommand do computador
Remova o recurso RunCommand implantado anteriormente no computador. Se a execução do script ainda estiver em andamento, a execução será encerrada.
az connectedmachine run-command delete --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"
PowerShell
Executar um script com o computador
New-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Executar um script no computador usando o parâmetro SourceScriptUri
OutputBlobUri
e ErrorBlobUri
são parâmetros opcionais.
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>”
Listar todos os recursos de RunCommand implantados em um computador
Este comando retorna uma lista completa de comandos de execução implantados anteriormente com as respectivas propriedades.
Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine"
Obter resultados e status da execução
Este comando recupera o progresso da execução atual, incluindo a saída mais recente, a hora de início/término, o código de saída e o estado terminal da execução.
Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" - MachineName "myMachine" -RunCommandName "RunCommandName"
Criar ou atualizar o recurso Executar Comando em um computador usando SourceScriptUri (URL SAS do blob de armazenamento)
Crie ou atualize o recurso Executar Comando em um computador Windows usando uma URL SAS de um blob de armazenamento que contenha um script do PowerShell. SourceScriptUri
pode ser a URL SAS completa ou a URL pública de um blob de armazenamento.
New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Observação
A URL SAS deve fornecer acesso de leitura ao blob. Um tempo de expiração de 24 horas é sugerido para a URL SAS. As URLs SAS podem ser geradas no portal do Azure por meio das opções do blob ou do token SAS usando New-AzStorageBlobSASToken
. Se estiver gerando token SAS usando New-AzStorageBlobSASToken
, o URL SAS = "URL de blob base" + "?" + "token SAS de New-AzStorageBlobSASToken
"
Obter uma Exibição de Instância do recurso Executar Comando para um computador após criar ou atualizar Executar Comando
Obtenha um recurso Executar Comando para um computador com a Exibição de Instância. A Exibição de Instância contém o estado de execução do recurso Executar Comando (êxito, com falha etc.), o código de saída, a saída padrão e o erro padrão gerados pela execução do script por meio de Executar Comando. Um ExitCode diferente de zero indica uma execução malsucedida.
Get-AzConnectedMachineRunCommand -ResourceGroupName MyRG -MachineName MyMachine -RunCommandName MyRunCommand
InstanceViewExecutionState
: status do script Executar Comando do usuário. Veja esse estado para saber se o script foi bem-sucedido ou não.
ProvisioningState
: status do provisionamento de extensão geral de ponta a ponta (indica se a plataforma de extensão pôde disparar o script de Executar Comando).
Criar ou atualizar o recurso Executar Comando em um computador usando SourceScript (texto de script)
Crie ou atualize o recurso Executar Comando em um computador transmitindo o conteúdo do script diretamente ao parâmetro -SourceScript
. Use ;
para separar vários comandos.
New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Criar ou atualizar o recurso Executar Comando em um computador usando OutputBlobUri, ErrorBlobUri para transmitir as mensagens de saída padrão e de erro padrão aos blobs de acréscimo de saída e erro
Crie ou atualize o recurso Executar Comando em um computador e transmita as mensagens de saída padrão e de erro padrão aos blobs de acréscimo de saída e erro.
New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 - MachineName MyMachine -RunCommandName MyRunCommand3 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"-OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri <ErrorBlobUri>
Observação
Os blobs de saída e erro devem ser do tipo AppendBlob e suas URLs SAS devem fornecer acesso de gravação, leitura, acréscimo e criação ao blob. Um tempo de expiração de 24 horas é sugerido para a URL SAS. Se o blob de saída ou de erro não existir, um blob do tipo AppendBlob será criado. As URLs SAS podem ser geradas no portal do Azure por meio das opções do blob ou do token SAS usando New-AzStorageBlobSASToken
.
Criar ou atualizar o recurso Executar Comando em um computador como um usuário diferente usando os parâmetros RunAsUser e RunAsPassword
Crie ou atualize o recurso Executar Comando em um computador como um usuário diferente usando os parâmetros RunAsUser
e RunAsPassword
. Para que RunAs funcione corretamente, entre em contato com o administrador do computador e verifique se o usuário foi adicionado ao computador, se o usuário tem acesso aos recursos acessados pelo recurso Executar Comando (diretórios, arquivos, rede etc.) e, no caso do computador Windows, se o serviço “Logon Secundário” está em execução no computador.
New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScript "id; echo HelloWorld" -RunAsUser myusername -RunAsPassword mypassword
Criar ou atualizar o recurso Executar Comando em um recurso do computador usando SourceScriptUri (URL SAS do blob de armazenamento)
Crie ou atualize o recurso Executar Comando em um computador do Windows usando uma URL SAS de um blob de armazenamento que contenha um script do PowerShell.
New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Observação
A URL SAS deve fornecer acesso de leitura ao blob. Um tempo de expiração de 24 horas é sugerido para a URL SAS. As URLs SAS podem ser geradas no portal do Azure por meio as opções do blob ou do token SAS usando New-AzStorageBlobSASToken
. Se gerar o token SAS usando New-AzStorageBlobSASToken
, o formato de URL SAS será: URL de blob base + "?" + o token SAS de New-AzStorageBlobSASToken
.
Criar ou atualizar Executar Comando em um computador usando ScriptLocalPath (arquivo de script local)
Crie ou atualize Executar Comando em um computador usando um arquivo de script local que está no computador cliente em que o cmdlet é executado.
New-AzMachineRunCommand -ResourceGroupName MyRG0 -VMName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"
Criar ou atualizar o recurso Executar Comando em uma instância do computador usando os parâmetros Parameter e ProtectedParameter (Parâmetros Públicos e Protegidos para o script)
Use ProtectedParameter para passar quaisquer entradas confidenciais para script, como senhas, chaves etc.
Windows: Parameters e ProtectedParameters são transmitidos para o script conforme os argumentos são transmitidos para o script e são executados desta forma:
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
Linux: Parâmetros Nomeados e seus valores são definidos como configuração de ambiente, que deve ser acessível dentro do script .sh. Para argumentos sem nome, passe uma cadeia de caracteres vazia para nomear a entrada. Os argumentos sem nome são transmitidos para o script e executados desta forma:
myscript.sh publicParam1value publicParam2value secret1value secret2value
Excluir o recurso RunCommand do computador
Remova o recurso RunCommand implantado anteriormente no computador. Se a execução do script ainda estiver em andamento, a execução será encerrada.
Remove-AzConnetedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -RunCommandName "RunCommandName"
Operação do Comando de Execução
O Comando de Execução em servidores habilitados para Azure Arc dá suporte para as seguintes operações:
Operação | Descrição |
---|---|
Criar | A operação para criar um comando de execução. Isso executa o Comando de Execução. |
Excluir | A operação para excluir um comando de execução. Se estiver em execução, a exclusão também interromperá o comando de execução. |
Obter | A operação para obter um comando de execução. |
Lista | A operação para obter todos os comandos de execução de um servidor habilitado para Azure Arc. |
Atualizar | A operação para atualizar o comando de execução. Isso interrompe o comando de execução anterior. |
Observação
Os blobs de saída e de erro são substituídos sempre que o script de comando executar é executado.
Cenários de exemplo
Suponha que você tenha um servidor habilitado para Azure Arc chamado "2012DatacenterServer1" no grupo de recursos "ContosoRG" com ID de assinatura "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa". Considere um cenário em que você precisa fornecer acesso remoto a um ponto de extremidade para servidores Windows Server 2012 / R2. O acesso às Atualizações de Segurança Estendidas habilitadas pelo Azure Arc requer acesso ao ponto de extremidade www.microsoft.com/pkiops/certs
. Você precisa configurar remotamente uma regra de firewall que permita o acesso a esse ponto de extremidade. Use o Comando de Execução para permitir a conectividade com esse ponto de extremidade.
Exemplo 1: acesso ao ponto de extremidade com o Comando de Execução
Comece criando um script de Comando de Execução para fornecer acesso ao ponto de extremidade www.microsoft.com/pkiops/certs
em seu servidor de destino habilitado para Arc utilizando a operação PUT.
Para fornecer o script diretamente na linha, use a seguinte operação:
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"
}
}
Em vez disso, para vincular o arquivo de script, você pode usar a opção ScriptURI da operação Comando de Execução. Para isso, presume-se que você tenha preparado um arquivo newnetfirewallrule.ps1
contendo o script em linha e carregado esse script no armazenamento de blobs.
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"
}
}
A URL SAS deve fornecer acesso de leitura ao blob. Um tempo de expiração de 24 horas é sugerido para a URL SAS. As URLs do SAS podem ser geradas no portal do Azure utilizando as opções de blobs ou o token SAS utilizando New-AzStorageBlobSASToken
. Se estiver gerando o token SAS utilizando New-AzStorageBlobSASToken
, o formato da URL de SAS será: base blob URL + "?"
+ o token SAS de New-AzStorageBlobSASToken
.
Os blobs de saída e erro devem ser do tipo AppendBlob e suas URLs SAS devem fornecer acesso de gravação, leitura, acréscimo e criação ao blob. Um tempo de expiração de 24 horas é sugerido para a URL SAS. As URLs SAS podem ser geradas no portal do Azure por meio das opções do blob ou do token SAS usando New-AzStorageBlobSASToken
.
Exemplo 2: obter detalhes do Comando de Execução
Para verificar se você provisionou corretamente o Comando de Execução, use o comando GET para recuperar os detalhes sobre o Comando de Execução provisionado:
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
Exemplo 3: atualizar o Comando de Execução
Vamos supor que você queira abrir o acesso a um ponto de extremidade adicional *.waconazure.com
para conectividade com o Windows Admin Center. Você pode atualizar o Comando de Execução existente com novos parâmetros:
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"
}
}
Exemplo 4: listar Comandos de Execução
Antes de excluir o comando de execução para Acesso ao Ponto de Extremidade, certifique-se de que não haja outros Comandos de Execução para o servidor habilitado para Arc. Você pode usar a lista de comandos para obter todos os Comandos de Execução:
LIST https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/
Exemplo 5: excluir um Comando de Execução
Se você não precisar mais da extensão Comando de Execução, poderá excluí-la utilizando o seguinte comando:
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
Desabilitando o Comando Executar
Para desabilitar o Comando Executar em servidores habilitados para Azure Arc, abra um prompt de comando administrativo e execute os comandos a seguir. Esses comandos usam os recursos de configuração do agente local no agente do Computador Conectado na Lista de bloqueios de extensão.
Windows
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"
Linux
sudo azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"