共用方式為


在 Hybrid Runbook Worker 上執行自動化 Runbook

重要

Azure 自動化代理程式型使用者混合式 Runbook 背景工作角色 (Windows 和 Linux) 已在 2024 年 8 月 31 日淘汰,不再受到支援。 請遵循如何從現有代理程式型使用者混合式 Runbook 背景工作角色,移轉至延伸模組型混合式背景工作角色的指導方針。

注意

Azure 自動化執行身分帳戶已在 2023 年 9 月 30 日淘汰,並以受控識別取代。 請遵循如何開始移轉 Runbook 以使用受控識別的指導方針。 如需詳細資訊,請參閱 從現有的執行身分帳戶移轉至受控識別

混合式 Runbook 背景工作角色上執行的 Runbook 通常會管理本機電腦上的資源,或管理部署背景工作角色所在的本機環境之中的資源。 Azure 自動化中的 Runbook 通常會管理 Azure 雲端中的資源。 對於 Azure 自動化和混合式 Runbook 背景工作上執行的 Runbook,雖然使用方法不同,不過結構都相同。

當您撰寫要在混合式 Runbook 背景工作角色上執行的 Runbook 時,應該在裝載背景工作角色的機器內編輯並測試 Runbook。 主機電腦具有您管理本機資源所需要的所有 PowerShell 模組和網路存取。 一旦在混合式 Runbook 背景工作角色機器上測試 Runbook,接著可以將其上傳至 Azure 自動化環境,其可供您在背景工作中執行。

規劃受防火牆保護的 Azure 服務

Azure 儲存體Azure Key VaultAzure SQL 上啟用 Azure 防火牆,這會封鎖從 Azure 自動化 Runbook 存取這些服務。 即使啟用防火牆例外以允許受信任 Microsoft 服務時,存取也會遭到封鎖,因為自動化不是受信任服務清單的一部分。 啟用防火牆後,只能使用混合式 Runbook 背景工作角色和虛擬網路服務端點來進行存取。

規劃 Runbook 作業行為

Azure 自動化在混合式 Runbook 背景工作角色上處理工作的方式與在雲端沙箱中執行的工作有所不同。 如果有長時間執行的 Runbook,請確定能夠接受可能重新啟動。 如需作業行為的詳細資訊,請參閱混合式 Runbook 背景工作角色作業

服務帳戶

Windows 混合式背景工作角色

混合式 Runbook 背景工作角色的作業會在本機系統帳戶下執行。

注意

  • 延伸模組型和代理程式型 Windows 混合式 Runbook 背景工作角色都支援 PowerShell 5.1、PowerShell 7.1 (預覽)、Python 2.7 和 Python 3.8 Runbook。 針對代理程式型背景工作角色,請確定 Windows 混合式背景工作角色版本為 7.3.12960 或更新版本。
  • 僅延伸模組型 Windows 混合式背景工作角色支援 PowerShell 7.2 和 Python 3.10 (預覽) Runbook。 確定 Windows 混合式背景工作角色延伸模組版本為 1.1.11 或更新版本。

注意

若要在 Windows 系統中建立環境變數,請遵循下列步驟:

  1. 移至 [控制面板]>[系統]>[進階系統設定]
  2. 在 [系統屬性] 下,選取 [環境變數]
  3. 在 [系統變數] 中,選取 [新增]
  4. 提供變數名稱變數值,然後選取 [確定]
  5. 從目前的使用者重新啟動 VM 或登出,並且登入以實作環境變數變更。

PowerShell 7.2

若要在 Windows 混合式背景工作角色上執行 PowerShell 7.2 Runbook,請在混合式背景工作角色上安裝 PowerShell。 請參閱在 Windows 上安裝 PowerShell

PowerShell 7.2 安裝完成之後,請使用 powershell_7_2_path 的變數名稱和可執行檔 PowerShell 位置的變數值建立環境變數。 成功建立環境變數之後,請重新啟動混合式 Runbook 背景工作角色。

PowerShell 7.1

