Partager via


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"