Configurer des serveurs à distance et en toute sécurité à l’aide de Exécuter la commande (préversion)
L’utilisation d’Exécuter la commande sur des serveurs avec Azure Arc (préversion publique) recourt à l’agent Connected Machine pour vous permettre d’exécuter un script au sein de vos serveurs à distance et en toute sécurité. Cela peut être utile pour de nombreux scénarios dans la résolution des problèmes, la récupération, les diagnostics et la maintenance.
Environnement et configuration pris en charge
Expériences : Exécuter la commande est actuellement pris en charge via Azure CLI et PowerShell.
Systèmes d’exploitation : Exécuter la commande prend en charge les systèmes d’exploitation Windows et Linux.
Environnements : Exécuter la commande prend en charge les environnements non-Azure, notamment les environnements locaux, VMware, SCVMM, AWS, GCP et OCI.
Coût : Exécuter la commande est gratuit, mais le stockage de scripts dans Azure peut vous être facturé.
Configuration : Exécuter la commande ne nécessite pas de déploiement d’extensions ni de configuration supplémentaires. La version de l’agent Connected Machine doit être 1.33 ou ultérieure.
Limitation de l’accès à Run Command à l’aide du contrôle d’accès en fonction du rôle (RBAC)
Répertorier les commandes d’exécution ou afficher les détails d’une commande nécessite l’autorisation Microsoft.HybridCompute/machines/runCommands/read
. Le rôle intégré Lecteur et les niveaux supérieurs disposent de cette autorisation.
L’exécution d’une commande nécessite l’autorisation Microsoft.HybridCompute/machines/runCommands/write
. Le rôle Administrateur des ressources Azure Connected Machine et les niveaux supérieurs disposent de cette autorisation.
Vous pouvez utiliser un des rôles intégrés ou créer un rôle personnalisé afin d’exécuter Run Command.
Blocage des commandes d’exécution localement
L’agent Connected Machine prend en charge les configurations locales qui vous permettent d’établir une liste d'autorisation ou une liste de refus. Pour plus d’informations, consultez Listes d’autorisation et listes de refus des extensions.
Pour Windows :
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"
Pour Linux :
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"
Azure CLI
Les exemples suivants utilisent az connectedmachine run-command pour exécuter un script d’interpréteur de commandes sur une machine Windows Azure.
Exécuter un script avec la machine
Cette commande remet le script à la machine, l’exécute et retourne la sortie capturée.
az connectedmachine run-command create --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG" --script "Write-Host Hello World!"
Répertorier toutes les ressources RunCommand déployées sur une machine
Cette commande retourne une liste complète des commandes d’exécution précédemment déployées, ainsi que leurs propriétés.
az connectedmachine run-command list --machine-name "myMachine" --resource-group "myRG"
Obtenir l’état et les résultats de l’exécution
Cette commande permet de récupérer la progression de l’exécution actuelle, y compris la dernière sortie, l’heure de début/fin, le code de sortie et l’état terminal de l’exécution.
az connectedmachine run-command show --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"
Remarque
Les champs de sortie et d’erreur dans instanceView
sont limités aux derniers 4 Ko. Pour accéder à la sortie complète et à l’erreur, vous pouvez transférer les données de sortie et d’erreur vers des objets blob d’ajout de stockage à l’aide des paramètres -outputBlobUri
et -errorBlobUri
lors de l’exécution de Run Command.
Supprimer la ressource RunCommand de la machine
Supprimez la ressource RunCommand précédemment déployée sur la machine. Si l’exécution du script est toujours en cours, l’exécution se termine.
az connectedmachine run-command delete --name "myRunCommand" --machine-name "myMachine" --resource-group "myRG"
PowerShell
Exécuter un script avec la machine
New-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Exécuter un script sur la machine à l’aide du paramètre SourceScriptUri
OutputBlobUri
et ErrorBlobUri
sont des paramètres facultatifs.
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>”
Répertorier toutes les ressources RunCommand déployées sur une machine
Cette commande retourne une liste complète des commandes Run Command précédemment déployées, ainsi que leurs propriétés.
Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine"
Obtenir l’état et les résultats de l’exécution
Cette commande permet de récupérer la progression de l’exécution actuelle, y compris la dernière sortie, l’heure de début/fin, le code de sortie et l’état terminal de l’exécution.
Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" - MachineName "myMachine" -RunCommandName "RunCommandName"
Créer ou mettre à jour Run Command sur une machine à l’aide de SourceScriptUri (URL SAP d’objet blob de stockage)
Créez ou mettez à jour Run Command sur une machine Windows à l’aide d’une URL SAP d’un objet blob de stockage qui contient un script PowerShell. SourceScriptUri
peut être l’URL SAP complète ou l’URL publique d’un objet blob de stockage.
New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Notes
L’URL SAP doit fournir un accès en lecture à l’objet blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAS. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken
. Si vous générez un jeton SAP à l’aide de New-AzStorageBlobSASToken
, votre URL SAP = « URL d’objet blob de base » + « ? » + « Jeton SAP à partir de New-AzStorageBlobSASToken
»
Obtenir une vue d’instance Run Command pour une machine après la création ou la mise à jour de Run Command
Obtenir une instance Run Command pour une machine avec la vue d’instance. La vue d’instance contient l’état d’exécution de la commande d’exécution (Réussite, Échec, etc.), le code de sortie, la sortie standard et l’erreur standard générées par l’exécution du script à l’aide de la commande Run Command. Un ExitCode différent de zéro indique une exécution infructueuse.
Get-AzConnectedMachineRunCommand -ResourceGroupName MyRG -MachineName MyMachine -RunCommandName MyRunCommand
InstanceViewExecutionState
: État du script Run Command de l’utilisateur. Reportez-vous à cet état pour savoir si votre script a réussi ou non.
ProvisioningState
: état de l’approvisionnement général des extensions de bout en bout (si la plateforme d’extension a pu déclencher ou non le script Run Command).
Créer ou mettre à jour Run Command sur une machine à l’aide de SourceScript (texte de script)
Créez ou mettez à jour Run Command sur une machine en passant le contenu du script directement au paramètre -SourceScript
. Utilisez ;
pour séparer plusieurs commandes.
New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Créer ou mettre à jour Run Command sur une machine à l’aide de OutputBlobUri, ErrorBlobUri pour diffuser en continu la sortie standard et des messages d’erreur standard vers des objets blob d’ajout de sortie et d’erreurs
Créez ou mettez à jour Run Command sur une machine pour diffuser en continu la sortie standard et des messages d’erreur standard vers des objets blob d’ajout de sortie et d’erreurs.
New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 - MachineName MyMachine -RunCommandName MyRunCommand3 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"-OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri <ErrorBlobUri>
Remarque
Les objets blob de sortie et d’erreur doivent être de type AppendBlob et leurs URL SAP doivent fournir un accès en lecture, ajout, création et écriture sur l’objet blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAS. Si l’objet blob de sortie ou d’erreur n’existe pas, un objet blob de type AppendBlob est créé. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken
.
Créer ou mettre à jour Run Command sur une machine en tant qu’utilisateur différent à l’aide des paramètres RunAsUser et RunAsPassword
Créez ou mettez à jour Run Command sur une machine en tant qu’utilisateur différent à l’aide des paramètres RunAsUser
et RunAsPassword
. Pour que le paramètre RunAs fonctionne correctement, contactez l’administrateur de la machine et vérifiez que l’utilisateur est ajouté sur la machine, qu’il a accès aux ressources accessibles par Run Command (répertoires, fichiers, réseau, etc.) et, dans le cas d’une machine Windows, que le service « Ouverture de session secondaire » est en cours d’exécution sur la machine.
New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScript "id; echo HelloWorld" -RunAsUser myusername -RunAsPassword mypassword
Créer ou mettre à jour Run Command sur une ressource de machine à l’aide de SourceScriptUri (URL SAP d’objet blob de stockage)
Créez ou mettez à jour Run Command sur une ressource de machine Windows à l’aide d’une URL SAP d’un objet blob de stockage qui contient un script PowerShell.
New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Remarque
L’URL SAP doit fournir un accès en lecture à l’objet blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAS. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken
. Si vous générez un jeton SAP à l’aide de New-AzStorageBlobSASToken
, le format d’URL SAP est : URL d’objet blob de base + « ? » + jeton SAP à partir de New-AzStorageBlobSASToken
.
Créer ou mettre à jour Run Command sur une machine à l’aide de ScriptLocalPath (fichier de script local)
Créez ou mettez à jour Run Command sur une machine à l’aide d’un fichier de script local qui se trouve sur l’ordinateur client où la cmdlet est exécutée.
New-AzMachineRunCommand -ResourceGroupName MyRG0 -VMName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"
Créer ou mettre à jour Run Command sur une instance de machine à l’aide des paramètres Parameter et ProtectedParameter (paramètres publics et protégés pour le script)
Utilisez ProtectedParameter pour passer toutes les entrées sensibles au script, comme les mots de passe, les clés, etc.
Windows : les paramètres Parameters et ProtectedParameters sont passés au script en tant qu’arguments et s’exécutent comme suit :
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
Linux : Les paramètres nommés et leurs valeurs sont définis sur la configuration de l’environnement, qui doit être accessible dans le script .sh. Pour les arguments sans nom, passez une chaîne vide pour nommer l’entrée. Les arguments sans nom sont passés au script et s’exécutent comme suit :
myscript.sh publicParam1value publicParam2value secret1value secret2value
Supprimer la ressource RunCommand de la machine
Supprimez la ressource RunCommand précédemment déployée sur la machine. Si l’exécution du script est toujours en cours, l’exécution se termine.
Remove-AzConnetedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -RunCommandName "RunCommandName"
Opérations Exécuter la commande
Exécuter la commande sur les serveurs avec Azure Arc prend en charge les opérations suivantes :
Operation | Description |
---|---|
Créer | opération de création d’une commande d’exécution. Cette opération exécute la commande d’exécution ; |
Supprimer | opération de suppression d’une commande d’exécution. Si elle est en cours d’exécution, la suppression arrête également la commande d’exécution ; |
Get | opération d’obtention d’une commande d’exécution ; |
Liste | opération permettant d’obtenir toutes les commandes d’exécution d’un serveur avec Azure Arc ; |
Update | opération de mise à jour de la commande d’exécution. Cette opération arrête la commande d’exécution précédente. |
Remarque
Les blobs d’erreur et de sortie sont remplacés lors de chaque fois que le script Run Command s’exécute.
Exemple de scénarios
Supposons que vous disposez d’un serveur avec Azure Arc appelé « 2012DatacenterServer1 » dans le groupe de ressources « ContosoRG » avec l’ID d’abonnement « aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa ». Envisagez un scénario dans lequel vous devez fournir un accès à distance à un point de terminaison pour les serveurs Windows Server 2012 /R2. L’accès aux mises à jour de sécurité étendues activées par Azure Arc nécessite l’accès au point de terminaison www.microsoft.com/pkiops/certs
Vous devez configurer à distance une règle de pare-feu qui autorise l’accès à ce point de terminaison. Utilisez Run Command pour autoriser la connectivité à ce point de terminaison.
Exemple 1 : Accès au point de terminaison avec Run Command
Commencez par créer un script Run Command pour fournir un accès au point de terminaison sur votre point de terminaison www.microsoft.com/pkiops/certs
sur votre serveur Arc cible à l’aide de l’opération PUT.
Pour fournir directement le script en ligne, effectuez l’opération suivante :
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"
}
}
Pour créer un lien vers le fichier de script, vous pouvez utiliser l’option ScriptURI de l’opération Run Command. Pour cela, vous êtes censé avoir préparé un fichier newnetfirewallrule.ps1
contenant le script en ligne et chargé ce script dans le stockage 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"
}
}
L’URL SAP doit fournir un accès en lecture à l’objet blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAS. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken
. Si vous générez un jeton SAP à l’aide de New-AzStorageBlobSASToken
, le format d’URL SAP est : base blob URL + "?"
+ jeton SAP à partir de New-AzStorageBlobSASToken
.
Les objets blob de sortie et d’erreur doivent être de type AppendBlob et leurs URL SAP doivent fournir un accès en lecture, ajout, création et écriture sur l’objet blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAS. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken
.
Exemple 2 : Obtenir les détails de la commande d’exécution
Pour vérifier que vous avez correctement configurer la commande d’exécution, utilisez la commande GET pour récupérer les détails de la commande d’exécution provisionnée :
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
Exemple 3 : Mettre à jour la commande d’exécution
Supposons que vous souhaitez ouvrir l’accès à un point de terminaison *.waconazure.com
supplémentaire pour la connectivité à Windows Admin Center. Vous pouvez mettre à jour la commande d’exécution existante avec de nouveaux paramètres :
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"
}
}
Exemple 4 : Répertorier les commandes d’exécution
Avant de supprimer la commande d’exécution pour l’accès au point de terminaison, vérifiez qu’il n’existe pas d’autres commandes d’exécution pour le serveur avec Arc. Vous pouvez utiliser la commande de liste pour obtenir toutes les commandes d’exécution :
LIST https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/
Exemple 5 : Supprimer une commande d’exécution
Si vous n’avez plus besoin de l’extension Exécuter la commande, vous pouvez la supprimer à l’aide de la commande suivante :
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
Désactiver Run Command
Pour désactiver Run Command sur des serveurs Azure Arc, ouvrez une invite de commandes administrative et exécutez les commandes suivantes. Ces commandes utilisent les fonctionnalités de configuration de l’agent local pour l’Agent Connected Machine dans la liste de refus de l’extension.
Windows
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"
Linux
sudo azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"