Azure Arc 対応サーバー (プレビュー) の [実行] コマンドを使用すると、リモート デスクトップ プロトコルまたは SSH 経由の直接接続を必要とせずに、Azure Arc に接続されている仮想マシン (VM) でスクリプトまたはコマンドをリモートで安全に実行できます。
Run コマンドを使用すると、各 VM に個別にサインインする必要がないため、ソフトウェアのインストールや更新、ファイアウォール規則の構成、正常性チェックの実行、問題のトラブルシューティングなどの管理タスクを実行するためのオーバーヘッドと労力が削減されます。
主なユース ケースの 1 つは、Run コマンドを使用してセキュリティ体制を強化することです。 Run コマンドを使用すると、セキュリティ パッチをリモートで適用したり、コンプライアンス ポリシーを適用したり、Azure Arc 対応サーバーの脆弱性を修復したりできます。 パスワードのローテーション、データの暗号化、監査ログなど、一般的なセキュリティ タスクを自動化することもできます。 Azure Arc を使用すると、ハイブリッド環境、マルチクラウド環境、エッジ環境でこれらのタスクを一貫して実行できるため、運用オーバーヘッドと応答時間を削減できます。
注
いくつかの違いがありますが、Azure Arc 対応サーバーの [実行] コマンドは、Azure VM で使用できる実行コマンド機能に似ています。これには、説明されている制限事項が含まれます。 違いの例として、Azure Arc 対応サーバーの [実行] コマンドは現在、Azure portal では使用できません。
しくみ
実行コマンドは接続されたマシン エージェント (バージョン 1.33 以降) に組み込まれており、スクリプトを実行したり、作成、更新、削除、シーケンス処理、および一覧表示操作全体でスクリプト管理を一元化したりできます。
Run コマンドを使用して Azure CLI、PowerShell、または REST API からスクリプトまたはコマンドを実行すると、Azure は VM にインストールされている接続マシン エージェントに指示して、指定されたアクションを完了します。 VM に他の拡張機能をインストールする必要はありません。
Azure Arc 対応サーバーの [実行] コマンドは無料で使用できますが、Azure に保存するスクリプトには課金料金が発生します。
Von Bedeutung
Azure Arc 対応サーバーでコマンドを実行しても、マネージド ID を使用した BLOB の認証は現在サポートされていません。
サポートされている構成
Run コマンドは、さまざまな構成で使用できます。
- 経験: Azure CLI、PowerShell、REST API
- オペレーティング システム: Windows と Linux
- 環境: オンプレミス、VMware、SCVMM、AWS、GCP、OCI など、Azure Arc に接続されている Azure 以外の環境
注
Linux では、Run コマンドは 36 文字を超える名前を受け入れられません。
[実行] コマンドを使用する
[実行] コマンドを使用するには、VM で実行するコマンドを含むスクリプトを作成します。 次に、 Azure PowerShell、AzureCLI、または REST API を使用してスクリプトを実行します。 このセクションには、各エクスペリエンスで Run コマンドを使用する方法の例が含まれています。
次の例では、Azure PowerShell 用 Az.ConnectedMachine モジュール を使用して、Arc 対応サーバーでスクリプトまたはコマンドを実行します。
コンピューターでスクリプトを実行する
このコマンドは、スクリプトをマシンに送信して実行し、キャプチャされた出力を返します。
New-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -Location "eastus" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
注
-SourceScript パラメーターには複数のコマンドを追加できます。
;を使用して各コマンドを区切る。 例: –SourceScript "id; echo Hello World!"
ストレージ内のスクリプト ファイルを使用してコンピューターでスクリプトを実行する
このコマンドは、スクリプトがアップロードされたストレージ BLOB の Shared Access Signature (SAS) URI に Connected Machine エージェントを誘導します。 次に、エージェントにスクリプトの実行を指示し、キャプチャされた出力を返します。
New-AzConnectedMachineRunCommand -ResourceGroupName "MyRG0" -MachineName "MyMachine" -RunCommandName "MyRunCommand" -Location "eastus" -SourceScriptUri “< SAS URI of a storage blob with read access or public URI>”
注
scriptUriはストレージ BLOB の Shared Access Signature (SAS) URI であり、BLOB への読み取りアクセスを提供する必要があります。 SAS URI には 24 時間の有効期限が推奨されます。 BLOB オプションを使用して Azure portal で SAS URI を生成したり、 New-AzStorageBlobSASTokenを使用して SAS トークンを生成したりできます。
New-AzStorageBlobSASTokenを使用して SAS トークンを生成する場合、SAS URI 形式は base blob URL + "?" + New-AzStorageBlobSASToken からの SAS トークンです。
マシンにデプロイされたすべての実行コマンド リソースを一覧表示する
このコマンドからは、以前にデプロイされた実行コマンドと、それらのプロパティの完全な一覧が返されます。
Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine"
実行の状態と結果を取得する
このコマンドは、実行コマンドの現在の実行の進行状況 (最新の出力、開始時刻と終了時刻、終了コード、実行の終了状態など) を取得します。
Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -RunCommandName "RunCommandName"
インスタンス ビューを使用して実行コマンドの状態情報を取得する
このコマンドは、インスタンス ビューを持つマシン上の実行コマンドの状態情報を取得します。 インスタンス ビューには、実行コマンドの実行状態 (成功、失敗など)、終了コード、標準出力、およびスクリプトの実行によって生成された標準エラーが含まれます。 0 以外の終了コードは、実行が失敗したことを示します。
Get-AzConnectedMachineRunCommand -ResourceGroupName "MyRG" -MachineName "MyMachine" -RunCommandName "MyRunCommand"
他の情報と共に、応答は次のフィールドを返します。
-
InstanceViewExecutionState: スクリプトが成功したかどうかを示します。 -
ProvisioningState: 拡張機能プラットフォームが Run コマンド スクリプトをトリガーできたかどうかを示します。
マシンで実行コマンドを作成または更新する
このコマンドは、マシン上で Run コマンドを作成または更新し、標準出力および標準エラーメッセージを出力とエラーの AppendBlobs にストリーミングします。
New-AzConnectedMachineRunCommand -ResourceGroupName "MyRG0" -MachineName "MyMachine" -RunCommandName "MyRunCommand3" -Location "eastus" -SourceScript "id; echo HelloWorld" -OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri <ErrorBlobUri>
注
出力 BLOB とエラー BLOB は AppendBlob 型である必要があり、SAS URI は BLOB への読み取り、追加、作成、および書き込みアクセスを提供する必要があります。 SAS URI には 24 時間の有効期限が推奨されます。 出力 BLOB またはエラー BLOB が存在しない場合は、AppendBlob 型の BLOB が作成されます。 BLOB のオプションを使用して Azure portal で SAS URI を生成したり、 New-AzStorageBlobSASTokenを使用して SAS トークンを生成したりできます。
別のユーザーとしてマシンで実行コマンドを作成または更新する
このコマンドは、 RunAsUser パラメーターと RunAsPassword パラメーターを使用して、コンピューター上の Run コマンドを別のユーザーとして作成または更新します。
このコマンドを使用する前に、次の操作を行います。
- コンピューターの管理者に連絡し、ユーザーがマシンにアクセスできることを確認します。
- ユーザーが、ディレクトリ、ファイル、ネットワーク リソースなど、Run コマンドによってアクセスされるリソースにアクセスできることを確認します。
- Windows コンピューターで、"セカンダリ ログオン" が実行されていることを確認します。
New-AzConnectedMachineRunCommand -ResourceGroupName "MyRG0" -MachineName "MyMachine" -RunCommandName "MyRunCommand" -Location "eastus" -SourceScript "id; echo HelloWorld" -RunAsUser myusername -RunAsPassword mypassword
ローカル スクリプト ファイルを使用してマシンで Run コマンドを作成または更新する
このコマンドは、 cmdlet が実行されているクライアント コンピューター上のローカル スクリプト ファイルを使用して、コンピューターで実行コマンドを作成または更新します。
New-AzConnectedMachineRunCommand -ResourceGroupName "MyRG0" -MachineName "MyMachine" -RunCommandName "MyRunCommand" -Location "eastus" -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"
スクリプトに機密性の高い入力を渡しながら、コンピューターで Run コマンドを作成または更新する
このコマンドは、パスワードやキーなどの機密性の高い入力をスクリプトに渡すように指定された ProtectedParameter を使用して Run コマンドを作成または更新します。
$privateParametersArray = @{name='inputText';value='privateParam1value'}
New-AzConnectedMachineRunCommand -MachineName "MyMachine" -ResourceGroupName "MyRG0" -RunCommandName "MyRunCommand" -Location "eastus" -SourceScriptUri <SourceScriptUri> -ProtectedParameter $privateParametersArray
inputText をキャプチャするためのサンプル スクリプト:
param ([string]$inputText)
Write-Output $inputText
Parameterを使用して、同様の方法でパブリック パラメーターを渡すこともできます。
Windows の場合: パラメーターと ProtectedParameter は、次の例のようなスクリプトに渡されます。
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2valueLinux の場合: 名前付き
Parameterとその値は、PowerShell スクリプト内でアクセスできる環境構成に設定されます。 名前のない引数の場合は、空の文字列を渡して入力に名前を付けます。 名前のない引数は、次の例のようなスクリプトに渡されます。myscript.sh publicParam1value publicParam2value secret1value secret2value
マシンから実行コマンド リソースを削除する
このコマンドは、以前にマシンにデプロイされた Run コマンド リソースを削除します。 スクリプトの実行がまだ進行中の場合、実行は終了します。
Remove-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -RunCommandName "RunCommandName"
[実行] コマンドへのアクセスを制限する (プレビュー)
[実行] コマンドでリモート アクセスを有効にすると、仮想マシン (VM) で特定のタスクを実行するためのオーバーヘッドが削減されますが、リモート アクセスを制限することもできます。
Azure ロールベースのアクセス制御 (Azure RBAC) を使用して実行コマンドへのアクセスを管理する
Azure RBAC を使用して、[実行] コマンドを使用してコマンドとスクリプトを実行できるユーザーを制御します。
次の表では、実行コマンド アクション、アクションの実行に必要なアクセス許可、およびアクセス許可を付与する RBAC ロールについて説明します。
| アクション | 権限 | アクセス権限がある RBAC |
|---|---|---|
| 実行コマンドの一覧表示またはコマンドの詳細の表示 | Microsoft.HybridCompute/machines/runCommands/read |
ビルトインの閲覧者ロール以上 |
| コマンドを実行する | Microsoft.HybridCompute/machines/runCommands/write |
Azure に接続したマシンのリソース管理者ロール以上 |
実行コマンド機能へのアクセスを制御するには、 組み込みのロール のいずれかを使用するか、実行コマンドのアクセス許可を付与する カスタム ロール を作成します。
実行コマンドをローカルでブロックする
[実行] コマンド拡張機能を許可リスト (含む) またはブロック リスト (排他) に追加することで、接続されたマシン エージェントが実行コマンドを使用して VM へのアクセスを許可するかどうかを制御できます。
詳細については、「 拡張機能の許可リストとブロック リスト」を参照してください。
次の例では、Windows VM 上のブロック リストに Run コマンド拡張機能を追加します。
azcmagent config set extensions.blocklist "microsoft.cplat.core/runcommandhandlerwindows"
次の例では、Linux VM の許可リストに実行コマンド拡張機能を追加します。
azcmagent config set extensions.allowlist "microsoft.cplat.core/runcommandhandlerlinux"
次のステップ
Run コマンドの使用方法については、次のリソースを参照してください。