若要在 Windows 混合式背景工作角色上執行 PowerShell 7.1 Runbook,請在混合式背景工作角色上安裝 PowerShell。 請參閱在 Windows 上安裝 PowerShell。 確定將 PowerShell 檔案新增至 PATH 環境變數,並在安裝之後重新啟動混合式 Runbook 背景工作角色。

Python 3.10

若要在 Windows 混合式背景工作角色上執行 Python 3.10 Runbook,請在混合式背景工作角色上安裝 Python。 請參閱 Installing Python on Windows (在 Windows 上安裝 Python)。

Python 3.10 安裝完成之後,請使用 python_3_10_path 的變數名稱和可執行檔 Python 位置的變數值建立環境變數。 成功建立環境變數之後,請重新啟動混合式 Runbook 背景工作角色。

Python 3.8

若要在 Windows 混合式背景工作角色上執行 Python 3.8 Runbook,請在混合式背景工作角色上安裝 Python。 請參閱 Installing Python on Windows (在 Windows 上安裝 Python)。 為 Python 3.8 Runbook 建立環境變數 PYTHON_3_PATH,並確保將可執行檔 Python 的位置新增為變數值。 成功建立環境變數之後,請重新啟動混合式 Runbook 背景工作角色。

如果 Python 可執行檔位於預設位置 C:\WPy64-3800\python-3.8.0.amd64\python.exe,則您不需要建立環境變數。

Python 2.7

若要在 Windows 混合式背景工作角色上執行 Python 2.7 Runbook,請在混合式背景工作角色上安裝 Python。 請參閱 Installing Python on Windows (在 Windows 上安裝 Python)。 為 Python 2.7 Runbook 建立環境變數 PYTHON_2_PATH,並確保將可執行檔 Python 檔案的位置新增為變數值。 成功建立環境變數之後,請重新啟動混合式 Runbook 背景工作角色。

如果 Python 可執行檔位於預設位置 C:\Python27\python.exe,則您不需要建立環境變數。

Linux 混合式背景工作角色

注意

  • 延伸模組型和代理程式型 Linux 混合式 Runbook 背景工作角色都支援 PowerShell 5.1、PowerShell 7.1 (預覽)、Python 2.7、Python 3.8 Runbook。 針對代理程式型背景工作角色,請確定 Linux 混合式 Runbook 背景工作角色版本為 1.7.5.0 或更新版本。
  • 僅延伸模組型 Linux 混合式背景工作角色支援 PowerShell 7.2 和 Python 3.10 (預覽) Runbook。 確定 Linux 混合式背景工作角色延伸模組版本為 1.1.11 或更新版本。

注意

若要在 Linux 系統中建立環境變數,請遵循下列步驟:

  1. 開啟 /etc/environment。
  2. 在 /etc/environment 的新行中新增 VARIABLE_NAME="variable_value" 建立新的環境變數 (VARIABLE_NAME 是新環境變數的名稱,variable_value 代表要指派的值)。
  3. 將變更儲存至 /etc/environment 以實作環境變數變更之後,重新啟動 VM 或從目前的使用者登出和登入。

PowerShell 7.2

若要在 Linux 混合式背景工作角色上執行 PowerShell 7.2 Runbook,請在混合式背景工作角色上安裝 PowerShell 檔案。 如需詳細資訊,請參閱在 Linux 上安裝 PowerShell

PowerShell 7.2 安裝完成之後,請使用 powershell_7_2_path變數名稱和可執行檔 PowerShell 檔案位置的變數值建立環境變數。 成功建立環境變數之後,請重新啟動混合式 Runbook 背景工作角色。

Python 3.10

若要在 Linux 混合式背景工作角色上執行 Python 3.10 Runbook,請在混合式背景工作角色上安裝 Python。 如需詳細資訊,請參閱在 Linux 上安裝 Python 3.10

Python 3.10 安裝完成之後,請使用 python_3_10_path變數名稱和可執行檔 Python 位置的變數值建立環境變數。 成功建立環境變數之後,請重新啟動混合式 Runbook 背景工作角色。

Python 3.8

若要在 Linux 混合式背景工作角色上執行 Python 3.8 Runbook,請在混合式背景工作角色上安裝 Python。 確定將可執行檔 Python 檔案新增至 PATH 環境變數,並在安裝之後重新啟動混合式 Runbook 背景工作角色。

