Share via


実行コマンドを使用してサーバーをリモートで安全に構成する (プレビュー)

Azure Arc 対応サーバーの実行コマンド (パブリック プレビュー) では、 Connected Machine エージェントを使用して、サーバー内でスクリプトをリモートで安全に実行できます。 これは、トラブルシューティング、復旧、診断、メンテナンスに関するさまざまなシナリオに役立ちます。

サポートされている環境と構成

  • エクスペリエンス: 実行コマンドは、現在、Azure CLI と PowerShell を使用してサポートされています。

  • オペレーティング システム: 実行コマンドでは、Windows オペレーティング システムと Linux オペレーティング システムの両方がサポートされます。

  • 環境:実行コマンドでは、オンプレミス、VMware、SCVMM、AWS、GCP、OCI などの Azure 以外の環境がサポートされます。

  • コスト: 実行コマンドは無料ですが、スクリプトをAzure に保存することで課金が発生する可能性があります。

  • 構成: 実行コマンドでは、追加の構成や拡張機能のデプロイは必要ありません。 Connected Machine エージェントのバージョンは 1.33 以降である必要があります。

RBAC を使用した実行コマンドへのアクセスの制限

実行コマンドを一覧表示したり、コマンドの詳細を表示したりするには、Microsoft.HybridCompute/machines/runCommands/read アクセス許可が必要です。 組み込みの閲覧者ロール以上のレベルには、このアクセス許可があります。

コマンドの実行には、Microsoft.HybridCompute/machines/runCommands/write アクセス許可が必要です。 Azure Connected Machine リソース管理者ロール以上のレベルには、このアクセス許可があります。

実行コマンドを使用するには、いずれかの組み込みロールを使用するか、カスタム ロールを作成します。

ローカル環境での実行コマンドのブロック

Connected Machine エージェントでは、許可リストまたはブロックリストを設定できるローカル構成がサポートされています。 詳しくは、「拡張機能の許可リストとブロックリスト」をご覧ください。

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 を使って、Azure Windows マシン上でシェル スクリプトを実行します。

マシンでスクリプトを実行する

このコマンドは、スクリプトをマシンに配信して実行し、キャプチャされた出力を返します。

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"

Note

instanceView の出力とエラーのフィールドは、最後の 4 KB に制限されています。 完全な出力とエラーにアクセスするには、実行コマンドを実行するときに -outputBlobUri-errorBlobUri パラメーターを使って、出力とエラーのデータをストレージ追加 BLOB に転送できます。

マシンから 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 パラメーターを使用してマシンでスクリプトを実行する

OutputBlobUriErrorBlobUri は省略可能なパラメーターです。

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 (Storage Blob SAS URL) を使用してマシンで実行コマンドを作成または更新する

PowerShell スクリプトを含む Storage Blob の SAS URL を使って、Windows マシンで実行コマンドを作成または更新します。 SourceScriptUri には、ストレージ BLOB の完全な SAS URL またはパブリック URL を指定できます。

New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

注意

SAS URL は、BLOB への読み取りアクセスを提供する必要があります。 SAS URL の有効期限は 24 時間にすることをお勧めします。 Azure portal で BLOB のオプションを使って SAS URL を生成するか、New-AzStorageBlobSASToken を使って SAS トークンを生成することができます。 New-AzStorageBlobSASToken を使用して SAS トークンを生成する場合、SAS URL は、次のようになります。"ベース BLOB URL" + "?" + "New-AzStorageBlobSASToken からの SAS トークン"

実行コマンドの作成または更新後にマシンの実行コマンド インスタンス ビューを取得する

インスタンス ビューを使ってマシンの実行コマンドを取得します。 インスタンス ビューには、実行コマンドを使ってスクリプトを実行することで生成される、実行コマンドの実行状態 (成功、失敗など)、終了コード、標準出力、標準エラーが含まれます。 0 以外の ExitCode は、失敗した実行を示します。

Get-AzConnectedMachineRunCommand -ResourceGroupName MyRG -MachineName MyMachine -RunCommandName MyRunCommand