Python 2.7

若要在 Linux 混合式背景工作角色上執行 Python 2.7 Runbook,請在混合式背景工作角色上安裝 Python。 確定將可執行檔 Python 檔案新增至 PATH 環境變數,並在安裝之後重新啟動混合式 Runbook 背景工作角色。

設定 Runbook 許可權

以下列方式定義 Runbook 在混合式 Runbook 背景工作角色上執行的權限:

  • 讓 Runbook 提供自己的驗證給本機資源。
  • 使用 Azure 資源的受控識別驗證設定驗證。
  • 指定混合式背景工作角色認證,以提供所有 Runbook 的使用者內容。

對本機資源使用 Runbook 驗證

如果準備可提供自己對資源驗證的 Runbook,請在 Runbook 中使用認證憑證資產。 有數個 Cmdlet 可讓您指定認證,讓 Runbook 可以向不同的資源進行驗證。 下列範例顯示會重新啟動電腦的 Runbook 的一部分。 它會從認證資產擷取認證和從變數資產擷取電腦的名稱,然後使用這些值搭配 Restart-Computer Cmdlet。

$Cred = Get-AutomationPSCredential -Name "MyCredential"
$Computer = Get-AutomationVariable -Name "ComputerName"

Restart-Computer -ComputerName $Computer -Credential $Cred

您也可以使用 InlineScript 活動。 InlineScript 可讓您在具有認證的另一部電腦上執行程式碼區塊。

使用 Runbook 驗證搭配受控識別

在 Azure 虛擬機器上的混合式 Runbook 背景工作角色,可以使用受控識別向 Azure 資源進行驗證。 使用 Azure 資源的受控識別而非執行身分帳戶的好處是您不需要:

  • 匯出執行身分憑證,然後將其匯入混合式 Runbook 背景工作角色。
  • 更新執行身分帳戶所使用的憑證。
  • 處理 Runbook 程式碼中的執行身分連線物件。

在混合式 Runbook 背景工作角色指令碼中有兩種方式可以使用受控識別。

  1. 針對自動化帳戶使用系統指派的受控識別:

    1. 針對自動化帳戶設定系統指派的受控識別。

    2. 在訂用帳戶內授與此識別執行其工作的必要權限

    3. 更新 Runbook 以搭配使用 Connect-AzAccount Cmdlet 與 Identity 參數,以向 Azure 資源進行驗證。 此組態可減少使用執行身分帳戶及執行相關聯的帳戶管理。

      # Ensures you do not inherit an AzContext in your runbook
      Disable-AzContextAutosave -Scope Process
      
      # Connect to Azure with system-assigned managed identity
      $AzureContext = (Connect-AzAccount -Identity).context
      
      # set and store context
      $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile
      $AzureContext
      
      # Get all VM names from the subscription
      Get-AzVM -DefaultProfile $AzureContext | Select Name
      

    注意

    無法在混合式 Runbook 背景工作角色上使用自動化帳戶的使用者受控識別,它必須是自動化帳戶的系統受控識別。

  2. 針對以混合式 Runbook 背景工作角色身分執行的 Azure VM,請使用 VM 受控識別。 在此情況下,您可以使用 VM 的使用者指派受控識別 VM 的系統指派受控識別。

    注意

    適用於已使用自動化帳戶受控識別來設定的自動化帳戶。 一旦啟用自動化帳戶受控識別,就無法再使用 VM 受控識別,然後只能使用上面選項 1 中所述的自動化帳戶系統指派的受控識別。

    使用下列任何一個受控識別:

    1. 為 VM 設定系統受控識別。
    2. 在訂用帳戶內授與此識別執行其工作的必要權限
    3. 更新 Runbook 以將 Connect-Az-Account cmdlet 與 Identity 參數搭配使用,以向 Azure 資源進行驗證。 此組態可減少使用執行身分帳戶及執行相關聯的帳戶管理的需求。
        # Ensures you do not inherit an AzContext in your runbook
        Disable-AzContextAutosave -Scope Process
    
        # Connect to Azure with system-assigned managed identity
        $AzureContext = (Connect-AzAccount -Identity).context
    
        # set and store context
        $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile
        $AzureContext
    
        # Get all VM names from the subscription
        Get-AzVM -DefaultProfile $AzureContext | Select Name
    

以混合式 Runbook 背景工作角色身分執行的已啟用 Arc 的伺服器或已啟用 Arc 的 VMware vSphere VM 已經有一個指派給它的內建的系統受控識別 (其可來進行驗證)。

  1. 您可以藉由新增適當的角色指派,在資源的存取控制 (IAM) 刀鋒視窗中,授與此受控識別對訂用帳戶資源的存取權。

    螢幕擷取畫面,顯示如何選取受控識別。

  2. 視需要將 Azure Arc 受控識別新增至您選擇的角色中。

    螢幕擷取畫面,顯示如何在 [存取控制] 刀鋒視窗中新增角色指派。

注意

適用於已使用自動化帳戶受控識別來設定的自動化帳戶。 一旦啟用自動化帳戶受控識別,就無法再使用 Arc 受控識別,然後只能使用上面選項 1 中所述的自動化帳戶系統指派的受控識別。

注意

根據預設,Azure 內容會儲存起來以在 PowerShell 工作階段之間使用。 混合式 Runbook 背景工作角色上的先前 Runbook 已向 Azure 驗證時,該內容會根據 Azure 內容和登入認證 | Microsoft Docs,保存在 System PowerShell 配置檔中的磁碟。例如,具有 Get-AzVM 的 Runbook 可以傳回訂用帳戶中沒有呼叫 Connect-AzAccount 的全部 VM,而且使用者不需要在該 Runbook 內進行驗證即可存取 Azure 資源。 您可以停用 Azure PowerShell 中的內容自動儲存,如這裡所述。

搭配混合式背景工作角色認證使用 Runbook 驗證

先決條件

  • 應部署混合式背景工作角色,而且機器在執行 Runbook 之前應該處於執行中狀態。

混合式背景工作角色認證:您可以為混合式 Runbook 背景工作角色群組指定混合式背景工作角色認證,而不是讓 Runbook 向本機資源提供自己的驗證。 若要指定混合式背景工作角色認證,您必須定義具有本機資源存取權的認證資產。 這些資源包括憑證存放區,以及在群組中以混合式 Runbook 背景工作角色的這些認證執行的所有 Runbook。

  • 認證的使用者名稱必須是下列格式之一:

    • 網域\使用者名稱
    • username@domain
    • 使用者名稱 (適用於內部部署機器的本機帳戶)
  • 若要使用 PowerShell runbook Export-RunAsCertificateToHybridWorker,您必須在本機電腦上安裝適用於 Azure 自動化的 Az 模組。

針對混合式 Runbook 背景工作角色群組使用認證資產

依預設,混合式作業會在系統帳戶的內容下執行。 不過,若要在不同的認證資產下執行混合式作業,請遵循下列步驟進行:

  1. 建立具有本機資源存取權的 認證資產
  2. 在 Azure 入口網站中,開啟自動化帳戶。
  3. 選取Hybrid Worker 群組,然後選取特定群組。
  4. 選取設定
  5. 混合式背景工作角色認證的值從預設變更為自訂
  6. 選取認證,然後按一下 [儲存]
  7. 如果未為自訂使用者指派下列權限,則作業可能會暫停。
資源類型 資料夾權限
Azure VM C:\Packages\Plugins\Microsoft.Azure.Automation.HybridWorker.HybridWorkerForWindows (讀取與執行)
已啟用 Arc 的伺服器 C:\ProgramData\AzureConnectedMachineAgent\Tokens (讀取)
C:\Packages\Plugins\Microsoft.Azure.Automation.HybridWorker.HybridWorkerForWindows (讀取與執行)

注意

Linux 混合式背景工作角色不支援混合式背景工作角色認證。

在混合式 Runbook 背景工作角色上啟動 Runbook