InstanceViewExecutionState: ユーザーの実行コマンド スクリプトの状態。 スクリプトが成功したかどうかを確認するには、この状態を参照します。

ProvisioningState: 一般的な拡張機能のプロビジョニングのエンド ツー エンドの状態 (拡張機能プラットフォームが実行コマンド スクリプトをトリガーできたかどうか)。

SourceScript (スクリプト テキスト) を使用してマシンで実行コマンドを作成または更新する

スクリプトの内容を -SourceScript パラメーターに直接渡して、マシンで実行コマンドを作成または更新します。 複数のコマンドを区切るには、; を使います。

New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"

マシンで実行コマンドを作成または更新し、OutputBlobUri と ErrorBlobUri を使用して標準出力と標準エラー メッセージを出力とエラーの追加 BLOB にストリーミングする

マシンで実行コマンドを作成または更新し、標準出力と標準エラー メッセージを出力とエラーの追加 BLOB にストリーミングします。

New-AzConnectedMachineRunCommand -ResourceGroupName MyRG0 - MachineName MyMachine -RunCommandName MyRunCommand3 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"-OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri <ErrorBlobUri>

Note

出力およびエラー BLOB は AppendBlob 型である必要があり、SAS URL は BLOB への読み取り、追加、作成、書き込みアクセスを提供する必要があります。 SAS URL の有効期限は 24 時間にすることをお勧めします。 出力またはエラー BLOB が存在しない場合は、AppendBlob 型の BLOB が作成されます。 Azure portal で BLOB のオプションを使って SAS URL を生成するか、New-AzStorageBlobSASToken を使って SAS トークンを生成することができます。

RunAsUser および RunAsPassword パラメーターを使用して別のユーザーとしてマシンで実行コマンドを作成または更新する

RunAsUserRunAsPassword パラメーターを使って、別のユーザーとしてマシンで実行コマンドを作成または更新します。 RunAs が正常に機能するには、マシンの管理者に問い合わせて、マシンにユーザーが追加されていること、実行コマンドがアクセスするリソース (ディレクトリ、ファイル、ネットワークなど) へのアクセス権をユーザーが持っていること、そして Windows マシンの場合はマシンで "セカンダリ ログオン" サービスが実行されていることを確認します。

New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScript "id; echo HelloWorld" -RunAsUser myusername -RunAsPassword mypassword

SourceScriptUri (Storage Blob SAS URL) を使用してマシン リソースで実行コマンドを作成または更新する

PowerShell スクリプトを含む Storage Blob の SAS URL を使って、Windows マシン リソースで実行コマンドを作成または更新します。

New-AzMachineRunCommand -ResourceGroupName MyRG0 -MachineName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Note

SAS URL は、BLOB への読み取りアクセスを提供する必要があります。 SAS URL の有効期限は 24 時間にすることをお勧めします。 Azure portal で BLOB のオプションを使って SAS URL を生成するか、New-AzStorageBlobSASToken を使って SAS トークンを生成することができます。 New-AzStorageBlobSASToken を使用して SAS トークンを生成する場合、SAS URL 形式は次のようになります。ベース BLOB URL + "?" + New-AzStorageBlobSASToken からの SAS トークン。

ScriptLocalPath (ローカル スクリプト ファイル) を使用してマシンで実行コマンドを作成または更新する

コマンドレットが実行されるクライアント コンピューター上にあるローカル スクリプト ファイルを使用して、マシンで実行コマンドを作成または更新します。

New-AzMachineRunCommand -ResourceGroupName MyRG0 -VMName MyMachine -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"

Parameter および ProtectedParameter パラメーター (スクリプト化するパブリック パラメーターと保護されたパラメーター) を使用してマシン インスタンスで実行コマンドを作成または更新する

パスワード、キーなどの機密性の高い入力をスクリプトに渡すには、ProtectedParameter を使用します。

  • Windows: Parameter と ProtectedParameter は引数としてスクリプトに渡されて、次のように実行されます: myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux: 名前付きパラメーターとその値は、.sh スクリプト内でアクセスできる環境構成に設定されます。 Nameless 引数の場合は、空の文字列を name 入力に渡します。 名前なし引数はスクリプトに渡されて、次のように実行されます: myscript.sh publicParam1value publicParam2value secret1value secret2value