在 Azure 自動化中啟動 Runbook 描述啟動 Runbook 的不同方法。 啟動混合式 Runbook 背景工作角色上的 Runbook 會使用執行位置選項,讓您指定混合式 Runbook 背景工作角色群組的名稱。 指定群組時,該群組中的其中一個背景工作角色會擷取並執行 Runbook。 如果您的 Runbook 未指定此選項,Azure 自動化會如往常般執行 Runbook。

在 Azure 入口網站中啟動 Runbook 時,您會看到 [執行於] 選項,您可以選取 [Azure] 或 [Hybrid Worker]。 選取 [混合式背景工作角色],以從下拉式清單中選擇混合式 Runbook 背景工作角色群組。

螢幕擷取畫面,顯示如何選取混合式 Runbook 背景工作角色群組。

使用 PowerShell 啟動 Runbook 時,請使用 RunOn 參數搭配 Start-AzAutomationRunbook Cmdlet。 下列範例使用 Windows PowerShell 在混合式 Runbook 背景工作角色群組上啟動名為 Test-Runbook 的 Runbook。

Start-AzAutomationRunbook -AutomationAccountName "MyAutomationAccount" -Name "Test-Runbook" -RunOn "MyHybridGroup"

在 Windows 混合式 Runbook 背景工作角色上使用已簽署的 Runbook

您可以將 Windows 混合式 Runbook 背景工作角色設定為只執行已簽署的 Runbook。

重要

一旦將混合式 Runbook 背景工作角色設定為只能執行已簽署的 Runbook,尚未經過簽署的 Runbook 將無法在背景工作角色上執行。

注意

PowerShell 7.x 不支援 Windows 和 Linux 混合式 Runbook 背景工作角色的已簽署 Runbook。

建立簽署憑證

下列範例會建立可用於簽署 Runbook 的自我簽署憑證。 此程式碼會建立憑證,並將它匯出,讓混合式 Runbook 背景工作角色可以稍後再將它匯入。 也會傳回指紋,供稍後用於參考憑證。

# Create a self-signed certificate that can be used for code signing
$SigningCert = New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\my `
    -Subject "CN=contoso.com" `
    -KeyAlgorithm RSA `
    -KeyLength 2048 `
    -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
    -KeyExportPolicy Exportable `
    -KeyUsage DigitalSignature `
    -Type CodeSigningCert

# Export the certificate so that it can be imported to the hybrid workers
Export-Certificate -Cert $SigningCert -FilePath .\hybridworkersigningcertificate.cer

# Import the certificate into the trusted root store so the certificate chain can be validated
Import-Certificate -FilePath .\hybridworkersigningcertificate.cer -CertStoreLocation Cert:\LocalMachine\Root

# Retrieve the thumbprint for later use
$SigningCert.Thumbprint

匯入憑證並設定簽章驗證的背景工作

將建立的憑證複製到群組中的每個混合式 Runbook 背景工作角色。 執行下列指令碼來匯入憑證並設定背景工作角色,以便在 Runbook 中使用簽章驗證。

# Install the certificate into a location that will be used for validation.
New-Item -Path Cert:\LocalMachine\AutomationHybridStore
Import-Certificate -FilePath .\hybridworkersigningcertificate.cer -CertStoreLocation Cert:\LocalMachine\AutomationHybridStore

# Import the certificate into the trusted root store so the certificate chain can be validated
Import-Certificate -FilePath .\hybridworkersigningcertificate.cer -CertStoreLocation Cert:\LocalMachine\Root

# Configure the hybrid worker to use signature validation on runbooks.
Set-HybridRunbookWorkerSignatureValidation -Enable $true -TrustedCertStoreLocation "Cert:\LocalMachine\AutomationHybridStore"

使用憑證簽署您的 Runbook

將混合式 Runbook 背景工作角色設定為僅使用已簽署的 Runbook,您必須簽署要在混合式 Runbook 背景工作角色上使用的 Runbook。 請使用下列範例 PowerShell 程式碼來簽署這些 Runbook。

$SigningCert = ( Get-ChildItem -Path cert:\LocalMachine\My\<CertificateThumbprint>)
Set-AuthenticodeSignature .\TestRunbook.ps1 -Certificate $SigningCert

簽署 Runbook 後,您必須將它匯入到您的自動化帳戶,並與簽章區塊一起發佈。 若要瞭解如何匯入 Runbook,請參閱匯入 Runbook

注意

請在您的 Runbook 程式碼中只使用純文字字元,包括註解。 使用具有變音符號的字元 (例如 á 或 ñ) 會導致錯誤。 Azure 自動化下載您的程式碼時,這些字元將會以問號取代,而簽署將會失敗並出現「簽章雜湊驗證失敗」的訊息。

在 Linux 混合式 Runbook 背景工作角色上使用已簽署的 Runbook

為了能夠使用已簽署的 Runbook,Linux 混合式 Runbook 背景工作角色必須具有本機電腦上的 GPG 可執行檔。

重要

一旦將混合式 Runbook 背景工作角色設定為只能執行已簽署的 Runbook,尚未經過簽署的 Runbook 將無法在背景工作角色上執行。

您將執行以下步驟來完成此設定:

  • 建立 GPG Keyring 和金鑰組
  • 使 Keyring 可供混合式 Runbook 背景工作角色使用
  • 確認簽章驗證已開啟
  • 簽署 Runbook

注意

  • PowerShell 7.x 不支援代理程式型 Windows 和代理程式型 Linux 混合式 Runbook 背景工作角色的已簽署 Runbook。
  • 延伸模組型 Linux 混合式背景工作角色不支援已簽署的 PowerShell 和 Python Runbook。

建立 GPG Keyring 和金鑰組

注意

建立 GPG Keyring 和金鑰組僅適用於代理程式型混合式背景工作角色。

若要建立 GPG Keyring 和金鑰組,請使用混合式 Runbook 背景工作角色 nxautomation 帳戶

  1. 使用 sudo 應用程式,以 nxautomation 帳戶登入。

    sudo su - nxautomation
    
  2. 在您使用 nxautomation 時,請產生 GPG 金鑰組做為根。 GPG 會指導您逐步執行步驟。 您必須提供名稱、電子郵件地址、到期時間和複雜密碼。 接下來請等到機器上有足夠的熵來產生金鑰。

    sudo gpg --generate-key
    
  3. 由於 GPG 目錄是使用 sudo 所產生的,因此,您必須使用下列命令做為根將其擁有者變更為 nxautomation

    sudo chown -R nxautomation ~/.gnupg
    

使 Keyring 可供混合式 Runbook 背景工作角色使用

建立 Keyring 之後,使它可供混合式 Runbook 背景工作角色使用。 修改 home/nxautomation/state/worker.conf 這個設定檔,以將下列範例程式碼包含在檔案區段 [worker-optional] 底下。

gpg_public_keyring_path = /home/nxautomation/run/.gnupg/pubring.kbx

確認簽章驗證已開啟

如果電腦上已停用簽章驗證,您必須執行下列命令做為根加以開啟。 使用您的工作區識別碼來取代 <LogAnalyticsworkspaceId>

sudo python /opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/DSCResources/MSFT_nxOMSAutomationWorkerResource/automationworker/scripts/require_runbook_signature.py --true <LogAnalyticsworkspaceId>

簽署 Runbook

設定簽章驗證之後,使用下列命令來簽署 Runbook。

gpg --clear-sign <runbook name>

已簽署的 Runbook 名稱為 <runbook name>.asc

您現在即可將已簽署的 Runbook 上傳至 Azure 自動化,而且像一般 Runbook 一樣執行。

記錄

為了協助針對在混合式 Runbook 背景工作角色上執行的 Runbook 問題進行疑難排解,記錄檔會儲存在本機的下列位置:

  • 在 Windows 上,位於 C:\ProgramData\Microsoft\System Center\Orchestrator\<version>\SMA\Sandboxes (針對詳細的作業執行階段程序記錄)。 高階 Runbook 作業狀態事件會寫入 Application and Services Logs\Microsoft-Automation\Operations 事件記錄檔。

  • 在 Linux 上,您可以在 /home/nxautomation/run/worker.log 找到使用者混合式背景工作記錄檔,而可以在 /var/opt/microsoft/omsagent/run/automationworker/worker.log 找到系統 Runbook 背景工作記錄檔。

下一步