マシンから RunCommand リソースを削除する

マシンに以前にデプロイされた RunCommand リソースを削除します。 スクリプトの実行がまだ進行中の場合は、実行が終了されます。

Remove-AzConnetedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -RunCommandName "RunCommandName"

実行コマンドの操作

Azure Arc 対応サーバーの実行コマンドでは、次の操作がサポートされます。

操作 説明
作成 実行コマンドを作成する操作。 これにより、実行コマンドが実行されます。
削除 実行コマンドを削除する操作。 実行コマンドが実行中の場合、delete は実行コマンドの停止も行います。
Get 実行コマンドを取得する操作。
一覧取得 Azure Arc 対応サーバーのすべての実行コマンドを取得する操作。
更新プログラム 実行コマンドを更新する操作。 これにより、前の実行コマンドが停止します。

Note

出力とエラーの BLOB は、実行コマンド スクリプトが実行されるたびに上書きされます。

シナリオ例

サブスクリプション ID が “aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa” のリソース グループ "ContosoRG" に "2012DatacenterServer1" という Azure Arc 対応サーバーがあるとします。 Windows Server 2012/R2 サーバーのエンドポイントへのリモート アクセスを提供する必要があるシナリオを考えてみましょう。 Azure Arc で有効になっている拡張セキュリティ更新プログラムへのアクセスには、www.microsoft.com/pkiops/certs エンドポイントへのアクセスが必要です。 このエンドポイントへのアクセスを許可するファイアウォール規則をリモートで構成する必要があります。 このエンドポイントへの接続を許可するには、実行コマンドを使用します。

例 1: 実行コマンドを使用したエンドポイント アクセス

まず、PUT 操作を使用して、ターゲット Arc 対応サーバー上の www.microsoft.com/pkiops/certs エンドポイントへのエンドポイント アクセスを提供する実行コマンド スクリプトを作成します。

スクリプトを直接行に指定するには、次の操作を使用します。

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"
  }
}

SAS URL は、BLOB への読み取りアクセスを提供する必要があります。 SAS URL の有効期限は 24 時間にすることをお勧めします。 SAS URL は、 Azure portal 上で BLOB のオプションを使用して生成するか、または New-AzStorageBlobSASToken を使用して SAS トークンを生成することができます。 New-AzStorageBlobSASToken を使用して SAS トークンを生成する場合、SAS URL 形式は "base blob URL + "?" + New-AzStorageBlobSASToken からの SAS トークン" のようになります。

出力およびエラー BLOB は AppendBlob 型である必要があり、SAS URL は BLOB への読み取り、追加、作成、書き込みアクセスを提供する必要があります。 SAS URL の有効期限は 24 時間にすることをお勧めします。 Azure portal で BLOB のオプションを使って SAS URL を生成するか、New-AzStorageBlobSASToken を使って SAS トークンを生成することができます。

例 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: 実行コマンドを更新する

Windows Admin Center への接続のために、追加のエンドポイント *.waconazure.com へのアクセスを開くとします。 既存の実行コマンドを新しいパラメーターで更新できます。

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 コマンドを使用すると、すべての実行コマンドを取得できます。

LIST https://management.azure.com/subscriptions/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/resourceGroups/ContosoRG/providers/Microsoft.HybridCompute/machines/2012DatacenterServer1/runCommands/

例 5: 実行コマンドを削除する

実行コマンド拡張機能が不要になった場合は、次のコマンドを使用して削除できます。

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

実行コマンドの無効化

Azure Arc 対応サーバー上で実行コマンドを無効にするには、管理コマンド プロンプトを開き、次のコマンドを実行します。 これらのコマンドは、拡張機能ブロックリスト内の Connected Machine エージェントのローカル エージェント構成機能を使います。

Windows

azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"

Linux

sudo azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerlinux"